106 jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
106 jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
107 CHECK_NULL_RETURN(holder, NULL); |
107 CHECK_NULL_RETURN(holder, NULL); |
108 return (*env)->GetObjectField(env, holder, ia6_scopeifnameID); |
108 return (*env)->GetObjectField(env, holder, ia6_scopeifnameID); |
109 } |
109 } |
110 |
110 |
111 int setInet6Address_scopeifname(JNIEnv *env, jobject iaObj, jobject scopeifname) { |
111 jboolean setInet6Address_scopeifname(JNIEnv *env, jobject iaObj, jobject scopeifname) { |
112 jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
112 jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
113 CHECK_NULL_RETURN(holder, JNI_FALSE); |
113 CHECK_NULL_RETURN(holder, JNI_FALSE); |
114 (*env)->SetObjectField(env, holder, ia6_scopeifnameID, scopeifname); |
114 (*env)->SetObjectField(env, holder, ia6_scopeifnameID, scopeifname); |
115 return JNI_TRUE; |
115 return JNI_TRUE; |
116 } |
116 } |
125 jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
125 jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
126 CHECK_NULL_RETURN(holder, -1); |
126 CHECK_NULL_RETURN(holder, -1); |
127 return (*env)->GetIntField(env, holder, ia6_scopeidID); |
127 return (*env)->GetIntField(env, holder, ia6_scopeidID); |
128 } |
128 } |
129 |
129 |
130 int setInet6Address_scopeid(JNIEnv *env, jobject iaObj, int scopeid) { |
130 jboolean setInet6Address_scopeid(JNIEnv *env, jobject iaObj, int scopeid) { |
131 jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
131 jobject holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
132 CHECK_NULL_RETURN(holder, JNI_FALSE); |
132 CHECK_NULL_RETURN(holder, JNI_FALSE); |
133 (*env)->SetIntField(env, holder, ia6_scopeidID, scopeid); |
133 (*env)->SetIntField(env, holder, ia6_scopeidID, scopeid); |
134 if (scopeid > 0) { |
134 if (scopeid > 0) { |
135 (*env)->SetBooleanField(env, holder, ia6_scopeidsetID, JNI_TRUE); |
135 (*env)->SetBooleanField(env, holder, ia6_scopeidsetID, JNI_TRUE); |
136 } |
136 } |
137 return JNI_TRUE; |
137 return JNI_TRUE; |
138 } |
138 } |
139 |
139 |
140 |
140 jboolean getInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *dest) { |
141 int getInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *dest) { |
|
142 jobject holder, addr; |
141 jobject holder, addr; |
143 jbyteArray barr; |
|
144 |
142 |
145 holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
143 holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
146 CHECK_NULL_RETURN(holder, JNI_FALSE); |
144 CHECK_NULL_RETURN(holder, JNI_FALSE); |
147 addr = (*env)->GetObjectField(env, holder, ia6_ipaddressID); |
145 addr = (*env)->GetObjectField(env, holder, ia6_ipaddressID); |
148 CHECK_NULL_RETURN(addr, JNI_FALSE); |
146 CHECK_NULL_RETURN(addr, JNI_FALSE); |
149 (*env)->GetByteArrayRegion(env, addr, 0, 16, (jbyte *)dest); |
147 (*env)->GetByteArrayRegion(env, addr, 0, 16, (jbyte *)dest); |
150 return JNI_TRUE; |
148 return JNI_TRUE; |
151 } |
149 } |
152 |
150 |
153 int setInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *address) { |
151 jboolean setInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *address) { |
154 jobject holder; |
152 jobject holder; |
155 jbyteArray addr; |
153 jbyteArray addr; |
156 |
154 |
157 holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
155 holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID); |
158 CHECK_NULL_RETURN(holder, JNI_FALSE); |
156 CHECK_NULL_RETURN(holder, JNI_FALSE); |
215 address = NET_IPv4MappedToIPv4(caddr); |
212 address = NET_IPv4MappedToIPv4(caddr); |
216 setInetAddress_addr(env, iaObj, address); |
213 setInetAddress_addr(env, iaObj, address); |
217 setInetAddress_family(env, iaObj, IPv4); |
214 setInetAddress_family(env, iaObj, IPv4); |
218 } else { |
215 } else { |
219 jint scope; |
216 jint scope; |
220 int ret; |
217 jboolean ret; |
221 iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); |
218 iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); |
222 CHECK_NULL_RETURN(iaObj, NULL); |
219 CHECK_NULL_RETURN(iaObj, NULL); |
223 ret = setInet6Address_ipaddress(env, iaObj, (char *)&(him6->sin6_addr)); |
220 ret = setInet6Address_ipaddress(env, iaObj, (char *)&(him6->sin6_addr)); |
224 CHECK_NULL_RETURN(ret, NULL); |
221 if (ret == JNI_FALSE) |
|
222 return NULL; |
225 setInetAddress_family(env, iaObj, IPv6); |
223 setInetAddress_family(env, iaObj, IPv6); |
226 scope = getScopeID(him); |
224 scope = getScopeID(him); |
227 setInet6Address_scopeid(env, iaObj, scope); |
225 setInet6Address_scopeid(env, iaObj, scope); |
228 } |
226 } |
229 *port = ntohs(him6->sin6_port); |
227 *port = ntohs(him6->sin6_port); |