New upstream release.
[debian/iodine.git] / src / common.h
1 /*
2  * Copyright (c) 2006-2009 Bjorn Andersson <flex@kryo.se>, Erik Ekman <yarrick@kryo.se>
3  *
4  * Permission to use, copy, modify, and distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16
17 #ifndef __COMMON_H__
18 #define __COMMON_H__
19
20 #ifdef WINDOWS32
21 #include "windows.h"
22 #else
23 #include <sys/socket.h>
24 #include <err.h>
25 #include <arpa/inet.h>
26 #include <netinet/in.h>
27 #endif
28
29
30 #ifndef MIN
31 #define MIN(a,b) ((a)<(b)?(a):(b))
32 #endif
33 #ifndef MAX
34 #define MAX(a,b) ((a)>(b)?(a):(b))
35 #endif
36
37 #define QUERY_NAME_SIZE 256
38
39 #if defined IP_RECVDSTADDR 
40 # define DSTADDR_SOCKOPT IP_RECVDSTADDR 
41 # define dstaddr(x) ((struct in_addr *) CMSG_DATA(x)) 
42 #elif defined IP_PKTINFO 
43 # define DSTADDR_SOCKOPT IP_PKTINFO 
44 # define dstaddr(x) (&(((struct in_pktinfo *)(CMSG_DATA(x)))->ipi_addr)) 
45 #endif
46
47 #if defined IP_MTU_DISCOVER
48   /* Linux */
49 # define IP_OPT_DONT_FRAG IP_MTU_DISCOVER
50 # define DONT_FRAG_VALUE IP_PMTUDISC_DO
51 #elif defined IP_DONTFRAG
52   /* FreeBSD */
53 # define IP_OPT_DONT_FRAG IP_DONTFRAG
54 # define DONT_FRAG_VALUE 1
55 #elif defined IP_DONTFRAGMENT
56   /* Winsock2 */
57 # define IP_OPT_DONT_FRAG IP_DONTFRAGMENT
58 # define DONT_FRAG_VALUE 1
59 #endif
60
61 struct packet 
62 {
63         int len;                /* Total packet length */
64         int sentlen;            /* Length of chunk currently transmitted */
65         int offset;             /* Current offset */
66         char data[64*1024];     /* The data */
67         char seqno;             /* The packet sequence number */
68         char fragment;          /* Fragment index */
69 };
70
71 struct query {
72         char name[QUERY_NAME_SIZE];
73         unsigned short type;
74         unsigned short id;
75         struct in_addr destination;
76         struct sockaddr from;
77         int fromlen;
78 };
79
80 void check_superuser(void (*usage_fn)(void));
81 int open_dns(int, in_addr_t);
82 void close_dns(int);
83
84 void do_chroot(char *);
85 void do_detach();
86
87 void read_password(char*, size_t);
88
89 int check_topdomain(char *);
90
91 #ifdef WINDOWS32
92 int inet_aton(const char *cp, struct in_addr *inp);
93
94 void err(int eval, const char *fmt, ...);
95 void warn(const char *fmt, ...);
96 void errx(int eval, const char *fmt, ...);
97 void warnx(const char *fmt, ...);
98 #endif
99
100 #endif