Git for Windows Git-1.6.5.1-preview20100112-with-cheetah
[msysgit.git] / mingw / include / windns.h
blob0a7760d0cad2a82f010839a7abe020b3128898c8
1 #ifndef _WINDNS_H
2 #define _WINDNS_H
3 #if __GNUC__ >= 3
4 #pragma GCC system_header
5 #endif
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
11 #define DNS_QUERY_STANDARD 0x0
12 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x1
13 #define DNS_QUERY_USE_TCP_ONLY 0x2
14 #define DNS_QUERY_NO_RECURSION 0x4
15 #define DNS_QUERY_BYPASS_CACHE 0x8
16 #define DNS_QUERY_NO_WIRE_QUERY 0x10
17 #define DNS_QUERY_NO_LOCAL_NAME 0x20
18 #define DNS_QUERY_NO_HOSTS_FILE 0x40
19 #define DNS_QUERY_NO_NETBT 0x80
20 #define DNS_QUERY_TREAT_AS_FQDN 0x1000
21 #define DNS_QUERY_WIRE_ONLY 0x100
22 #define DNS_QUERY_RETURN_MESSAGE 0x200
23 #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x100000
24 #define DNS_QUERY_RESERVED 0xff000000
26 #define DNS_UPDATE_SECURITY_USE_DEFAULT 0x0
27 #define DNS_UPDATE_SECURITY_OFF 0x10
28 #define DNS_UPDATE_SECURITY_ON 0x20
29 #define DNS_UPDATE_SECURITY_ONLY 0x100
30 #define DNS_UPDATE_CACHE_SECURITY_CONTEXT 0x200
31 #define DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT 0x400
32 #define DNS_UPDATE_FORCE_SECURITY_NEGO 0x800
33 #define DNS_UPDATE_RESERVED 0xffff0000
35 #ifndef RC_INVOKE
36 typedef DWORD IP4_ADDRESS;
37 typedef DWORD DNS_STATUS;
38 enum {
39 DNS_TYPE_A=1,
40 DNS_TYPE_NS,
41 DNS_TYPE_MD,
42 DNS_TYPE_MF,
43 DNS_TYPE_CNAME,
44 DNS_TYPE_SOA,
45 DNS_TYPE_MB,
46 DNS_TYPE_MG,
47 DNS_TYPE_MR,
48 DNS_TYPE_NULL,
49 DNS_TYPE_WKS,
50 DNS_TYPE_PTR,
51 DNS_TYPE_HINFO,
52 DNS_TYPE_MINFO,
53 DNS_TYPE_MX,
54 DNS_TYPE_TEXT,
55 DNS_TYPE_RP,
56 DNS_TYPE_AFSDB,
57 DNS_TYPE_X25,
58 DNS_TYPE_ISDN,
59 DNS_TYPE_RT,
60 DNS_TYPE_NSAP,
61 DNS_TYPE_NSAPPTR,
62 DNS_TYPE_SIG,
63 DNS_TYPE_KEY,
64 DNS_TYPE_PX,
65 DNS_TYPE_GPOS,
66 DNS_TYPE_AAAA,
67 DNS_TYPE_LOC,
68 DNS_TYPE_NXT,
69 DNS_TYPE_EID,
70 DNS_TYPE_NIMLOC,
71 DNS_TYPE_SRV,
72 DNS_TYPE_ATMA,
73 DNS_TYPE_NAPTR,
74 DNS_TYPE_KX,
75 DNS_TYPE_CERT,
76 DNS_TYPE_A6,
77 DNS_TYPE_DNAME,
78 DNS_TYPE_SINK,
79 DNS_TYPE_OPT,
80 DNS_TYPE_UINFO=100,
81 DNS_TYPE_UID,
82 DNS_TYPE_GID,
83 DNS_TYPE_UNSPEC,
84 DNS_TYPE_ADDRS=248,
85 DNS_TYPE_TKEY,
86 DNS_TYPE_TSIG,
87 DNS_TYPE_IXFR,
88 DNS_TYPE_AXFR,
89 DNS_TYPE_MAILB,
90 DNS_TYPE_MAILA,
91 DNS_TYPE_ALL,
92 DNS_TYPE_ANY=DNS_TYPE_ALL
94 typedef enum _DNS_CHARSET
96 DnsCharSetUnknown,
97 DnsCharSetUnicode,
98 DnsCharSetUtf8,
99 DnsCharSetAnsi
100 } DNS_CHARSET;
101 typedef enum
103 DnsConfigPrimaryDomainName_W,
104 DnsConfigPrimaryDomainName_A,
105 DnsConfigPrimaryDomainName_UTF8,
106 DnsConfigAdapterDomainName_W,
107 DnsConfigAdapterDomainName_A,
108 DnsConfigAdapterDomainName_UTF8,
109 DnsConfigDnsServerList,
110 DnsConfigSearchList,
111 DnsConfigAdapterInfo,
112 DnsConfigPrimaryHostNameRegistrationEnabled,
113 DnsConfigAdapterHostNameRegistrationEnabled,
114 DnsConfigAddressRegistrationMaxCount,
115 DnsConfigHostName_W,
116 DnsConfigHostName_A,
117 DnsConfigHostName_UTF8,
118 DnsConfigFullHostName_W,
119 DnsConfigFullHostName_A,
120 DnsConfigFullHostName_UTF8
121 } DNS_CONFIG_TYPE;
122 typedef enum
124 DnsFreeFlat = 0,
125 DnsFreeRecordList,
126 DnsFreeParsedMessageFields
127 } DNS_FREE_TYPE;
128 typedef enum _DNS_NAME_FORMAT
130 DnsNameDomain,
131 DnsNameDomainLabel,
132 DnsNameHostnameFull,
133 DnsNameHostnameLabel,
134 DnsNameWildcard,
135 DnsNameSrvRecord
136 } DNS_NAME_FORMAT;
137 typedef enum
139 DnsSectionQuestion,
140 DnsSectionAnswer,
141 DnsSectionAuthority,
142 DnsSectionAdditional
143 } DNS_SECTION;
144 typedef struct _IP4_ARRAY {
145 DWORD AddrCount;
146 IP4_ADDRESS AddrArray[1];
147 } IP4_ARRAY, *PIP4_ARRAY;
148 typedef struct {
149 DWORD IP6Dword[4];
150 } IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS;
151 typedef struct _DNS_HEADER {
152 WORD Xid;
153 BYTE RecursionDesired;
154 BYTE Truncation;
155 BYTE Authoritative;
156 BYTE Opcode;
157 BYTE IsResponse;
158 BYTE ResponseCode;
159 BYTE Reserved;
160 BYTE RecursionAvailable;
161 WORD QuestionCount;
162 WORD AnswerCount;
163 WORD NameServerCount;
164 WORD AdditionalCount;
165 } DNS_HEADER, *PDNS_HEADER;
166 typedef struct _DNS_MESSAGE_BUFFER {
167 DNS_HEADER MessageHead;
168 CHAR MessageBody[1];
169 } DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER;
170 typedef struct _DnsRecordFlags {
171 DWORD Section :2;
172 DWORD Delete :1;
173 DWORD CharSet :2;
174 DWORD Unused :3;
175 DWORD Reserved :24;
176 } DNS_RECORD_FLAGS;
177 #define DNSREC_QUESTION 0
178 #define DNSREC_ANSWER 1
179 #define DNSREC_AUTHORITY 2
180 #define DNSREC_ADDITIONAL 3
181 typedef struct {
182 IP4_ADDRESS IpAddress;
183 } DNS_A_DATA, *PDNS_A_DATA;
184 typedef struct {
185 DNS_IP6_ADDRESS Ip6Address;
186 } DNS_AAAA_DATA, *PDNS_AAAA_DATA;
187 #define DNS_ATMA_MAX_ADDR_LENGTH 20
188 typedef struct {
189 BYTE AddressType;
190 BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH];
191 } DNS_ATMA_DATA, *PDNS_ATMA_DATA;
192 typedef struct {
193 WORD wFlags;
194 BYTE chProtocol;
195 BYTE chAlgorithm;
196 BYTE Key[1];
197 } DNS_KEY_DATA, *PDNS_KEY_DATA;
198 typedef struct {
199 WORD wVersion;
200 WORD wSize;
201 WORD wHorPrec;
202 WORD wVerPrec;
203 DWORD dwLatitude;
204 DWORD dwLongitude;
205 DWORD dwAltitude;
206 } DNS_LOC_DATA, *PDNS_LOC_DATA;
207 typedef struct {
208 LPTSTR pNameMailbox;
209 LPTSTR pNameErrorsMailbox;
210 } DNS_MINFO_DATA, *PDNS_MINFO_DATA;
211 typedef struct {
212 LPTSTR pNameExchange;
213 WORD wPreference;
214 WORD Pad;
215 } DNS_MX_DATA, *PDNS_MX_DATA;
216 typedef struct {
217 DWORD dwByteCount;
218 BYTE Data[1];
219 } DNS_NULL_DATA, *PDNS_NULL_DATA;
220 typedef struct {
221 LPTSTR pNameNext;
222 WORD wNumTypes;
223 WORD wTypes[1];
224 } DNS_NXT_DATA, *PDNS_NXT_DATA;
225 typedef struct {
226 LPTSTR pNameHost;
227 } DNS_PTR_DATA, *PDNS_PTR_DATA;
228 typedef struct {
229 LPTSTR pNameSigner;
230 WORD wTypeCovered;
231 BYTE chAlgorithm;
232 BYTE chLabelCount;
233 DWORD dwOriginalTtl;
234 DWORD dwExpiration;
235 DWORD dwTimeSigned;
236 WORD wKeyTag;
237 WORD Pad;
238 BYTE Signature[1];
239 } DNS_SIG_DATA, *PDNS_SIG_DATA;
240 typedef struct {
241 LPTSTR pNamePrimaryServer;
242 LPTSTR pNameAdministrator;
243 DWORD dwSerialNo;
244 DWORD dwRefresh;
245 DWORD dwRetry;
246 DWORD dwExpire;
247 DWORD dwDefaultTtl;
248 } DNS_SOA_DATA, *PDNS_SOA_DATA;
249 typedef struct {
250 LPTSTR pNameTarget;
251 WORD wPriority;
252 WORD wWeight;
253 WORD wPort;
254 WORD Pad;
255 } DNS_SRV_DATA, *PDNS_SRV_DATA;
256 typedef struct {
257 DWORD dwStringCount;
258 LPTSTR pStringArray[1];
259 } DNS_TXT_DATA, *PDNS_TXT_DATA;
260 typedef struct {
261 LPTSTR pNameAlgorithm;
262 PBYTE pAlgorithmPacket;
263 PBYTE pKey;
264 PBYTE pOtherData;
265 DWORD dwCreateTime;
266 DWORD dwExpireTime;
267 WORD wMode;
268 WORD wError;
269 WORD wKeyLength;
270 WORD wOtherLength;
271 UCHAR cAlgNameLength;
272 BOOL bPacketPointers;
273 } DNS_TKEY_DATA, *PDNS_TKEY_DATA;
274 typedef struct {
275 LPTSTR pNameAlgorithm;
276 PBYTE pAlgorithmPacket;
277 PBYTE pSignature;
278 PBYTE pOtherData;
279 LONGLONG i64CreateTime;
280 WORD wFudgeTime;
281 WORD wOriginalXid;
282 WORD wError;
283 WORD wSigLength;
284 WORD wOtherLength;
285 UCHAR cAlgNameLength;
286 BOOL bPacketPointers;
287 } DNS_TSIG_DATA, *PDNS_TSIG_DATA;
288 typedef struct {
289 DWORD dwMappingFlag;
290 DWORD dwLookupTimeout;
291 DWORD dwCacheTimeout;
292 DWORD cWinsServerCount;
293 IP4_ADDRESS WinsServers[1];
294 } DNS_WINS_DATA, *PDNS_WINS_DATA;
295 typedef struct {
296 DWORD dwMappingFlag;
297 DWORD dwLookupTimeout;
298 DWORD dwCacheTimeout;
299 LPTSTR pNameResultDomain;
300 } DNS_WINSR_DATA, *PDNS_WINSR_DATA;
301 typedef struct _DNS_WIRE_QUESTION {
302 WORD QuestionType;
303 WORD QuestionClass;
304 } DNS_WIRE_QUESTION, *PDNS_WIRE_QUESTION;
305 typedef struct _DNS_WIRE_RECORD {
306 WORD RecordType;
307 WORD RecordClass;
308 DWORD TimeToLive;
309 WORD DataLength;
310 } DNS_WIRE_RECORD, *PDNS_WIRE_RECORD;
311 typedef struct {
312 IP4_ADDRESS IpAddress;
313 UCHAR chProtocol;
314 BYTE BitMask[1];
315 } DNS_WKS_DATA, *PDNS_WKS_DATA;
316 typedef struct _DnsRecord {
317 struct _DnsRecord* pNext;
318 LPTSTR pName;
319 WORD wType;
320 WORD wDataLength;
321 union {
322 DWORD DW;
323 DNS_RECORD_FLAGS S;
324 } Flags;
325 DWORD dwTtl;
326 DWORD dwReserved;
327 union {
328 DNS_A_DATA A;
329 DNS_SOA_DATA SOA, Soa;
330 DNS_PTR_DATA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb,
331 MD, Md, MF, Mf, MG, Mg, MR, Mr;
332 DNS_MINFO_DATA MINFO, Minfo, RP, Rp;
333 DNS_MX_DATA MX, Mx, AFSDB, Afsdb, RT, Rt;
334 DNS_TXT_DATA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
335 DNS_NULL_DATA Null;
336 DNS_WKS_DATA WKS, Wks;
337 DNS_AAAA_DATA AAAA;
338 DNS_KEY_DATA KEY, Key;
339 DNS_SIG_DATA SIG, Sig;
340 DNS_ATMA_DATA ATMA, Atma;
341 DNS_NXT_DATA NXT, Nxt;
342 DNS_SRV_DATA SRV, Srv;
343 DNS_TKEY_DATA TKEY, Tkey;
344 DNS_TSIG_DATA TSIG, Tsig;
345 DNS_WINS_DATA WINS, Wins;
346 DNS_WINSR_DATA WINSR, WinsR, NBSTAT, Nbstat;
347 } Data;
348 } DNS_RECORD, *PDNS_RECORD;
349 typedef struct _DnsRRSet {
350 PDNS_RECORD pFirstRR;
351 PDNS_RECORD pLastRR;
352 } DNS_RRSET, *PDNS_RRSET;
354 DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,HANDLE*);
355 DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,HANDLE*);
356 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
357 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
358 DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
359 DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
360 DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
361 BOOL WINAPI DnsNameCompare_A(LPSTR,LPSTR);
362 BOOL WINAPI DnsNameCompare_W(LPWSTR,LPWSTR);
363 DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
364 DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
365 DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
366 DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PWSTR,PVOID,PVOID,PDWORD);
367 BOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD);
368 PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
369 void WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE);
370 BOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*);
371 PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
372 PDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD);
373 void WINAPI DnsReleaseContextHandle(HANDLE);
374 DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
375 DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
376 DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
377 DNS_STATUS WINAPI DnsValidateName_A(LPCSTR,DNS_NAME_FORMAT);
378 DNS_STATUS WINAPI DnsValidateName_W(LPCWSTR, DNS_NAME_FORMAT);
379 DNS_STATUS WINAPI DnsValidateName_UTF8(LPCSTR,DNS_NAME_FORMAT);
380 BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,LPDWORD,LPWSTR,WORD,WORD,BOOL);
381 BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,LPDWORD,LPSTR,WORD,WORD,BOOL);
383 #ifdef UNICODE
384 #define DnsAcquireContextHandle DnsAcquireContextHandle_W
385 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_W
386 #define DnsNameCompare DnsNameCompare_W
387 #define DnsQuery DnsQuery_W
388 #define DnsReplaceRecordSet DnsReplaceRecordSetW
389 #define DnsValidateName DnsValidateName_W
390 #else
391 #define DnsAcquireContextHandle DnsAcquireContextHandle_A
392 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_A
393 #define DnsNameCompare DnsNameCompare_A
394 #define DnsQuery DnsQuery_A
395 #define DnsReplaceRecordSet DnsReplaceRecordSetA
396 #define DnsValidateName DnsValidateName_A
397 #endif
399 #endif /* RC_INVOKED */
401 #ifdef __cplusplus
403 #endif
405 #endif /* _WINDNS_H */