29 #include "jni_util.h" 30 #include "jlong.h" 31 #include "nio.h" 32 #include "nio_util.h" 33 34 #include "sun_nio_ch_Iocp.h" 35 36 37 static jfieldID completionStatus_error; 38 static jfieldID completionStatus_bytesTransferred; 39 static jfieldID completionStatus_completionKey; 40 static jfieldID completionStatus_overlapped; 41 42 43 JNIEXPORT void JNICALL 44 Java_sun_nio_ch_Iocp_initIDs(JNIEnv* env, jclass this) 45 { 46 jclass clazz; 47 48 clazz = (*env)->FindClass(env, "sun/nio/ch/Iocp$CompletionStatus"); 49 if (clazz == NULL) { 50 return; 51 } 52 completionStatus_error = (*env)->GetFieldID(env, clazz, "error", "I"); 53 if (completionStatus_error == NULL) return; 54 completionStatus_bytesTransferred = (*env)->GetFieldID(env, clazz, "bytesTransferred", "I"); 55 if (completionStatus_bytesTransferred == NULL) return; 56 completionStatus_completionKey = (*env)->GetFieldID(env, clazz, "completionKey", "I"); 57 if (completionStatus_completionKey == NULL) return; 58 completionStatus_overlapped = (*env)->GetFieldID(env, clazz, "overlapped", "J"); 59 } 60 61 JNIEXPORT jint JNICALL 62 Java_sun_nio_ch_Iocp_osMajorVersion(JNIEnv* env, jclass this) 63 { 64 OSVERSIONINFOEX ver; 65 ver.dwOSVersionInfoSize = sizeof(ver); 66 GetVersionEx((OSVERSIONINFO *) &ver); 67 return (ver.dwPlatformId == VER_PLATFORM_WIN32_NT) ? 68 (jint)(ver.dwMajorVersion) : (jint)0; 69 } 70 71 JNIEXPORT jlong JNICALL 72 Java_sun_nio_ch_Iocp_createIoCompletionPort(JNIEnv* env, jclass this, 73 jlong handle, jlong existingPort, jint completionKey, jint concurrency) 74 { 75 ULONG_PTR ck = completionKey; 76 HANDLE port = CreateIoCompletionPort((HANDLE)jlong_to_ptr(handle), 77 (HANDLE)jlong_to_ptr(existingPort), 78 ck, | 29 #include "jni_util.h" 30 #include "jlong.h" 31 #include "nio.h" 32 #include "nio_util.h" 33 34 #include "sun_nio_ch_Iocp.h" 35 36 37 static jfieldID completionStatus_error; 38 static jfieldID completionStatus_bytesTransferred; 39 static jfieldID completionStatus_completionKey; 40 static jfieldID completionStatus_overlapped; 41 42 43 JNIEXPORT void JNICALL 44 Java_sun_nio_ch_Iocp_initIDs(JNIEnv* env, jclass this) 45 { 46 jclass clazz; 47 48 clazz = (*env)->FindClass(env, "sun/nio/ch/Iocp$CompletionStatus"); 49 CHECK_NULL(clazz); 50 completionStatus_error = (*env)->GetFieldID(env, clazz, "error", "I"); 51 CHECK_NULL(completionStatus_error); 52 completionStatus_bytesTransferred = (*env)->GetFieldID(env, clazz, "bytesTransferred", "I"); 53 CHECK_NULL(completionStatus_bytesTransferred); 54 completionStatus_completionKey = (*env)->GetFieldID(env, clazz, "completionKey", "I"); 55 CHECK_NULL(completionStatus_completionKey); 56 completionStatus_overlapped = (*env)->GetFieldID(env, clazz, "overlapped", "J"); 57 CHECK_NULL(completionStatus_overlapped); 58 } 59 60 JNIEXPORT jint JNICALL 61 Java_sun_nio_ch_Iocp_osMajorVersion(JNIEnv* env, jclass this) 62 { 63 OSVERSIONINFOEX ver; 64 ver.dwOSVersionInfoSize = sizeof(ver); 65 GetVersionEx((OSVERSIONINFO *) &ver); 66 return (ver.dwPlatformId == VER_PLATFORM_WIN32_NT) ? 67 (jint)(ver.dwMajorVersion) : (jint)0; 68 } 69 70 JNIEXPORT jlong JNICALL 71 Java_sun_nio_ch_Iocp_createIoCompletionPort(JNIEnv* env, jclass this, 72 jlong handle, jlong existingPort, jint completionKey, jint concurrency) 73 { 74 ULONG_PTR ck = completionKey; 75 HANDLE port = CreateIoCompletionPort((HANDLE)jlong_to_ptr(handle), 76 (HANDLE)jlong_to_ptr(existingPort), 77 ck, |