76 static jclass ni_ia4cls; 77 static jclass ni_ia6cls; 78 static jmethodID ni_ia4ctrID; 79 static jmethodID ni_ia6ctrID; 80 static int initialized = 0; 81 82 JNIEXPORT jobjectArray JNICALL 83 Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, 84 jstring host) { 85 const char *hostname; 86 jobjectArray ret = 0; 87 int retLen = 0; 88 jboolean preferIPv6Address; 89 static jfieldID ia_preferIPv6AddressID; 90 91 int error=0; 92 struct addrinfo hints, *res, *resNew = NULL; 93 94 if (!initialized) { 95 ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); 96 ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); 97 ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); 98 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); 99 ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); 100 ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); 101 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); 102 ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); 103 initialized = 1; 104 } 105 if (IS_NULL(host)) { 106 JNU_ThrowNullPointerException(env, "host is null"); 107 return 0; 108 } 109 hostname = JNU_GetStringPlatformChars(env, host, JNI_FALSE); 110 CHECK_NULL_RETURN(hostname, NULL); 111 112 if (ia_preferIPv6AddressID == NULL) { 113 jclass c = (*env)->FindClass(env,"java/net/InetAddress"); 114 if (c) { 115 ia_preferIPv6AddressID = 116 (*env)->GetStaticFieldID(env, c, "preferIPv6Address", "Z"); 117 } 118 if (ia_preferIPv6AddressID == NULL) { 119 JNU_ReleaseStringPlatformChars(env, host, hostname); 120 return NULL; 121 } 122 } | 76 static jclass ni_ia4cls; 77 static jclass ni_ia6cls; 78 static jmethodID ni_ia4ctrID; 79 static jmethodID ni_ia6ctrID; 80 static int initialized = 0; 81 82 JNIEXPORT jobjectArray JNICALL 83 Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, 84 jstring host) { 85 const char *hostname; 86 jobjectArray ret = 0; 87 int retLen = 0; 88 jboolean preferIPv6Address; 89 static jfieldID ia_preferIPv6AddressID; 90 91 int error=0; 92 struct addrinfo hints, *res, *resNew = NULL; 93 94 if (!initialized) { 95 ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); 96 CHECK_NULL_RETURN(ni_iacls, NULL); 97 ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); 98 CHECK_NULL_RETURN(ni_iacls, NULL); 99 ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); 100 CHECK_NULL_RETURN(ni_ia4cls, NULL); 101 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); 102 CHECK_NULL_RETURN(ni_ia4cls, NULL); 103 ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); 104 CHECK_NULL_RETURN(ni_ia6cls, NULL); 105 ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); 106 CHECK_NULL_RETURN(ni_ia6cls, NULL); 107 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); 108 CHECK_NULL_RETURN(ni_ia4ctrID, NULL); 109 ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); 110 CHECK_NULL_RETURN(ni_ia6ctrID, NULL); 111 initialized = 1; 112 } 113 if (IS_NULL(host)) { 114 JNU_ThrowNullPointerException(env, "host is null"); 115 return 0; 116 } 117 hostname = JNU_GetStringPlatformChars(env, host, JNI_FALSE); 118 CHECK_NULL_RETURN(hostname, NULL); 119 120 if (ia_preferIPv6AddressID == NULL) { 121 jclass c = (*env)->FindClass(env,"java/net/InetAddress"); 122 if (c) { 123 ia_preferIPv6AddressID = 124 (*env)->GetStaticFieldID(env, c, "preferIPv6Address", "Z"); 125 } 126 if (ia_preferIPv6AddressID == NULL) { 127 JNU_ReleaseStringPlatformChars(env, host, hostname); 128 return NULL; 129 } 130 } |