118 static jclass ni_iacls; |
118 static jclass ni_iacls; |
119 static jclass ni_ia4cls; |
119 static jclass ni_ia4cls; |
120 static jclass ni_ia6cls; |
120 static jclass ni_ia6cls; |
121 static jmethodID ni_ia4ctrID; |
121 static jmethodID ni_ia4ctrID; |
122 static jmethodID ni_ia6ctrID; |
122 static jmethodID ni_ia6ctrID; |
123 static jfieldID ni_iaaddressID; |
|
124 static jfieldID ni_iahostID; |
|
125 static jfieldID ni_iafamilyID; |
|
126 static jfieldID ni_ia6ipaddressID; |
123 static jfieldID ni_ia6ipaddressID; |
127 static int initialized = 0; |
124 static int initialized = 0; |
128 |
125 |
129 /* |
126 /* |
130 * Find an internet address for a given hostname. Note that this |
127 * Find an internet address for a given hostname. Note that this |
157 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); |
154 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); |
158 ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); |
155 ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); |
159 ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); |
156 ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); |
160 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); |
157 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); |
161 ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); |
158 ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); |
162 ni_iaaddressID = (*env)->GetFieldID(env, ni_iacls, "address", "I"); |
|
163 ni_iafamilyID = (*env)->GetFieldID(env, ni_iacls, "family", "I"); |
|
164 ni_iahostID = (*env)->GetFieldID(env, ni_iacls, "hostName", "Ljava/lang/String;"); |
|
165 ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B"); |
159 ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B"); |
166 initialized = 1; |
160 initialized = 1; |
167 } |
161 } |
168 |
162 |
169 if (IS_NULL(host)) { |
163 if (IS_NULL(host)) { |
313 jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); |
307 jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); |
314 if (IS_NULL(iaObj)) { |
308 if (IS_NULL(iaObj)) { |
315 ret = NULL; |
309 ret = NULL; |
316 goto cleanupAndReturn; |
310 goto cleanupAndReturn; |
317 } |
311 } |
318 (*env)->SetIntField(env, iaObj, ni_iaaddressID, |
312 setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); |
319 ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); |
313 setInetAddress_hostName(env, iaObj, host); |
320 (*env)->SetObjectField(env, iaObj, ni_iahostID, host); |
|
321 (*env)->SetObjectArrayElement(env, ret, inetIndex, iaObj); |
314 (*env)->SetObjectArrayElement(env, ret, inetIndex, iaObj); |
322 inetIndex++; |
315 inetIndex++; |
323 } else if (iterator->ai_family == AF_INET6) { |
316 } else if (iterator->ai_family == AF_INET6) { |
324 jint scope = 0; |
317 jint scope = 0; |
325 jbyteArray ipaddress; |
318 jbyteArray ipaddress; |
340 if (scope != 0) { /* zero is default value, no need to set */ |
333 if (scope != 0) { /* zero is default value, no need to set */ |
341 (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope); |
334 (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope); |
342 (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE); |
335 (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE); |
343 } |
336 } |
344 (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress); |
337 (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress); |
345 (*env)->SetObjectField(env, iaObj, ni_iahostID, host); |
338 setInetAddress_hostName(env, iaObj, host); |
346 (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj); |
339 (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj); |
347 inet6Index++; |
340 inet6Index++; |
348 } |
341 } |
349 iterator = iterator->ai_next; |
342 iterator = iterator->ai_next; |
350 } |
343 } |