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

Print this page

        

*** 92,111 **** jfieldID ni_virutalID; jfieldID ni_childsID; jfieldID ni_parentID; jmethodID ni_ctrID; - static jclass ni_iacls; - static jclass ni_ia4cls; - static jclass ni_ia6cls; static jclass ni_ibcls; - static jmethodID ni_ia4ctrID; - static jmethodID ni_ia6ctrID; static jmethodID ni_ibctrID; - static jfieldID ni_iaaddressID; - static jfieldID ni_iafamilyID; - static jfieldID ni_ia6ipaddressID; static jfieldID ni_ibaddressID; static jfieldID ni_ib4broadcastID; static jfieldID ni_ib4maskID; static jobject createNetworkInterface(JNIEnv *env, netif *ifs); --- 92,103 ----
*** 128,137 **** --- 120,130 ---- * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) { + if (ni_ib4maskID == NULL) { ni_class = (*env)->FindClass(env,"java/net/NetworkInterface"); ni_class = (*env)->NewGlobalRef(env, ni_class); ni_nameID = (*env)->GetFieldID(env, ni_class,"name", "Ljava/lang/String;"); ni_indexID = (*env)->GetFieldID(env, ni_class, "index", "I"); ni_addrsID = (*env)->GetFieldID(env, ni_class, "addrs", "[Ljava/net/InetAddress;");
*** 140,166 **** ni_virutalID = (*env)->GetFieldID(env, ni_class, "virtual", "Z"); ni_childsID = (*env)->GetFieldID(env, ni_class, "childs", "[Ljava/net/NetworkInterface;"); ni_parentID = (*env)->GetFieldID(env, ni_class, "parent", "Ljava/net/NetworkInterface;"); ni_ctrID = (*env)->GetMethodID(env, ni_class, "<init>", "()V"); - ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); - ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); - ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); - ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); - ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); - ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); ni_ibcls = (*env)->FindClass(env, "java/net/InterfaceAddress"); ni_ibcls = (*env)->NewGlobalRef(env, ni_ibcls); - ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); - ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); ni_ibctrID = (*env)->GetMethodID(env, ni_ibcls, "<init>", "()V"); - ni_iaaddressID = (*env)->GetFieldID(env, ni_iacls, "address", "I"); - ni_iafamilyID = (*env)->GetFieldID(env, ni_iacls, "family", "I"); - ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B"); ni_ibaddressID = (*env)->GetFieldID(env, ni_ibcls, "address", "Ljava/net/InetAddress;"); ni_ib4broadcastID = (*env)->GetFieldID(env, ni_ibcls, "broadcast", "Ljava/net/Inet4Address;"); ni_ib4maskID = (*env)->GetFieldID(env, ni_ibcls, "maskLength", "S"); } /* * Class: java_net_NetworkInterface --- 133,151 ---- ni_virutalID = (*env)->GetFieldID(env, ni_class, "virtual", "Z"); ni_childsID = (*env)->GetFieldID(env, ni_class, "childs", "[Ljava/net/NetworkInterface;"); ni_parentID = (*env)->GetFieldID(env, ni_class, "parent", "Ljava/net/NetworkInterface;"); ni_ctrID = (*env)->GetMethodID(env, ni_class, "<init>", "()V"); 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_ib4broadcastID = (*env)->GetFieldID(env, ni_ibcls, "broadcast", "Ljava/net/Inet4Address;"); ni_ib4maskID = (*env)->GetFieldID(env, ni_ibcls, "maskLength", "S"); + } + + init(env); } /* * Class: java_net_NetworkInterface
*** 252,262 **** JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0 (JNIEnv *env, jclass cls, jobject iaObj) { netif *ifs, *curr; #ifdef AF_INET6 ! int family = (*env)->GetIntField(env, iaObj, ni_iafamilyID) == IPv4? AF_INET : AF_INET6; #else int family = AF_INET; #endif jobject obj = NULL; --- 237,247 ---- JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0 (JNIEnv *env, jclass cls, jobject iaObj) { netif *ifs, *curr; #ifdef AF_INET6 ! int family = (*env)->GetIntField(env, iaObj, ia_familyID) == IPv4? AF_INET : AF_INET6; #else int family = AF_INET; #endif jobject obj = NULL;
*** 277,287 **** while (addrP != NULL) { if (family == addrP->family) { if (family == AF_INET) { int address1 = htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr); ! int address2 = (*env)->GetIntField(env, iaObj, ni_iaaddressID); if (address1 == address2) { match = JNI_TRUE; break; } --- 262,272 ---- while (addrP != NULL) { if (family == addrP->family) { if (family == AF_INET) { int address1 = htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr); ! int address2 = (*env)->GetIntField(env, iaObj, ia_addressID); if (address1 == address2) { match = JNI_TRUE; break; }
*** 288,298 **** } #ifdef AF_INET6 if (family == AF_INET6) { jbyte *bytes = (jbyte *)&(((struct sockaddr_in6*)addrP->addr)->sin6_addr); ! jbyteArray ipaddress = (*env)->GetObjectField(env, iaObj, ni_ia6ipaddressID); jbyte caddr[16]; int i; (*env)->GetByteArrayRegion(env, ipaddress, 0, 16, caddr); i = 0; --- 273,283 ---- } #ifdef AF_INET6 if (family == AF_INET6) { jbyte *bytes = (jbyte *)&(((struct sockaddr_in6*)addrP->addr)->sin6_addr); ! jbyteArray ipaddress = (*env)->GetObjectField(env, iaObj, ia6_ipaddressID); jbyte caddr[16]; int i; (*env)->GetByteArrayRegion(env, ipaddress, 0, 16, caddr); i = 0;
*** 432,442 **** } /* * Create the array of InetAddresses */ ! addrArr = (*env)->NewObjectArray(env, addr_count, ni_iacls, NULL); if (addrArr == NULL) { return NULL; } bindArr = (*env)->NewObjectArray(env, addr_count, ni_ibcls, NULL); --- 417,427 ---- } /* * Create the array of InetAddresses */ ! addrArr = (*env)->NewObjectArray(env, addr_count, ia_class, NULL); if (addrArr == NULL) { return NULL; } bindArr = (*env)->NewObjectArray(env, addr_count, ni_ibcls, NULL);
*** 449,471 **** while (addrP != NULL) { jobject iaObj = NULL; jobject ibObj = NULL; if (addrP->family == AF_INET) { ! iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); if (iaObj) { ! (*env)->SetIntField(env, iaObj, ni_iaaddressID, htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr)); } ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj) { (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); if (addrP->brdcast) { jobject ia2Obj = NULL; ! ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); if (ia2Obj) { ! (*env)->SetIntField(env, ia2Obj, ni_iaaddressID, htonl(((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr)); (*env)->SetObjectField(env, ibObj, ni_ib4broadcastID, ia2Obj); (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask); } } --- 434,456 ---- while (addrP != NULL) { jobject iaObj = NULL; jobject ibObj = NULL; if (addrP->family == AF_INET) { ! iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (iaObj) { ! (*env)->SetIntField(env, iaObj, ia_addressID, htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr)); } ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj) { (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); if (addrP->brdcast) { jobject ia2Obj = NULL; ! ia2Obj = (*env)->NewObject(env, ia4_class, ia4_ctrID); if (ia2Obj) { ! (*env)->SetIntField(env, ia2Obj, ia_addressID, htonl(((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr)); (*env)->SetObjectField(env, ibObj, ni_ib4broadcastID, ia2Obj); (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask); } }
*** 474,484 **** } #ifdef AF_INET6 if (addrP->family == AF_INET6) { int scope=0; ! iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); if (iaObj) { jbyteArray ipaddress = (*env)->NewByteArray(env, 16); if (ipaddress == NULL) { return NULL; } --- 459,469 ---- } #ifdef AF_INET6 if (addrP->family == AF_INET6) { int scope=0; ! iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (iaObj) { jbyteArray ipaddress = (*env)->NewByteArray(env, 16); if (ipaddress == NULL) { return NULL; }
*** 494,504 **** 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) { (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask); --- 479,489 ---- 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) { (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask);