winsock: compilation fixes
authorYang Tse <yangsita@gmail.com>
Fri, 20 May 2011 14:43:25 +0000 (16:43 +0200)
committerYang Tse <yangsita@gmail.com>
Fri, 20 May 2011 14:43:25 +0000 (16:43 +0200)
Provide winsock iphlpapi alternative definitions to prevent compilation
failures when using a variety of winsock header implementations.

Makefile.inc
ares_init.c
ares_iphlpapi.h [new file with mode: 0644]
ares_library_init.h
vc/cares/vc6cares.dsp

index ab4fc19..d6d4851 100644 (file)
@@ -50,6 +50,7 @@ HHEADERS = ares.h                     \
   ares_data.h                          \
   ares_dns.h                           \
   ares_getenv.h                                \
+  ares_iphlpapi.h                      \
   ares_ipv6.h                          \
   ares_library_init.h                  \
   ares_llist.h                         \
index 4ee31ef..92ba709 100644 (file)
 
 #include "ares_setup.h"
 
-#ifdef USE_WINSOCK
-#include <iphlpapi.h>
-#endif
-
 #ifdef HAVE_SYS_PARAM_H
 #include <sys/param.h>
 #endif
diff --git a/ares_iphlpapi.h b/ares_iphlpapi.h
new file mode 100644 (file)
index 0000000..5d1ebc6
--- /dev/null
@@ -0,0 +1,217 @@
+#ifndef HEADER_CARES_IPHLPAPI_H
+#define HEADER_CARES_IPHLPAPI_H
+
+/* Copyright 1998 by the Massachusetts Institute of Technology.
+ * Copyright (C) 2004 - 2011 by Daniel Stenberg et al
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting
+ * documentation, and that the name of M.I.T. not be used in
+ * advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose.  It is provided "as is"
+ * without express or implied warranty.
+ */
+
+#if defined(USE_WINSOCK)
+
+#ifndef INET_ADDRSTRLEN
+#define INET_ADDRSTRLEN  22
+#endif
+
+#ifndef INET6_ADDRSTRLEN
+#define INET6_ADDRSTRLEN 65
+#endif
+
+/* ---------------------------------------------------------- */
+#if !defined(__CSADDR_DEFINED__) && !defined(__CSADDR_T_DEFINED)
+/* ---------------------------------------------------------- */
+
+typedef struct _SOCKET_ADDRESS {
+  LPSOCKADDR lpSockaddr;
+  INT iSockaddrLength;
+} SOCKET_ADDRESS, *PSOCKET_ADDRESS;
+
+typedef struct _CSADDR_INFO {
+  SOCKET_ADDRESS LocalAddr;
+  SOCKET_ADDRESS RemoteAddr;
+  INT iSocketType;
+  INT iProtocol;
+} CSADDR_INFO, *PCSADDR_INFO;
+
+/* --------------------------------------------------- */
+#endif /* ! __CSADDR_DEFINED__ && ! __CSADDR_T_DEFINED */
+/* --------------------------------------------------- */
+
+/* ------------------------------- */
+#if !defined(IP_ADAPTER_DDNS_ENABLED)
+/* ------------------------------- */
+
+#define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE  0x0001
+#define IP_ADAPTER_ADDRESS_TRANSIENT     0x0002
+
+#define IP_ADAPTER_DDNS_ENABLED                0x0001
+#define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX     0x0002
+#define IP_ADAPTER_DHCP_ENABLED                0x0004
+#define IP_ADAPTER_RECEIVE_ONLY                0x0008
+#define IP_ADAPTER_NO_MULTICAST                0x0010
+#define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG  0x0020
+
+#define GAA_FLAG_SKIP_UNICAST        0x0001
+#define GAA_FLAG_SKIP_ANYCAST        0x0002
+#define GAA_FLAG_SKIP_MULTICAST      0x0004
+#define GAA_FLAG_SKIP_DNS_SERVER     0x0008
+#define GAA_FLAG_INCLUDE_PREFIX      0x0010
+#define GAA_FLAG_SKIP_FRIENDLY_NAME  0x0020
+
+typedef enum {
+  IpPrefixOriginOther = 0,
+  IpPrefixOriginManual,
+  IpPrefixOriginWellKnown,
+  IpPrefixOriginDhcp,
+  IpPrefixOriginRouterAdvertisement,
+} IP_PREFIX_ORIGIN;
+
+typedef enum {
+  IpSuffixOriginOther = 0,
+  IpSuffixOriginManual,
+  IpSuffixOriginWellKnown,
+  IpSuffixOriginDhcp,
+  IpSuffixOriginLinkLayerAddress,
+  IpSuffixOriginRandom,
+} IP_SUFFIX_ORIGIN;
+
+typedef enum {
+  IpDadStateInvalid = 0,
+  IpDadStateTentative,
+  IpDadStateDuplicate,
+  IpDadStateDeprecated,
+  IpDadStatePreferred,
+} IP_DAD_STATE;
+
+typedef enum {
+  IfOperStatusUp = 1,
+  IfOperStatusDown,
+  IfOperStatusTesting,
+  IfOperStatusUnknown,
+  IfOperStatusDormant,
+  IfOperStatusNotPresent,
+  IfOperStatusLowerLayerDown
+} IF_OPER_STATUS;
+
+typedef enum {
+  ScopeLevelInterface    = 0x0001,
+  ScopeLevelLink         = 0x0002,
+  ScopeLevelSubnet       = 0x0003,
+  ScopeLevelAdmin        = 0x0004,
+  ScopeLevelSite         = 0x0005,
+  ScopeLevelOrganization = 0x0008,
+  ScopeLevelGlobal       = 0x000E
+} SCOPE_LEVEL;
+
+typedef struct _IP_ADAPTER_UNICAST_ADDRESS {
+  union {
+    ULONGLONG Alignment;
+    struct {
+      ULONG Length;
+      DWORD Flags;
+    };
+  };
+  struct _IP_ADAPTER_UNICAST_ADDRESS *Next;
+  SOCKET_ADDRESS Address;
+  IP_PREFIX_ORIGIN PrefixOrigin;
+  IP_SUFFIX_ORIGIN SuffixOrigin;
+  IP_DAD_STATE DadState;
+  ULONG ValidLifetime;
+  ULONG PreferredLifetime;
+  ULONG LeaseLifetime;
+} IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS;
+
+typedef struct _IP_ADAPTER_ANYCAST_ADDRESS {
+  union {
+    ULONGLONG Alignment;
+    struct {
+      ULONG Length;
+      DWORD Flags;
+    };
+  };
+  struct _IP_ADAPTER_ANYCAST_ADDRESS *Next;
+  SOCKET_ADDRESS Address;
+} IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS;
+
+typedef struct _IP_ADAPTER_MULTICAST_ADDRESS {
+  union {
+    ULONGLONG Alignment;
+    struct {
+      ULONG Length;
+      DWORD Flags;
+    };
+  };
+  struct _IP_ADAPTER_MULTICAST_ADDRESS *Next;
+  SOCKET_ADDRESS Address;
+} IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS;
+
+typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS {
+  union {
+    ULONGLONG Alignment;
+    struct {
+      ULONG Length;
+      DWORD Reserved;
+    };
+  };
+  struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next;
+  SOCKET_ADDRESS Address;
+} IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS;
+
+typedef struct _IP_ADAPTER_PREFIX {
+  union {
+    ULONGLONG Alignment;
+    struct {
+      ULONG Length;
+      DWORD Flags;
+    };
+  };
+  struct _IP_ADAPTER_PREFIX *Next;
+  SOCKET_ADDRESS Address;
+  ULONG PrefixLength;
+} IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX;
+
+typedef struct _IP_ADAPTER_ADDRESSES {
+  union {
+    ULONGLONG Alignment;
+    struct {
+      ULONG Length;
+      DWORD IfIndex;
+    };
+  };
+  struct _IP_ADAPTER_ADDRESSES *Next;
+  PCHAR AdapterName;
+  PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress;
+  PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress;
+  PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress;
+  PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress;
+  PWCHAR DnsSuffix;
+  PWCHAR Description;
+  PWCHAR FriendlyName;
+  BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
+  DWORD PhysicalAddressLength;
+  DWORD Flags;
+  DWORD Mtu;
+  DWORD IfType;
+  IF_OPER_STATUS OperStatus;
+  DWORD Ipv6IfIndex;
+  DWORD ZoneIndices[16];
+  PIP_ADAPTER_PREFIX FirstPrefix;
+} IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES;
+
+/* -------------------------------- */
+#endif /* ! IP_ADAPTER_DDNS_ENABLED */
+/* -------------------------------- */
+
+#endif /* USE_WINSOCK */
+
+#endif /* HEADER_CARES_IPHLPAPI_H */
index fe27d80..59e5cc5 100644 (file)
@@ -3,7 +3,7 @@
 
 
 /* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2004-2009 by Daniel Stenberg
+ * Copyright (C) 2004-2011 by Daniel Stenberg
  *
  * Permission to use, copy, modify, and distribute this
  * software and its documentation for any purpose and without
@@ -23,6 +23,7 @@
 #ifdef USE_WINSOCK
 
 #include <iphlpapi.h>
+#include <ares_iphlpapi.h>
 
 typedef DWORD (WINAPI *fpGetNetworkParams_t) (FIXED_INFO*, DWORD*);
 typedef BOOLEAN (APIENTRY *fpSystemFunction036_t) (void*, ULONG);
index 575e1db..595a0f1 100644 (file)
@@ -354,6 +354,10 @@ SOURCE=..\..\ares_getenv.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\ares_iphlpapi.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\ares_ipv6.h\r
 # End Source File\r
 # Begin Source File\r