src/java.base/windows/native/libnio/ch/Net.c
branchunixdomainchannels
changeset 58847 692de65ab293
parent 58801 119ac9128c1b
child 58939 aca099f4b3ec
equal deleted inserted replaced
58832:203fceb089fc 58847:692de65ab293
    75     DWORD bytesReturned = 0;
    75     DWORD bytesReturned = 0;
    76     WSAIoctl(s, SIO_UDP_CONNRESET, &enable, sizeof(enable),
    76     WSAIoctl(s, SIO_UDP_CONNRESET, &enable, sizeof(enable),
    77              NULL, 0, &bytesReturned, NULL, NULL);
    77              NULL, 0, &bytesReturned, NULL, NULL);
    78 }
    78 }
    79 
    79 
    80 JNIEXPORT jint JNICALL
    80 jint handleSocketError(JNIEnv *env, int errorValue)
    81 handleSocketError(JNIEnv *env, int errorValue)
       
    82 {
    81 {
    83     NET_ThrowNew(env, errorValue, NULL);
    82     NET_ThrowNew(env, errorValue, NULL);
    84     return IOS_THROWN;
    83     return IOS_THROWN;
    85 }
    84 }
    86 
    85 
    88 static jmethodID isa_ctorID;    /* InetSocketAddress(InetAddress, int) */
    87 static jmethodID isa_ctorID;    /* InetSocketAddress(InetAddress, int) */
    89 
    88 
    90 extern jclass udsa_class;
    89 extern jclass udsa_class;
    91 extern jmethodID udsa_ctorID;
    90 extern jmethodID udsa_ctorID;
    92 extern jfieldID udsa_pathID;
    91 extern jfieldID udsa_pathID;
    93 extern jfieldID udsa_isAbstractID;
       
    94 
    92 
    95 JNIEXPORT jobject JNICALL
    93 JNIEXPORT jobject JNICALL
    96 NET_SockaddrToUnixAddress(JNIEnv *env, SOCKETADDRESS *sa) {
    94 NET_SockaddrToUnixAddress(JNIEnv *env, SOCKETADDRESS *sa) {
    97     jboolean isAbstract;
       
    98 
    95 
    99     if (sa->sa.sa_family == AF_UNIX) {
    96     if (sa->sa.sa_family == AF_UNIX) {
   100         char *name = sa->saun.sun_path;
    97         char *name = sa->saun.sun_path;
   101 
    98 
   102 #ifdef NOTDEF
       
   103         /* check for abstract name */
       
   104         if (name[0] == 0) {
       
   105             isAbstract = 1;
       
   106             name++; // skip the zero byte
       
   107         } else
       
   108 #endif
       
   109             isAbstract = 0;
       
   110         jstring nstr = JNU_NewStringPlatform(env, name);
    99         jstring nstr = JNU_NewStringPlatform(env, name);
   111         return (*env)->NewObject(env, udsa_class, udsa_ctorID, nstr);
   100         return (*env)->NewObject(env, udsa_class, udsa_ctorID, nstr);
   112     }
   101     }
   113     return NULL;
   102     return NULL;
   114 }
   103 }
   116 JNIEXPORT jint JNICALL
   105 JNIEXPORT jint JNICALL
   117 NET_UnixSocketAddressToSockaddr(JNIEnv *env, jobject uaddr, SOCKETADDRESS *sa, int *len)
   106 NET_UnixSocketAddressToSockaddr(JNIEnv *env, jobject uaddr, SOCKETADDRESS *sa, int *len)
   118 {
   107 {
   119     jstring path = (*env)->GetObjectField(env, uaddr, udsa_pathID);
   108     jstring path = (*env)->GetObjectField(env, uaddr, udsa_pathID);
   120     jboolean isCopy;
   109     jboolean isCopy;
   121     //jboolean isAbstract = (*env)->GetBooleanField(env, uaddr, udsa_isAbstractID);
       
   122     int ret;
   110     int ret;
   123     const char* pname = JNU_GetStringPlatformChars(env, path, &isCopy);
   111     const char* pname = JNU_GetStringPlatformChars(env, path, &isCopy);
   124     memset(sa, 0, sizeof(SOCKETADDRESS));
   112     memset(sa, 0, sizeof(SOCKETADDRESS));
   125     sa->saun.sun_family = AF_UNIX;
   113     sa->saun.sun_family = AF_UNIX;
   126     size_t name_len = strlen(pname)+1;
   114     size_t name_len = strlen(pname)+1;
   127     if (name_len > MAX_UNIX_DOMAIN_PATH_LEN) {
   115     if (name_len > MAX_UNIX_DOMAIN_PATH_LEN) {
   128         JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "unix domain path too long");
   116         JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "unix domain path too long");
   129         ret = 1;
   117         ret = 1;
   130         goto finish;
   118         goto finish;
   131     }
   119     }
   132 #ifdef NOTDEF
   120     strncpy(sa->saun.sun_path, pname, name_len);
   133     if (isAbstract) {
       
   134         strncpy(&sa->saun.sun_path[1], pname, name_len);
       
   135         sa->saun.sun_path[0] = 0;
       
   136         name_len++;
       
   137     } else
       
   138 #endif
       
   139     {
       
   140         strncpy(sa->saun.sun_path, pname, name_len);
       
   141     }
       
   142     *len = (int)(offsetof(struct sockaddr_un, sun_path) + name_len);
   121     *len = (int)(offsetof(struct sockaddr_un, sun_path) + name_len);
   143     ret = 0;
   122     ret = 0;
   144   finish:
   123   finish:
   145     if (isCopy)
   124     if (isCopy)
   146         JNU_ReleaseStringPlatformChars(env, path, pname);
   125         JNU_ReleaseStringPlatformChars(env, path, pname);