79 |
Java_java_net_InetAddress_lookupInaddrAny(JNIEnv *env, jclass class) |
Java_java_net_InetAddress_lookupInaddrAny(JNIEnv *env, jclass class) |
80 |
{ |
{ |
81 |
jarray arr; |
jarray arr; |
82 |
int *octets; |
jbyte *octets; |
83 |
|
|
84 |
/* Allocate an array for the IP address */ |
/* Allocate an array for the IP address */ |
85 |
arr = (*env)->NewIntArray(env, 4); |
arr = (*env)->NewByteArray(env, 4); |
86 |
if (!arr) |
if (!arr) |
87 |
{ |
{ |
88 |
JCL_ThrowException(env, UNKNOWN_HOST_EXCEPTION, "Internal Error"); |
JCL_ThrowException(env, UNKNOWN_HOST_EXCEPTION, "Internal Error"); |
90 |
} |
} |
91 |
|
|
92 |
/* Copy in the values */ |
/* Copy in the values */ |
93 |
octets = (*env)->GetIntArrayElements(env, arr, 0); |
octets = (*env)->GetByteArrayElements(env, arr, 0); |
94 |
|
|
95 |
octets[0] = (INADDR_ANY & 0xFF000000) >> 24; |
octets[0] = (INADDR_ANY & 0xFF000000) >> 24; |
96 |
octets[1] = (INADDR_ANY & 0x00FF0000) >> 16; |
octets[1] = (INADDR_ANY & 0x00FF0000) >> 16; |
97 |
octets[2] = (INADDR_ANY & 0x0000FF00) >> 8; |
octets[2] = (INADDR_ANY & 0x0000FF00) >> 8; |
98 |
octets[3] = (INADDR_ANY & 0x000000FF); |
octets[3] = (INADDR_ANY & 0x000000FF); |
99 |
|
|
100 |
(*env)->ReleaseIntArrayElements(env, arr, octets, 0); |
(*env)->ReleaseByteArrayElements(env, arr, octets, 0); |
101 |
|
|
102 |
return(arr); |
return(arr); |
103 |
} |
} |
111 |
JNIEXPORT jstring JNICALL |
JNIEXPORT jstring JNICALL |
112 |
Java_java_net_InetAddress_getHostByAddr(JNIEnv *env, jclass class, jarray arr) |
Java_java_net_InetAddress_getHostByAddr(JNIEnv *env, jclass class, jarray arr) |
113 |
{ |
{ |
114 |
jint *octets; |
jbyte *octets; |
115 |
jsize len; |
jsize len; |
116 |
int addr; |
int addr; |
117 |
struct hostent *hp; |
struct hostent *hp; |
125 |
return (jstring)NULL; |
return (jstring)NULL; |
126 |
} |
} |
127 |
|
|
128 |
octets = (*env)->GetIntArrayElements(env, arr, 0); |
octets = (*env)->GetByteArrayElements(env, arr, 0); |
129 |
if (!octets) |
if (!octets) |
130 |
{ |
{ |
131 |
JCL_ThrowException(env, UNKNOWN_HOST_EXCEPTION, "Bad IP Address"); |
JCL_ThrowException(env, UNKNOWN_HOST_EXCEPTION, "Bad IP Address"); |
137 |
addr = htonl(addr); |
addr = htonl(addr); |
138 |
|
|
139 |
/* Release some memory */ |
/* Release some memory */ |
140 |
(*env)->ReleaseIntArrayElements(env, arr, octets, 0); |
(*env)->ReleaseByteArrayElements(env, arr, octets, 0); |
141 |
|
|
142 |
/* Resolve the address and return the name */ |
/* Resolve the address and return the name */ |
143 |
hp = gethostbyaddr((char*)&addr, sizeof(addr), AF_INET); |
hp = gethostbyaddr((char*)&addr, sizeof(addr), AF_INET); |
159 |
{ |
{ |
160 |
const char *hostname; |
const char *hostname; |
161 |
struct hostent *hp; |
struct hostent *hp; |
162 |
int i, ip, *octets; |
int i, ip; |
163 |
|
jbyte *octets; |
164 |
jsize num_addrs; |
jsize num_addrs; |
165 |
jclass arr_class; |
jclass arr_class; |
166 |
jobjectArray addrs; |
jobjectArray addrs; |
178 |
hp = gethostbyname(hostname); |
hp = gethostbyname(hostname); |
179 |
if (!hp) |
if (!hp) |
180 |
{ |
{ |
181 |
JCL_ThrowException(env, UNKNOWN_HOST_EXCEPTION, hostname); |
JCL_ThrowException(env, UNKNOWN_HOST_EXCEPTION, host); |
182 |
return (jobjectArray)NULL; |
return (jobjectArray)NULL; |
183 |
} |
} |
184 |
(*env)->ReleaseStringUTFChars(env, host, hostname); |
(*env)->ReleaseStringUTFChars(env, host, hostname); |
204 |
/* Now loop and copy in each address */ |
/* Now loop and copy in each address */ |
205 |
for (i = 0; i < num_addrs; i++) |
for (i = 0; i < num_addrs; i++) |
206 |
{ |
{ |
207 |
ret_octets = (*env)->NewIntArray(env, 4); |
ret_octets = (*env)->NewByteArray(env, 4); |
208 |
if (!ret_octets) |
if (!ret_octets) |
209 |
{ |
{ |
210 |
JCL_ThrowException(env, UNKNOWN_HOST_EXCEPTION, "Internal Error"); |
JCL_ThrowException(env, UNKNOWN_HOST_EXCEPTION, "Internal Error"); |
211 |
return (jobjectArray)NULL; |
return (jobjectArray)NULL; |
212 |
} |
} |
213 |
|
|
214 |
octets = (*env)->GetIntArrayElements(env, ret_octets, 0); |
octets = (*env)->GetByteArrayElements(env, ret_octets, 0); |
215 |
|
|
216 |
ip = ntohl(*(int*)(hp->h_addr_list[i])); |
ip = ntohl(*(int*)(hp->h_addr_list[i])); |
217 |
octets[0] = (ip & 0xFF000000) >> 24; |
octets[0] = (ip & 0xFF000000) >> 24; |
219 |
octets[2] = (ip & 0x0000FF00) >> 8; |
octets[2] = (ip & 0x0000FF00) >> 8; |
220 |
octets[3] = (ip & 0x000000FF); |
octets[3] = (ip & 0x000000FF); |
221 |
|
|
222 |
(*env)->ReleaseIntArrayElements(env, ret_octets, octets, 0); |
(*env)->ReleaseByteArrayElements(env, ret_octets, octets, 0); |
223 |
(*env)->SetObjectArrayElement(env, addrs, i, ret_octets); |
(*env)->SetObjectArrayElement(env, addrs, i, ret_octets); |
224 |
} |
} |
225 |
|
|