postinst: change order.
[debian/iodine.git] / src / user.h
1 /*
2  * Copyright (c) 2006-2014 Erik Ekman <yarrick@kryo.se>,
3  * 2006-2009 Bjorn Andersson <flex@kryo.se>
4  *
5  * Permission to use, copy, modify, and distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17
18 #ifndef __USER_H__
19 #define __USER_H__
20
21 #define USERS 16
22
23 #define OUTPACKETQ_LEN 4                /* Note: 16 users * 1 packet = 1MB */
24 /* Undefine to have no queue for packets coming in from tun device, which may
25    lead to massive dropping in multi-user situations with high traffic. */
26
27 #define DNSCACHE_LEN 4
28 /* Undefine to disable. Should be less than 18; also see comments in iodined.c */
29
30
31 #define QMEMPING_LEN 30
32 /* Max advisable: 64k/2 = 32000. Total mem usage: QMEMPING_LEN * USERS * 6 bytes */
33
34 #define QMEMDATA_LEN 15
35 /* Max advisable: 36/2 = 18. Total mem usage: QMEMDATA_LEN * USERS * 6 bytes */
36
37 struct tun_user {
38         char id;
39         int active;
40         int authenticated;
41         int authenticated_raw;
42         int disabled;
43         time_t last_pkt;
44         int seed;
45         in_addr_t tun_ip;
46         struct in_addr host;
47         struct query q;
48         struct query q_sendrealsoon;
49         int q_sendrealsoon_new;
50         struct packet inpacket;
51         struct packet outpacket;
52         int outfragresent;
53         struct encoder *encoder;
54         char downenc;
55         int out_acked_seqno;
56         int out_acked_fragment;
57         int fragsize;
58         enum connection conn;
59         int lazy;
60         unsigned char qmemping_cmc[QMEMPING_LEN * 4];
61         unsigned short qmemping_type[QMEMPING_LEN];
62         int qmemping_lastfilled;
63         unsigned char qmemdata_cmc[QMEMDATA_LEN * 4];
64         unsigned short qmemdata_type[QMEMDATA_LEN];
65         int qmemdata_lastfilled;
66 #ifdef OUTPACKETQ_LEN
67         struct packet outpacketq[OUTPACKETQ_LEN];
68         int outpacketq_nexttouse;
69         int outpacketq_filled;
70 #endif
71 #ifdef DNSCACHE_LEN
72         struct query dnscache_q[DNSCACHE_LEN];
73         char dnscache_answer[DNSCACHE_LEN][4096];
74         int dnscache_answerlen[DNSCACHE_LEN];
75         int dnscache_lastfilled;
76 #endif
77 };
78
79 extern struct tun_user *users;
80
81 int init_users(in_addr_t, int);
82 const char* users_get_first_ip();
83 int users_waiting_on_reply();
84 int find_user_by_ip(uint32_t);
85 int all_users_waiting_to_send();
86 int find_available_user();
87 void user_switch_codec(int userid, struct encoder *enc);
88 void user_set_conn_type(int userid, enum connection c);
89
90 #endif