Merge branch 'master' into config-checks-ipv6
authorJoshua Peterson <petersonjm1@gmail.com>
Tue, 25 Apr 2017 13:28:15 +0000 (09:28 -0400)
committerGitHub <noreply@github.com>
Tue, 25 Apr 2017 13:28:15 +0000 (09:28 -0400)
mono/metadata/w32socket.c

index a6ec8739afed677df655554f9063c689ca5538d9..4775c4dfe805c4d1eaf65a668f83a017e717579b 100644 (file)
@@ -210,7 +210,11 @@ convert_family (MonoAddressFamily mono_family)
                return -1;
 #endif
        case AddressFamily_InterNetworkV6:
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
                return AF_INET6;
+#else
+               return -1;
+#endif
        case AddressFamily_DecNet:
 #ifdef AF_DECnet
                return AF_DECnet;
@@ -267,8 +271,10 @@ convert_to_mono_family (guint16 af_family)
        case AF_APPLETALK:
                return AddressFamily_AppleTalk;
 #endif
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
        case AF_INET6:
                return AddressFamily_InterNetworkV6;
+#endif
 #ifdef AF_IRDA
        case AF_IRDA:
                return AddressFamily_Irda;
@@ -819,6 +825,7 @@ ves_icall_System_Net_Sockets_Socket_Listen_internal(gsize sock, guint32 backlog,
                *werror = mono_w32socket_get_last_error ();
 }
 
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
 // Check whether it's ::ffff::0:0.
 static gboolean
 is_ipv4_mapped_any (const struct in6_addr *addr)
@@ -837,6 +844,7 @@ is_ipv4_mapped_any (const struct in6_addr *addr)
        }
        return TRUE;
 }
+#endif
 
 static MonoObject*
 create_object_from_sockaddr (struct sockaddr *saddr, int sa_size, gint32 *werror, MonoError *error)
@@ -910,6 +918,7 @@ create_object_from_sockaddr (struct sockaddr *saddr, int sa_size, gint32 *werror
                mono_field_set_value (sockaddr_obj, domain->sockaddr_data_length_field, &buffer_size);
 
                return sockaddr_obj;
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
        } else if (saddr->sa_family == AF_INET6) {
                struct sockaddr_in6 *sa_in = (struct sockaddr_in6 *)saddr;
                int i;
@@ -949,6 +958,7 @@ create_object_from_sockaddr (struct sockaddr *saddr, int sa_size, gint32 *werror
 
                return sockaddr_obj;
        }
+#endif
 #ifdef HAVE_SYS_UN_H
        else if (saddr->sa_family == AF_UNIX) {
                int i;
@@ -977,9 +987,11 @@ get_sockaddr_size (int family)
        size = 0;
        if (family == AF_INET) {
                size = sizeof (struct sockaddr_in);
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
        } else if (family == AF_INET6) {
                size = sizeof (struct sockaddr_in6);
        }
+#endif
 #ifdef HAVE_SYS_UN_H
        else if (family == AF_UNIX) {
                size = sizeof (struct sockaddr_un);
@@ -1135,6 +1147,7 @@ create_sockaddr_from_object (MonoObject *saddr_obj, socklen_t *sa_size, gint32 *
 
                *sa_size = sizeof (struct sockaddr_in);
                return (struct sockaddr *)sa;
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
        } else if (family == AF_INET6) {
                struct sockaddr_in6 *sa;
                int i;
@@ -1164,6 +1177,7 @@ create_sockaddr_from_object (MonoObject *saddr_obj, socklen_t *sa_size, gint32 *
                *sa_size = sizeof (struct sockaddr_in6);
                return (struct sockaddr *)sa;
        }
+#endif
 #ifdef HAVE_SYS_UN_H
        else if (family == AF_UNIX) {
                struct sockaddr_un *sock_un;
@@ -2083,6 +2097,7 @@ ipaddress_to_struct_in_addr (MonoObject *ipaddr)
        return inaddr;
 }
 
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
 static struct in6_addr
 ipaddress_to_struct_in6_addr (MonoObject *ipaddr)
 {
@@ -2109,6 +2124,7 @@ ipaddress_to_struct_in6_addr (MonoObject *ipaddr)
        return in6addr;
 }
 #endif
+#endif
 
 #if defined(__APPLE__) || defined(__FreeBSD__)
 
@@ -2201,7 +2217,7 @@ ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal (gsize sock, gint32
 #if defined(HAVE_STRUCT_IP_MREQN) || defined(HAVE_STRUCT_IP_MREQ)
                {
                        MonoObject *address = NULL;
-
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
                        if (system_level == sol_ipv6) {
                                struct ipv6_mreq mreq6;
 
@@ -2234,7 +2250,10 @@ ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal (gsize sock, gint32
 #endif
                                        
                                ret = mono_w32socket_setsockopt (sock, system_level, system_name, &mreq6, sizeof (mreq6));
-                       } else if (system_level == sol_ip) {
+                       
+                       } else
+#endif
+                       if (system_level == sol_ip) {
 #ifdef HAVE_STRUCT_IP_MREQN
                                struct ip_mreqn mreq = {{0}};
 #else
@@ -2454,7 +2473,7 @@ addrinfo_to_IPHostEntry (MonoAddressInfo *info, MonoString **h_name, MonoArray *
                                        }
                                }
                        }
-
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
                        if (nlocal_in6) {
                                MonoString *addr_string;
                                int i;
@@ -2469,7 +2488,7 @@ addrinfo_to_IPHostEntry (MonoAddressInfo *info, MonoString **h_name, MonoArray *
                                        }
                                }
                        }
-
+#endif
                leave:
                        g_free (local_in);
                        g_free (local_in6);
@@ -2577,7 +2596,9 @@ ves_icall_System_Net_Dns_GetHostByAddr_internal (MonoString *addr, MonoString **
 {
        char *address;
        struct sockaddr_in saddr;
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
        struct sockaddr_in6 saddr6;
+#endif
        MonoAddressInfo *info = NULL;
        MonoError error;
        gint32 family;
@@ -2591,9 +2612,11 @@ ves_icall_System_Net_Dns_GetHostByAddr_internal (MonoString *addr, MonoString **
        if (inet_pton (AF_INET, address, &saddr.sin_addr ) == 1) {
                family = AF_INET;
                saddr.sin_family = AF_INET;
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
        } else if (inet_pton (AF_INET6, address, &saddr6.sin6_addr) == 1) {
                family = AF_INET6;
                saddr6.sin6_family = AF_INET6;
+#endif
        } else {
                g_free (address);
                return FALSE;
@@ -2611,6 +2634,7 @@ ves_icall_System_Net_Dns_GetHostByAddr_internal (MonoString *addr, MonoString **
                ret = getnameinfo ((struct sockaddr*)&saddr, sizeof (saddr), hostname, sizeof (hostname), NULL, 0, 0) == 0;
                break;
        }
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
        case AF_INET6: {
 #if HAVE_SOCKADDR_IN6_SIN_LEN
                saddr6.sin6_len = sizeof (saddr6);
@@ -2618,6 +2642,7 @@ ves_icall_System_Net_Dns_GetHostByAddr_internal (MonoString *addr, MonoString **
                ret = getnameinfo ((struct sockaddr*)&saddr6, sizeof (saddr6), hostname, sizeof (hostname), NULL, 0, 0) == 0;
                break;
        }
+#endif
        default:
                g_assert_not_reached ();
        }