133 ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); |
133 ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); |
134 ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); |
134 ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); |
135 ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); |
135 ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); |
136 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); |
136 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); |
137 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); |
137 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); |
138 ni_iaaddressID = (*env)->GetFieldID(env, ni_iacls, "address", "I"); |
|
139 ni_iafamilyID = (*env)->GetFieldID(env, ni_iacls, "family", "I"); |
|
140 ni_iahostID = (*env)->GetFieldID(env, ni_iacls, "hostName", "Ljava/lang/String;"); |
|
141 initialized = 1; |
138 initialized = 1; |
142 } |
139 } |
143 |
140 |
144 if (IS_NULL(host)) { |
141 if (IS_NULL(host)) { |
145 JNU_ThrowNullPointerException(env, "host is null"); |
142 JNU_ThrowNullPointerException(env, "host is null"); |
236 if (IS_NULL(iaObj)) { |
233 if (IS_NULL(iaObj)) { |
237 /* we may have memory to free at the end of this */ |
234 /* we may have memory to free at the end of this */ |
238 ret = NULL; |
235 ret = NULL; |
239 goto cleanupAndReturn; |
236 goto cleanupAndReturn; |
240 } |
237 } |
241 (*env)->SetIntField(env, iaObj, ni_iaaddressID, |
238 setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)(iterator->ai_addr))->sin_addr.s_addr)); |
242 ntohl(((struct sockaddr_in*)(iterator->ai_addr))->sin_addr.s_addr)); |
239 setInetAddress_hostName(env, iaObj, name); |
243 (*env)->SetObjectField(env, iaObj, ni_iahostID, name); |
|
244 (*env)->SetObjectArrayElement(env, ret, retLen - i -1, iaObj); |
240 (*env)->SetObjectArrayElement(env, ret, retLen - i -1, iaObj); |
245 i++; |
241 i++; |
246 iterator = iterator->ai_next; |
242 iterator = iterator->ai_next; |
247 } |
243 } |
248 } |
244 } |
370 } |
366 } |
371 |
367 |
372 static jclass ni_iacls; |
368 static jclass ni_iacls; |
373 static jclass ni_ia4cls; |
369 static jclass ni_ia4cls; |
374 static jmethodID ni_ia4ctrID; |
370 static jmethodID ni_ia4ctrID; |
375 static jfieldID ni_iaaddressID; |
|
376 static jfieldID ni_iahostID; |
|
377 static jfieldID ni_iafamilyID; |
|
378 static int initialized = 0; |
371 static int initialized = 0; |
379 |
372 |
380 /* |
373 /* |
381 * Find an internet address for a given hostname. Note that this |
374 * Find an internet address for a given hostname. Note that this |
382 * code only works for addresses of type INET. The translation |
375 * code only works for addresses of type INET. The translation |
401 ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); |
394 ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); |
402 ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); |
395 ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); |
403 ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); |
396 ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); |
404 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); |
397 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); |
405 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); |
398 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); |
406 ni_iaaddressID = (*env)->GetFieldID(env, ni_iacls, "address", "I"); |
|
407 ni_iafamilyID = (*env)->GetFieldID(env, ni_iacls, "family", "I"); |
|
408 ni_iahostID = (*env)->GetFieldID(env, ni_iacls, "hostName", "Ljava/lang/String;"); |
|
409 initialized = 1; |
399 initialized = 1; |
410 } |
400 } |
411 |
401 |
412 if (IS_NULL(host)) { |
402 if (IS_NULL(host)) { |
413 JNU_ThrowNullPointerException(env, "host is null"); |
403 JNU_ThrowNullPointerException(env, "host is null"); |
497 jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); |
487 jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); |
498 if (IS_NULL(iaObj)) { |
488 if (IS_NULL(iaObj)) { |
499 ret = NULL; |
489 ret = NULL; |
500 goto cleanupAndReturn; |
490 goto cleanupAndReturn; |
501 } |
491 } |
502 (*env)->SetIntField(env, iaObj, ni_iaaddressID, |
492 setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); |
503 ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); |
493 setInetAddress_hostName(env, iaObj, host); |
504 (*env)->SetObjectField(env, iaObj, ni_iahostID, host); |
|
505 (*env)->SetObjectArrayElement(env, ret, i++, iaObj); |
494 (*env)->SetObjectArrayElement(env, ret, i++, iaObj); |
506 iterator = iterator->ai_next; |
495 iterator = iterator->ai_next; |
507 } |
496 } |
508 } |
497 } |
509 |
498 |