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);