* New upstream release:
[debian/iodine.git] / src / windows.h
1 /*\r
2  * Copyright (c) 2006-2009 Bjorn Andersson <flex@kryo.se>, Erik Ekman <yarrick@kryo.se>\r
3  *\r
4  * Permission to use, copy, modify, and distribute this software for any\r
5  * purpose with or without fee is hereby granted, provided that the above\r
6  * copyright notice and this permission notice appear in all copies.\r
7  *\r
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\r
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\r
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\r
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\r
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\r
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\r
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\r
15  */\r
16 \r
17 #ifndef __FIX_WINDOWS_H__\r
18 #define __FIX_WINDOWS_H__\r
19 \r
20 typedef unsigned int in_addr_t;\r
21 \r
22 #include <windows.h>\r
23 #include <windns.h>\r
24 #include <winsock2.h>\r
25 #include <ws2tcpip.h>\r
26 #include <iphlpapi.h>\r
27 \r
28 /* Missing from the mingw headers */\r
29 #ifndef DNS_TYPE_SRV\r
30 # define DNS_TYPE_SRV 33\r
31 #endif\r
32 #ifndef DNS_TYPE_TXT\r
33 # define DNS_TYPE_TXT 16\r
34 #endif\r
35 \r
36 #define T_A DNS_TYPE_A\r
37 #define T_NS DNS_TYPE_NS\r
38 #define T_NULL DNS_TYPE_NULL\r
39 #define T_CNAME DNS_TYPE_CNAME\r
40 #define T_MX DNS_TYPE_MX\r
41 #define T_TXT DNS_TYPE_TXT\r
42 #define T_SRV DNS_TYPE_SRV\r
43 \r
44 #define C_IN 1\r
45 \r
46 #define FORMERR 1\r
47 #define SERVFAIL 2\r
48 #define NXDOMAIN 3\r
49 #define NOTIMP 4\r
50 #define REFUSED 5\r
51 \r
52 #define sleep(seconds) Sleep((seconds)*1000)\r
53 \r
54 typedef struct {\r
55         unsigned        id :16;         /* query identification number */\r
56                         /* fields in third byte */\r
57         unsigned        rd :1;          /* recursion desired */\r
58         unsigned        tc :1;          /* truncated message */\r
59         unsigned        aa :1;          /* authoritive answer */\r
60         unsigned        opcode :4;      /* purpose of message */\r
61         unsigned        qr :1;          /* response flag */\r
62                         /* fields in fourth byte */\r
63         unsigned        rcode :4;       /* response code */\r
64         unsigned        cd: 1;          /* checking disabled by resolver */\r
65         unsigned        ad: 1;          /* authentic data from named */\r
66         unsigned        unused :1;      /* unused bits (MBZ as of 4.9.3a3) */\r
67         unsigned        ra :1;          /* recursion available */\r
68                         /* remaining bytes */\r
69         unsigned        qdcount :16;    /* number of question entries */\r
70         unsigned        ancount :16;    /* number of answer entries */\r
71         unsigned        nscount :16;    /* number of authority entries */\r
72         unsigned        arcount :16;    /* number of resource entries */\r
73 } HEADER;\r
74 \r
75 struct ip\r
76   {\r
77     unsigned int ip_hl:4;               /* header length */\r
78     unsigned int ip_v:4;                /* version */\r
79     u_char ip_tos;                      /* type of service */\r
80     u_short ip_len;                     /* total length */\r
81     u_short ip_id;                      /* identification */\r
82     u_short ip_off;                     /* fragment offset field */\r
83 #define IP_RF 0x8000                    /* reserved fragment flag */\r
84 #define IP_DF 0x4000                    /* dont fragment flag */\r
85 #define IP_MF 0x2000                    /* more fragments flag */\r
86 #define IP_OFFMASK 0x1fff               /* mask for fragmenting bits */\r
87     u_char ip_ttl;                      /* time to live */\r
88     u_char ip_p;                        /* protocol */\r
89     u_short ip_sum;                     /* checksum */\r
90     struct in_addr ip_src, ip_dst;      /* source and dest address */\r
91   };\r
92 \r
93 DWORD WINAPI tun_reader(LPVOID arg);\r
94 struct tun_data {\r
95         HANDLE tun;\r
96         int sock;\r
97         struct sockaddr_in addr;\r
98 };\r
99 \r
100 #endif\r