jdk/src/share/native/java/net/net_util.c
changeset 19035 129954ce8d08
parent 16870 f35b2bd19761
child 20839 a3fd5c769680
equal deleted inserted replaced
19034:d068b8fff162 19035:129954ce8d08
    73     return JNI_VERSION_1_2;
    73     return JNI_VERSION_1_2;
    74 }
    74 }
    75 
    75 
    76 static int initialized = 0;
    76 static int initialized = 0;
    77 
    77 
    78 void init(JNIEnv *env) {
    78 static void initInetAddrs(JNIEnv *env) {
    79     if (!initialized) {
    79     if (!initialized) {
    80         Java_java_net_InetAddress_init(env, 0);
    80         Java_java_net_InetAddress_init(env, 0);
    81         Java_java_net_Inet4Address_init(env, 0);
    81         Java_java_net_Inet4Address_init(env, 0);
    82         Java_java_net_Inet6Address_init(env, 0);
    82         Java_java_net_Inet6Address_init(env, 0);
    83         initialized = 1;
    83         initialized = 1;
    94 extern jfieldID iac_addressID;
    94 extern jfieldID iac_addressID;
    95 extern jfieldID iac_familyID;
    95 extern jfieldID iac_familyID;
    96 
    96 
    97 void setInetAddress_addr(JNIEnv *env, jobject iaObj, int address) {
    97 void setInetAddress_addr(JNIEnv *env, jobject iaObj, int address) {
    98     jobject holder;
    98     jobject holder;
    99     init(env);
    99     initInetAddrs(env);
   100     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   100     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   101     (*env)->SetIntField(env, holder, iac_addressID, address);
   101     (*env)->SetIntField(env, holder, iac_addressID, address);
   102 }
   102 }
   103 
   103 
   104 void setInetAddress_family(JNIEnv *env, jobject iaObj, int family) {
   104 void setInetAddress_family(JNIEnv *env, jobject iaObj, int family) {
   105     jobject holder;
   105     jobject holder;
   106     init(env);
   106     initInetAddrs(env);
   107     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   107     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   108     (*env)->SetIntField(env, holder, iac_familyID, family);
   108     (*env)->SetIntField(env, holder, iac_familyID, family);
   109 }
   109 }
   110 
   110 
   111 void setInetAddress_hostName(JNIEnv *env, jobject iaObj, jobject host) {
   111 void setInetAddress_hostName(JNIEnv *env, jobject iaObj, jobject host) {
   112     jobject holder;
   112     jobject holder;
   113     init(env);
   113     initInetAddrs(env);
   114     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   114     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   115     (*env)->SetObjectField(env, holder, iac_hostNameID, host);
   115     (*env)->SetObjectField(env, holder, iac_hostNameID, host);
   116 }
   116 }
   117 
   117 
   118 int getInetAddress_addr(JNIEnv *env, jobject iaObj) {
   118 int getInetAddress_addr(JNIEnv *env, jobject iaObj) {
   119     jobject holder;
   119     jobject holder;
   120     init(env);
   120     initInetAddrs(env);
   121     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   121     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   122     return (*env)->GetIntField(env, holder, iac_addressID);
   122     return (*env)->GetIntField(env, holder, iac_addressID);
   123 }
   123 }
   124 
   124 
   125 int getInetAddress_family(JNIEnv *env, jobject iaObj) {
   125 int getInetAddress_family(JNIEnv *env, jobject iaObj) {
   126     jobject holder;
   126     jobject holder;
   127     init(env);
   127 
       
   128     initInetAddrs(env);
   128     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   129     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   129     return (*env)->GetIntField(env, holder, iac_familyID);
   130     return (*env)->GetIntField(env, holder, iac_familyID);
   130 }
   131 }
   131 
   132 
   132 jobject getInetAddress_hostName(JNIEnv *env, jobject iaObj) {
   133 jobject getInetAddress_hostName(JNIEnv *env, jobject iaObj) {
   133     jobject holder;
   134     jobject holder;
   134     init(env);
   135     initInetAddrs(env);
   135     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   136     holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
   136     return (*env)->GetObjectField(env, holder, iac_hostNameID);
   137     return (*env)->GetObjectField(env, holder, iac_hostNameID);
   137 }
   138 }
   138 
   139 
   139 JNIEXPORT jobject JNICALL
   140 JNIEXPORT jobject JNICALL
   140 NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) {
   141 NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) {
   141     jobject iaObj;
   142     jobject iaObj;
   142     init(env);
   143     initInetAddrs(env);
   143 #ifdef AF_INET6
   144 #ifdef AF_INET6
   144     if (him->sa_family == AF_INET6) {
   145     if (him->sa_family == AF_INET6) {
   145         jbyteArray ipaddress;
   146         jbyteArray ipaddress;
   146 #ifdef WIN32
   147 #ifdef WIN32
   147         struct SOCKADDR_IN6 *him6 = (struct SOCKADDR_IN6 *)him;
   148         struct SOCKADDR_IN6 *him6 = (struct SOCKADDR_IN6 *)him;