jdk/src/share/native/java/net/net_util.c
changeset 22956 322ce28a7e20
parent 22646 5fa3669fd35d
child 23015 73b21ab36615
equal deleted inserted replaced
22955:3a17c4db457b 22956:322ce28a7e20
   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);
   199 JNIEXPORT jobject JNICALL
   197 JNIEXPORT jobject JNICALL
   200 NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) {
   198 NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) {
   201     jobject iaObj;
   199     jobject iaObj;
   202 #ifdef AF_INET6
   200 #ifdef AF_INET6
   203     if (him->sa_family == AF_INET6) {
   201     if (him->sa_family == AF_INET6) {
   204         jbyteArray ipaddress;
       
   205 #ifdef WIN32
   202 #ifdef WIN32
   206         struct SOCKADDR_IN6 *him6 = (struct SOCKADDR_IN6 *)him;
   203         struct SOCKADDR_IN6 *him6 = (struct SOCKADDR_IN6 *)him;
   207 #else
   204 #else
   208         struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)him;
   205         struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)him;
   209 #endif
   206 #endif
   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);
   266                 return JNI_TRUE;
   264                 return JNI_TRUE;
   267             } else {
   265             } else {
   268                 return JNI_FALSE;
   266                 return JNI_FALSE;
   269             }
   267             }
   270         } else {
   268         } else {
   271             jbyteArray ipaddress;
       
   272             jbyte caddrCur[16];
   269             jbyte caddrCur[16];
   273             int scope;
   270             int scope;
   274 
   271 
   275             if (family == AF_INET) {
   272             if (family == AF_INET) {
   276                 return JNI_FALSE;
   273                 return JNI_FALSE;