src/windows/native/java/net/NetworkInterface.c

Print this page

        

*** 85,113 **** /* various JNI ids */ jclass ni_class; /* NetworkInterface */ ! jmethodID ni_ctor; /* NetworkInterface() */ jfieldID ni_indexID; /* NetworkInterface.index */ jfieldID ni_addrsID; /* NetworkInterface.addrs */ jfieldID ni_bindsID; /* NetworkInterface.bindings */ jfieldID ni_nameID; /* NetworkInterface.name */ jfieldID ni_displayNameID; /* NetworkInterface.displayName */ jfieldID ni_childsID; /* NetworkInterface.childs */ - jclass ni_iacls; /* InetAddress */ - jfieldID ni_iaAddr; /* InetAddress.address */ - jclass ni_ia4cls; /* Inet4Address */ - jmethodID ni_ia4Ctor; /* Inet4Address() */ - - jclass ni_ia6cls; /* Inet6Address */ - jmethodID ni_ia6ctrID; /* Inet6Address() */ - jfieldID ni_ia6ipaddressID; - jfieldID ni_ia6ipaddressID; - jclass ni_ibcls; /* InterfaceAddress */ jmethodID ni_ibctrID; /* InterfaceAddress() */ jfieldID ni_ibaddressID; /* InterfaceAddress.address */ jfieldID ni_ibbroadcastID; /* InterfaceAddress.broadcast */ jfieldID ni_ibmaskID; /* InterfaceAddress.maskLength */ --- 85,103 ---- /* various JNI ids */ jclass ni_class; /* NetworkInterface */ ! jmethodID ni_ctrID; /* NetworkInterface() */ jfieldID ni_indexID; /* NetworkInterface.index */ jfieldID ni_addrsID; /* NetworkInterface.addrs */ jfieldID ni_bindsID; /* NetworkInterface.bindings */ jfieldID ni_nameID; /* NetworkInterface.name */ jfieldID ni_displayNameID; /* NetworkInterface.displayName */ jfieldID ni_childsID; /* NetworkInterface.childs */ jclass ni_ibcls; /* InterfaceAddress */ jmethodID ni_ibctrID; /* InterfaceAddress() */ jfieldID ni_ibaddressID; /* InterfaceAddress.address */ jfieldID ni_ibbroadcastID; /* InterfaceAddress.broadcast */ jfieldID ni_ibmaskID; /* InterfaceAddress.maskLength */
*** 543,581 **** } /* * Get the various JNI ids that we require */ ni_class = (*env)->NewGlobalRef(env, cls); ni_nameID = (*env)->GetFieldID(env, ni_class, "name", "Ljava/lang/String;"); ni_displayNameID = (*env)->GetFieldID(env, ni_class, "displayName", "Ljava/lang/String;"); ni_indexID = (*env)->GetFieldID(env, ni_class, "index", "I"); ni_addrsID = (*env)->GetFieldID(env, ni_class, "addrs", "[Ljava/net/InetAddress;"); ni_bindsID = (*env)->GetFieldID(env, ni_class, "bindings", "[Ljava/net/InterfaceAddress;"); ni_childsID = (*env)->GetFieldID(env, ni_class, "childs", "[Ljava/net/NetworkInterface;"); ! ni_ctor = (*env)->GetMethodID(env, ni_class, "<init>", "()V"); ! ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); ! ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); ! ni_iaAddr = (*env)->GetFieldID(env, ni_iacls, "address", "I"); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - ni_ia4Ctor = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); - - ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); - ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); - ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); - ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B"); - ni_ibcls = (*env)->FindClass(env, "java/net/InterfaceAddress"); ni_ibcls = (*env)->NewGlobalRef(env, ni_ibcls); ni_ibctrID = (*env)->GetMethodID(env, ni_ibcls, "<init>", "()V"); ni_ibaddressID = (*env)->GetFieldID(env, ni_ibcls, "address", "Ljava/net/InetAddress;"); ni_ibbroadcastID = (*env)->GetFieldID(env, ni_ibcls, "broadcast", "Ljava/net/Inet4Address;"); ni_ibmaskID = (*env)->GetFieldID(env, ni_ibcls, "maskLength", "S"); ! } /* * Create a NetworkInterface object, populate the name and index, and * populate the InetAddress array based on the IP addresses for this --- 533,561 ---- } /* * Get the various JNI ids that we require */ + if (ni_ibmaskID == NULL) { ni_class = (*env)->NewGlobalRef(env, cls); ni_nameID = (*env)->GetFieldID(env, ni_class, "name", "Ljava/lang/String;"); ni_displayNameID = (*env)->GetFieldID(env, ni_class, "displayName", "Ljava/lang/String;"); ni_indexID = (*env)->GetFieldID(env, ni_class, "index", "I"); ni_addrsID = (*env)->GetFieldID(env, ni_class, "addrs", "[Ljava/net/InetAddress;"); ni_bindsID = (*env)->GetFieldID(env, ni_class, "bindings", "[Ljava/net/InterfaceAddress;"); ni_childsID = (*env)->GetFieldID(env, ni_class, "childs", "[Ljava/net/NetworkInterface;"); ! ni_ctrID = (*env)->GetMethodID(env, ni_class, "<init>", "()V"); ! init(env); ni_ibcls = (*env)->FindClass(env, "java/net/InterfaceAddress"); ni_ibcls = (*env)->NewGlobalRef(env, ni_ibcls); ni_ibctrID = (*env)->GetMethodID(env, ni_ibcls, "<init>", "()V"); ni_ibaddressID = (*env)->GetFieldID(env, ni_ibcls, "address", "Ljava/net/InetAddress;"); ni_ibbroadcastID = (*env)->GetFieldID(env, ni_ibcls, "broadcast", "Ljava/net/Inet4Address;"); ni_ibmaskID = (*env)->GetFieldID(env, ni_ibcls, "maskLength", "S"); ! } } /* * Create a NetworkInterface object, populate the name and index, and * populate the InetAddress array based on the IP addresses for this
*** 591,601 **** jint bind_index; /* * Create a NetworkInterface object and populate it */ ! netifObj = (*env)->NewObject(env, ni_class, ni_ctor); name = (*env)->NewStringUTF(env, ifs->name); if (ifs->dNameIsUnicode) { displayName = (*env)->NewString(env, (PWCHAR)ifs->displayName, wcslen ((PWCHAR)ifs->displayName)); } else { displayName = (*env)->NewStringUTF(env, ifs->displayName); --- 571,581 ---- jint bind_index; /* * Create a NetworkInterface object and populate it */ ! netifObj = (*env)->NewObject(env, ni_class, ni_ctrID); name = (*env)->NewStringUTF(env, ifs->name); if (ifs->dNameIsUnicode) { displayName = (*env)->NewString(env, (PWCHAR)ifs->displayName, wcslen ((PWCHAR)ifs->displayName)); } else { displayName = (*env)->NewStringUTF(env, ifs->displayName);
*** 616,626 **** if ((*env)->ExceptionOccurred(env)) { free_netaddr(netaddrP); return NULL; } } ! addrArr = (*env)->NewObjectArray(env, netaddrCount, ni_iacls, NULL); if (addrArr == NULL) { free_netaddr(netaddrP); return NULL; } --- 596,606 ---- if ((*env)->ExceptionOccurred(env)) { free_netaddr(netaddrP); return NULL; } } ! addrArr = (*env)->NewObjectArray(env, netaddrCount, ia_class, NULL); if (addrArr == NULL) { free_netaddr(netaddrP); return NULL; }
*** 634,672 **** bind_index = 0; while (addrs != NULL) { jobject iaObj, ia2Obj; jobject ibObj = NULL; if (addrs->addr.him.sa_family == AF_INET) { ! iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); if (iaObj == NULL) { free_netaddr(netaddrP); return NULL; } /* default ctor will set family to AF_INET */ ! (*env)->SetIntField(env, iaObj, ni_iaAddr, ntohl(addrs->addr.him4.sin_addr.s_addr)); if (addrs->mask != -1) { ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj == NULL) { free_netaddr(netaddrP); return NULL; } (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); ! ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4Ctor); if (ia2Obj == NULL) { free_netaddr(netaddrP); return NULL; } ! (*env)->SetIntField(env, ia2Obj, ni_iaAddr, ntohl(addrs->brdcast.him4.sin_addr.s_addr)); (*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj); (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask); (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); } } else /* AF_INET6 */ { int scope; ! iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); if (iaObj) { jbyteArray ipaddress = (*env)->NewByteArray(env, 16); if (ipaddress == NULL) { return NULL; } --- 614,652 ---- bind_index = 0; while (addrs != NULL) { jobject iaObj, ia2Obj; jobject ibObj = NULL; if (addrs->addr.him.sa_family == AF_INET) { ! iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (iaObj == NULL) { free_netaddr(netaddrP); return NULL; } /* default ctor will set family to AF_INET */ ! (*env)->SetIntField(env, iaObj, ia_addressID, ntohl(addrs->addr.him4.sin_addr.s_addr)); if (addrs->mask != -1) { ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj == NULL) { free_netaddr(netaddrP); return NULL; } (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); ! ia2Obj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (ia2Obj == NULL) { free_netaddr(netaddrP); return NULL; } ! (*env)->SetIntField(env, ia2Obj, ia_addressID, ntohl(addrs->brdcast.him4.sin_addr.s_addr)); (*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj); (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask); (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); } } else /* AF_INET6 */ { int scope; ! iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (iaObj) { jbyteArray ipaddress = (*env)->NewByteArray(env, 16); if (ipaddress == NULL) { return NULL; }
*** 676,686 **** if (scope != 0) { /* zero is default value, no need to set */ (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope); (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE); (*env)->SetObjectField(env, iaObj, ia6_scopeifnameID, netifObj); } ! (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress); ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj == NULL) { free_netaddr(netaddrP); return NULL; } --- 656,666 ---- if (scope != 0) { /* zero is default value, no need to set */ (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope); (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE); (*env)->SetObjectField(env, iaObj, ia6_scopeifnameID, netifObj); } ! (*env)->SetObjectField(env, iaObj, ia6_ipaddressID, ipaddress); ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj == NULL) { free_netaddr(netaddrP); return NULL; }
*** 807,817 **** */ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0 (JNIEnv *env, jclass cls, jobject iaObj) { netif *ifList, *curr; ! jint addr = (*env)->GetIntField(env, iaObj, ni_iaAddr); jobject netifObj = NULL; if (os_supports_ipv6 && ipv6_available()) { return Java_java_net_NetworkInterface_getByInetAddress0_XP (env, cls, iaObj); } --- 787,797 ---- */ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0 (JNIEnv *env, jclass cls, jobject iaObj) { netif *ifList, *curr; ! jint addr = (*env)->GetIntField(env, iaObj, ia_addressID); jobject netifObj = NULL; if (os_supports_ipv6 && ipv6_available()) { return Java_java_net_NetworkInterface_getByInetAddress0_XP (env, cls, iaObj); }