sipxportlib  Version 3.3
getWindowsDNSServers.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2006-2007 SIPez LLC.
3 // Licensed to SIPfoundry under a Contributor Agreement.
4 //
5 // Copyright (C) 2004-2007 SIPfoundry Inc.
6 // Licensed by SIPfoundry under the LGPL license.
7 //
8 // Copyright (C) 2004-2006 Pingtel Corp. All rights reserved.
9 // Licensed to SIPfoundry under a Contributor Agreement.
10 //
11 // $$
13 #ifndef getWindowsDNSServers_h_
14 #define getWindowsDNSServers_h_
15 
16 #ifdef WIN32
17 #define MAXIPLEN 40
18 
19 #include <winsock2.h>
20 #include <time.h>
21 
22 #ifdef __cplusplus
23 # include <utl/UtlString.h>
24 #endif
25 
26 // Definitions and structures used by getnetworkparams and getadaptersinfo apis
27 
28 #define MAX_ADAPTER_DESCRIPTION_LENGTH 128 // arb.
29 #define MAX_ADAPTER_NAME_LENGTH 256 // arb.
30 #define MAX_ADAPTER_ADDRESS_LENGTH 8 // arb.
31 #define DEFAULT_MINIMUM_ENTITIES 32 // arb.
32 #define MAX_HOSTNAME_LEN 128 // arb.
33 #define MAX_DOMAIN_NAME_LEN 128 // arb.
34 #define MAX_SCOPE_ID_LEN 256 // arb.
35 #define MAX_ADAPTER_NAME 128
36 
37 //
38 // types
39 //
40 
41 // Node Type
42 
43 #define BROADCAST_NODETYPE 1
44 #define PEER_TO_PEER_NODETYPE 2
45 #define MIXED_NODETYPE 4
46 #define HYBRID_NODETYPE 8
47 
48 // Adapter Type
49 
50 #define IF_OTHER_ADAPTERTYPE 0
51 #define IF_ETHERNET_ADAPTERTYPE 1
52 #define IF_TOKEN_RING_ADAPTERTYPE 2
53 #define IF_FDDI_ADAPTERTYPE 3
54 #define IF_PPP_ADAPTERTYPE 4
55 #define IF_LOOPBACK_ADAPTERTYPE 5
56 #define IF_SLIP_ADAPTERTYPE 6
57 
58 typedef enum {
59  IfOperStatusUp = 1,
60  IfOperStatusDown,
61  IfOperStatusTesting,
62  IfOperStatusUnknown,
63  IfOperStatusDormant,
64  IfOperStatusNotPresent,
65  IfOperStatusLowerLayerDown
66 } IF_OPER_STATUS;
67 
68 
69 
70 //
71 // IP_ADDRESS_STRING - store an IP address as a dotted decimal string
72 //
73 
74 typedef struct {
75  char String[4 * 4];
76 } IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;
77 
78 //
79 // IP_ADDR_STRING - store an IP address with its corresponding subnet mask,
80 // both as dotted decimal strings
81 //
82 
83 typedef struct _IP_ADDR_STRING {
84  struct _IP_ADDR_STRING* Next;
85  IP_ADDRESS_STRING IpAddress;
86  IP_MASK_STRING IpMask;
87  DWORD Context;
88 } IP_ADDR_STRING, *PIP_ADDR_STRING;
89 
90 //
91 // ADAPTER_INFO - per-adapter information. All IP addresses are stored as
92 // strings
93 //
94 
95 typedef struct _IP_ADAPTER_INFO {
96  struct _IP_ADAPTER_INFO* Next;
97  DWORD ComboIndex;
98  char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
99  char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
100  UINT AddressLength;
101  BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
102  DWORD Index;
103  UINT Type;
104  UINT DhcpEnabled;
105  PIP_ADDR_STRING CurrentIpAddress;
106  IP_ADDR_STRING IpAddressList;
107  IP_ADDR_STRING GatewayList;
108  IP_ADDR_STRING DhcpServer;
109  BOOL HaveWins;
110  IP_ADDR_STRING PrimaryWinsServer;
111  IP_ADDR_STRING SecondaryWinsServer;
112  time_t LeaseObtained;
113  time_t LeaseExpires;
114 } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
115 
116 //
117 // IP_PER_ADAPTER_INFO - per-adapter IP information such as DNS server list.
118 //
119 
120 typedef struct _IP_PER_ADAPTER_INFO {
121  UINT AutoconfigEnabled;
122  UINT AutoconfigActive;
123  PIP_ADDR_STRING CurrentDnsServer;
124  IP_ADDR_STRING DnsServerList;
125 } IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO;
126 
127 //
128 // FIXED_INFO - the set of IP-related information which does not depend on DHCP
129 //
130 
131 
132 typedef enum {
133  IpPrefixOriginOther = 0,
134  IpPrefixOriginManual,
135  IpPrefixOriginWellKnown,
136  IpPrefixOriginDhcp,
137  IpPrefixOriginRouterAdvertisement
138 } IP_PREFIX_ORIGIN;
139 
140 typedef enum {
141  IpSuffixOriginOther = 0,
142  IpSuffixOriginManual,
143  IpSuffixOriginWellKnown,
144  IpSuffixOriginDhcp,
145  IpSuffixOriginLinkLayerAddress,
146  IpSuffixOriginRandom
147 } IP_SUFFIX_ORIGIN;
148 
149 typedef enum {
150  IpDadStateInvalid = 0,
151  IpDadStateTentative,
152  IpDadStateDuplicate,
153  IpDadStateDeprecated,
154  IpDadStatePreferred
155 } IP_DAD_STATE;
156 
157 typedef struct SOCKET_ADDRESS_XYZ {
158  LPSOCKADDR lpSockaddr ;
159  INT iSockaddrLength ;
160 } SOCKET_ADDRESS_XYZ, *PSOCKET_ADDRESS_XYZ, FAR * LPSOCKET_ADDRESS_XYZ ;
161 
162 typedef struct _IP_ADAPTER_UNICAST_ADDRESS {
163  union {
164  ULONGLONG Alignment;
165  struct {
166  ULONG Length;
167  DWORD Flags;
168  };
169  };
170  struct _IP_ADAPTER_UNICAST_ADDRESS *Next;
171  SOCKET_ADDRESS_XYZ Address;
172  IP_PREFIX_ORIGIN PrefixOrigin;
173  IP_SUFFIX_ORIGIN SuffixOrigin;
174  IP_DAD_STATE DadState;
175 
176  ULONG ValidLifetime;
177  ULONG PreferredLifetime;
178  ULONG LeaseLifetime;
179 } IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS;
180 
181 typedef struct _IP_ADAPTER_ANYCAST_ADDRESS {
182  union {
183  ULONGLONG Alignment;
184  struct {
185  ULONG Length;
186  DWORD Flags;
187  };
188  };
189  struct _IP_ADAPTER_ANYCAST_ADDRESS *Next;
190  SOCKET_ADDRESS_XYZ Address;
191 } IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS;
192 
193 typedef struct _IP_ADAPTER_MULTICAST_ADDRESS {
194  union {
195  ULONGLONG Alignment;
196  struct {
197  ULONG Length;
198  DWORD Flags;
199  };
200  };
201  struct _IP_ADAPTER_MULTICAST_ADDRESS *Next;
202  SOCKET_ADDRESS_XYZ Address;
203 } IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS;
204 
205 typedef struct {
206  char HostName[MAX_HOSTNAME_LEN + 4] ;
207  char DomainName[MAX_DOMAIN_NAME_LEN + 4];
208  PIP_ADDR_STRING CurrentDnsServer;
209  IP_ADDR_STRING DnsServerList;
210  UINT NodeType;
211  char ScopeId[MAX_SCOPE_ID_LEN + 4];
212  UINT EnableRouting;
213  UINT EnableProxy;
214  UINT EnableDns;
215 } FIXED_INFO, *PFIXED_INFO;
216 
217 typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS {
218  union {
219  ULONGLONG Alignment;
220  struct {
221  ULONG Length;
222  DWORD Reserved;
223  };
224  };
225  struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next;
226  SOCKET_ADDRESS_XYZ Address;
227 } IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS;
228 
229 typedef struct _IP_ADAPTER_PREFIX {
230  union {
231  ULONGLONG Alignment;
232  struct {
233  ULONG Length;
234  DWORD Flags;
235  };
236  };
237  struct _IP_ADAPTER_PREFIX *Next;
238  SOCKET_ADDRESS_XYZ Address;
239  ULONG PrefixLength;
240 } IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX;
241 
242 typedef struct _IP_ADAPTER_ADDRESSES {
243  union {
244  ULONGLONG Alignment;
245  struct {
246  ULONG Length;
247  DWORD IfIndex;
248  };
249  };
250  struct _IP_ADAPTER_ADDRESSES *Next;
251  PCHAR AdapterName;
252  PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress;
253  PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress;
254  PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress;
255  PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress;
256  PWCHAR DnsSuffix;
257  PWCHAR Description;
258  PWCHAR FriendlyName;
259  BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
260  DWORD PhysicalAddressLength;
261  DWORD Flags;
262  DWORD Mtu;
263  DWORD IfType;
264  IF_OPER_STATUS OperStatus;
265  DWORD Ipv6IfIndex;
266  DWORD ZoneIndices[16];
267  PIP_ADAPTER_PREFIX FirstPrefix;
268 } IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES;
269 
270 typedef struct _IP_ADAPTER_INDEX_MAP {
271  ULONG Index;
272  WCHAR Name[MAX_ADAPTER_NAME];
273 } IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP;
274 
275 typedef struct _IP_INTERFACE_INFO {
276  LONG NumAdapters;
277  IP_ADAPTER_INDEX_MAP Adapter[1];
278 } IP_INTERFACE_INFO,*PIP_INTERFACE_INFO;
279 
280 #ifdef __cplusplus
281  extern "C" int getWindowsDNSServers(char DNSServers[][MAXIPLEN], int max, const char* szLocalIp);
282 
284  extern "C" bool getAllLocalHostIps(const class HostAdapterAddress* localHostAddresses[], int &numAddresses);
291  extern "C" bool getContactAdapterName(UtlString &adapterName, const UtlString &ipAddress, bool trueName);
292  //: Returns a generated adapter name associated with the IP address
293 #else
294  int getWindowsDNSServers(char DNSServers[][MAXIPLEN], int max, const char* szLocalIp);
295 #endif
296 
297 
298 #endif //WIN32
299 
300 #endif // getWindowsDNSServers_h_
bool getContactAdapterName(UtlString &adapterName, const UtlString &ipAddress, bool unusedHere)
Definition: AdapterInfo.cpp:137
bool getAllLocalHostIps(const HostAdapterAddress *localHostAddresses[], int &numAddresses)
Definition: AdapterInfo.cpp:37
Definition: UtlString.h:48
#define MAX_ADAPTER_NAME_LENGTH
Definition: OsSocket.h:33
Definition: HostAdapterAddress.h:30