75 static jclass ni_iacls; |
75 static jclass ni_iacls; |
76 static jclass ni_ia4cls; |
76 static jclass ni_ia4cls; |
77 static jclass ni_ia6cls; |
77 static jclass ni_ia6cls; |
78 static jmethodID ni_ia4ctrID; |
78 static jmethodID ni_ia4ctrID; |
79 static jmethodID ni_ia6ctrID; |
79 static jmethodID ni_ia6ctrID; |
80 static jfieldID ni_iaaddressID; |
|
81 static jfieldID ni_iahostID; |
|
82 static jfieldID ni_iafamilyID; |
|
83 static jfieldID ni_ia6ipaddressID; |
80 static jfieldID ni_ia6ipaddressID; |
84 static int initialized = 0; |
81 static int initialized = 0; |
85 |
82 |
86 JNIEXPORT jobjectArray JNICALL |
83 JNIEXPORT jobjectArray JNICALL |
87 Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, |
84 Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, |
102 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); |
99 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); |
103 ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); |
100 ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); |
104 ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); |
101 ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); |
105 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); |
102 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); |
106 ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); |
103 ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); |
107 ni_iaaddressID = (*env)->GetFieldID(env, ni_iacls, "address", "I"); |
|
108 ni_iafamilyID = (*env)->GetFieldID(env, ni_iacls, "family", "I"); |
|
109 ni_iahostID = (*env)->GetFieldID(env, ni_iacls, "hostName", "Ljava/lang/String;"); |
|
110 ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B"); |
104 ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B"); |
111 initialized = 1; |
105 initialized = 1; |
112 } |
106 } |
113 if (IS_NULL(host)) { |
107 if (IS_NULL(host)) { |
114 JNU_ThrowNullPointerException(env, "host is null"); |
108 JNU_ThrowNullPointerException(env, "host is null"); |
241 jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); |
235 jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); |
242 if (IS_NULL(iaObj)) { |
236 if (IS_NULL(iaObj)) { |
243 ret = NULL; |
237 ret = NULL; |
244 goto cleanupAndReturn; |
238 goto cleanupAndReturn; |
245 } |
239 } |
246 (*env)->SetIntField(env, iaObj, ni_iaaddressID, |
240 setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); |
247 ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); |
241 setInetAddress_hostName(env, iaObj, host); |
248 (*env)->SetObjectField(env, iaObj, ni_iahostID, host); |
|
249 (*env)->SetObjectArrayElement(env, ret, inetIndex, iaObj); |
242 (*env)->SetObjectArrayElement(env, ret, inetIndex, iaObj); |
250 inetIndex ++; |
243 inetIndex ++; |
251 } else if (iterator->ai_family == AF_INET6) { |
244 } else if (iterator->ai_family == AF_INET6) { |
252 jint scope = 0; |
245 jint scope = 0; |
253 jbyteArray ipaddress; |
246 jbyteArray ipaddress; |
267 if (scope != 0) { /* zero is default value, no need to set */ |
260 if (scope != 0) { /* zero is default value, no need to set */ |
268 (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope); |
261 (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope); |
269 (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE); |
262 (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE); |
270 } |
263 } |
271 (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress); |
264 (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress); |
272 (*env)->SetObjectField(env, iaObj, ni_iahostID, host); |
265 setInetAddress_hostName(env, iaObj, host); |
273 (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj); |
266 (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj); |
274 inet6Index ++; |
267 inet6Index ++; |
275 } |
268 } |
276 iterator = iterator->ai_next; |
269 iterator = iterator->ai_next; |
277 } |
270 } |