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)
1  2 
mono/metadata/w32socket.c

index 3f47bdf7c6a520040ee929c0821451138ce368e6,a6ec8739afed677df655554f9063c689ca5538d9..4775c4dfe805c4d1eaf65a668f83a017e717579b
@@@ -204,13 -204,13 +204,17 @@@ convert_family (MonoAddressFamily mono_
        case AddressFamily_InterNetwork:
                return AF_INET;
        case AddressFamily_AppleTalk:
+ #ifdef AF_APPLETALK
                return AF_APPLETALK;
+ #else
+               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;
@@@ -263,12 -263,12 +267,14 @@@ convert_to_mono_family (guint16 af_fami
        case AF_DECnet:
                return AddressFamily_DecNet;
  #endif
+ #ifdef AF_APPLETALK
        case AF_APPLETALK:
                return AddressFamily_AppleTalk;
+ #endif
 +#ifdef HAVE_STRUCT_SOCKADDR_IN6
        case AF_INET6:
- #endif
                return AddressFamily_InterNetworkV6;
++#endif
  #ifdef AF_IRDA
        case AF_IRDA:
                return AddressFamily_Irda;
@@@ -296,7 -296,11 +302,11 @@@ convert_type (MonoSocketType mono_type
                return -1;
  #endif
        case SocketType_Seqpacket:
+ #ifdef SOCK_SEQPACKET
                return SOCK_SEQPACKET;
+ #else
+               return -1;
+ #endif
        case SocketType_Unknown:
                g_warning ("System.Net.Sockets.SocketType has unsupported value 0x%x", mono_type);
                return -1;
@@@ -350,8 -354,10 +360,10 @@@ convert_socketflags (gint32 sflags
                /* Contains invalid flag values */
                return -1;
  
+ #ifdef MSG_OOB
        if (sflags & SocketFlags_OutOfBand)
                flags |= MSG_OOB;
+ #endif
        if (sflags & SocketFlags_Peek)
                flags |= MSG_PEEK;
        if (sflags & SocketFlags_DontRoute)
@@@ -395,9 -401,11 +407,11 @@@ convert_sockopt_level_and_name (MonoSoc
                         */
                        *system_name = SO_LINGER;
                        break;
+ #ifdef SO_DEBUG
                case SocketOptionName_Debug:
                        *system_name = SO_DEBUG;
                        break;
+ #endif
  #ifdef SO_ACCEPTCONN
                case SocketOptionName_AcceptConnection:
                        *system_name = SO_ACCEPTCONN;
                case SocketOptionName_KeepAlive:
                        *system_name = SO_KEEPALIVE;
                        break;
+ #ifdef SO_DONTROUTE
                case SocketOptionName_DontRoute:
                        *system_name = SO_DONTROUTE;
                        break;
+ #endif
                case SocketOptionName_Broadcast:
                        *system_name = SO_BROADCAST;
                        break;
                case SocketOptionName_Linger:
                        *system_name = SO_LINGER;
                        break;
+ #ifdef SO_OOBINLINE
                case SocketOptionName_OutOfBandInline:
                        *system_name = SO_OOBINLINE;
                        break;
+ #endif
                case SocketOptionName_SendBuffer:
                        *system_name = SO_SNDBUF;
                        break;
                *system_level = mono_networking_get_ip_protocol ();
                
                switch (mono_name) {
+ #ifdef IP_OPTIONS
                case SocketOptionName_IPOptions:
                        *system_name = IP_OPTIONS;
                        break;
+ #endif
  #ifdef IP_HDRINCL
                case SocketOptionName_HeaderIncluded:
                        *system_name = IP_HDRINCL;
@@@ -805,7 -819,6 +825,7 @@@ ves_icall_System_Net_Sockets_Socket_Lis
                *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)
        }
        return TRUE;
  }
 +#endif
  
  static MonoObject*
  create_object_from_sockaddr (struct sockaddr *saddr, int sa_size, gint32 *werror, MonoError *error)
                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;
  
                return sockaddr_obj;
        }
 +#endif
  #ifdef HAVE_SYS_UN_H
        else if (saddr->sa_family == AF_UNIX) {
                int i;
@@@ -967,11 -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);
@@@ -1127,7 -1135,6 +1147,7 @@@ create_sockaddr_from_object (MonoObjec
  
                *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;
                *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;
@@@ -2077,7 -2083,6 +2097,7 @@@ ipaddress_to_struct_in_addr (MonoObjec
        return inaddr;
  }
  
 +#ifdef HAVE_STRUCT_SOCKADDR_IN6
  static struct in6_addr
  ipaddress_to_struct_in6_addr (MonoObject *ipaddr)
  {
        return in6addr;
  }
  #endif
 +#endif
  
  #if defined(__APPLE__) || defined(__FreeBSD__)
  
@@@ -2197,7 -2201,7 +2217,7 @@@ ves_icall_System_Net_Sockets_Socket_Set
  #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;
  
  #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
@@@ -2453,7 -2454,7 +2473,7 @@@ addrinfo_to_IPHostEntry (MonoAddressInf
                                        }
                                }
                        }
 -
 +#ifdef HAVE_STRUCT_SOCKADDR_IN6
                        if (nlocal_in6) {
                                MonoString *addr_string;
                                int i;
                                        }
                                }
                        }
 -
 +#endif
                leave:
                        g_free (local_in);
                        g_free (local_in6);
@@@ -2576,9 -2577,7 +2596,9 @@@ ves_icall_System_Net_Dns_GetHostByAddr_
  {
        char *address;
        struct sockaddr_in saddr;
 +#ifdef HAVE_STRUCT_SOCKADDR_IN6
        struct sockaddr_in6 saddr6;
 +#endif
        MonoAddressInfo *info = NULL;
        MonoError error;
        gint32 family;
        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;
                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);
                ret = getnameinfo ((struct sockaddr*)&saddr6, sizeof (saddr6), hostname, sizeof (hostname), NULL, 0, 0) == 0;
                break;
        }
 +#endif
        default:
                g_assert_not_reached ();
        }