64 jfieldID ni_bindsID; /* NetworkInterface.bindings */ |
64 jfieldID ni_bindsID; /* NetworkInterface.bindings */ |
65 jfieldID ni_nameID; /* NetworkInterface.name */ |
65 jfieldID ni_nameID; /* NetworkInterface.name */ |
66 jfieldID ni_displayNameID; /* NetworkInterface.displayName */ |
66 jfieldID ni_displayNameID; /* NetworkInterface.displayName */ |
67 jfieldID ni_childsID; /* NetworkInterface.childs */ |
67 jfieldID ni_childsID; /* NetworkInterface.childs */ |
68 jclass ni_iacls; /* InetAddress */ |
68 jclass ni_iacls; /* InetAddress */ |
69 jfieldID ni_iaAddr; /* InetAddress.address */ |
|
70 |
69 |
71 jclass ni_ia4cls; /* Inet4Address */ |
70 jclass ni_ia4cls; /* Inet4Address */ |
72 jmethodID ni_ia4Ctor; /* Inet4Address() */ |
71 jmethodID ni_ia4Ctor; /* Inet4Address() */ |
73 |
72 |
74 jclass ni_ia6cls; /* Inet6Address */ |
73 jclass ni_ia6cls; /* Inet6Address */ |
478 ni_childsID = (*env)->GetFieldID(env, ni_class, "childs", "[Ljava/net/NetworkInterface;"); |
477 ni_childsID = (*env)->GetFieldID(env, ni_class, "childs", "[Ljava/net/NetworkInterface;"); |
479 ni_ctor = (*env)->GetMethodID(env, ni_class, "<init>", "()V"); |
478 ni_ctor = (*env)->GetMethodID(env, ni_class, "<init>", "()V"); |
480 |
479 |
481 ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); |
480 ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); |
482 ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); |
481 ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); |
483 ni_iaAddr = (*env)->GetFieldID(env, ni_iacls, "address", "I"); |
|
484 |
482 |
485 ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); |
483 ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); |
486 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); |
484 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); |
487 ni_ia4Ctor = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); |
485 ni_ia4Ctor = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); |
488 |
486 |
566 free_netaddr(netaddrP); |
564 free_netaddr(netaddrP); |
567 return NULL; |
565 return NULL; |
568 } |
566 } |
569 /* default ctor will set family to AF_INET */ |
567 /* default ctor will set family to AF_INET */ |
570 |
568 |
571 (*env)->SetIntField(env, iaObj, ni_iaAddr, ntohl(addrs->addr.him4.sin_addr.s_addr)); |
569 setInetAddress_addr(env, iaObj, ntohl(addrs->addr.him4.sin_addr.s_addr)); |
572 if (addrs->mask != -1) { |
570 if (addrs->mask != -1) { |
573 ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); |
571 ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); |
574 if (ibObj == NULL) { |
572 if (ibObj == NULL) { |
575 free_netaddr(netaddrP); |
573 free_netaddr(netaddrP); |
576 return NULL; |
574 return NULL; |
579 ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); |
577 ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); |
580 if (ia2Obj == NULL) { |
578 if (ia2Obj == NULL) { |
581 free_netaddr(netaddrP); |
579 free_netaddr(netaddrP); |
582 return NULL; |
580 return NULL; |
583 } |
581 } |
584 (*env)->SetIntField(env, ia2Obj, ni_iaAddr, |
582 setInetAddress_addr(env, ia2Obj, ntohl(addrs->brdcast.him4.sin_addr.s_addr)); |
585 ntohl(addrs->brdcast.him4.sin_addr.s_addr)); |
|
586 (*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj); |
583 (*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj); |
587 (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask); |
584 (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask); |
588 (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); |
585 (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); |
589 } |
586 } |
590 } else /* AF_INET6 */ { |
587 } else /* AF_INET6 */ { |
734 */ |
731 */ |
735 JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0 |
732 JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0 |
736 (JNIEnv *env, jclass cls, jobject iaObj) |
733 (JNIEnv *env, jclass cls, jobject iaObj) |
737 { |
734 { |
738 netif *ifList, *curr; |
735 netif *ifList, *curr; |
739 jint addr = (*env)->GetIntField(env, iaObj, ni_iaAddr); |
736 jint addr = getInetAddress_addr(env, iaObj); |
740 jobject netifObj = NULL; |
737 jobject netifObj = NULL; |
741 |
738 |
742 // Retained for now to support IPv4 only stack, java.net.preferIPv4Stack |
739 // Retained for now to support IPv4 only stack, java.net.preferIPv4Stack |
743 if (ipv6_available()) { |
740 if (ipv6_available()) { |
744 return Java_java_net_NetworkInterface_getByInetAddress0_XP (env, cls, iaObj); |
741 return Java_java_net_NetworkInterface_getByInetAddress0_XP (env, cls, iaObj); |