-
Notifications
You must be signed in to change notification settings - Fork 4
/
tgc.h
165 lines (132 loc) · 4.38 KB
/
tgc.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/* tgc.h is part of tgc package.
Copyright (C) 2014 Faraz.V ([email protected])
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
Disclaimer:
This program is provided with no warranty of any kind, either expressed or
implied. It is the responsibility of the user (you) to fully research and
comprehend the usage of this program. As with any tool, it can be misused,
either intentionally or unintentionally.
THE AUTHOR(S) IS(ARE) NOT RESPONSIBLE FOR ANYTHING YOU DO WITH THIS PROGRAM
or anything that happens because of your use (or misuse) of this program.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _TGC_H_
#define _TGC_H_
#define TGC_DEFAULT_LOGFILE ""
#define TGC_DEFAULT_LOGLEVEL 0
#define TGC_BUFFER_SIZE 4096
// time intervals between each connectin attempt to LL
#define TGC_TIMEOUT 40
#define CC_SERVER tgc->node.cc.server
#define CC_SERVER_PORT tgc->node.cc.server_port
#define LL_HOST tgc->node.cc.ll_host
#define CC_LL_PORT tgc->node.cc.ll_port
#define TGC_COMM_PING 'P'
#define TGC_COMM_CCC 'O'
#define TGC_COMM_CLOSE 'C'
#define TGC_METHOD_FORK 'F'
#define TGC_METHOD_SELECT 'S'
// to queue up the incoming connections to pair them up together later
typedef struct _socketq {
int sd;
struct _socketq *next;
} socket_queue;
// to hold connection pairs
typedef struct _sock_pair_list {
int sdi; //internal (LL-CC)
int sdx; //external (C/S-CC/LL)
struct _sock_pair_list *next;
struct _sock_pair_list *prev;
} socket_pair_list;
typedef enum { CCNODE, LLNODE, FNODE } node_type;
typedef struct {
char server[MAX_PATH];
char ll_host[MAX_PATH];
unsigned short server_port;
unsigned short ll_port;
unsigned short interval;
unsigned char protocol;
int control_sd; // control connection
socket_queue *socketq; //external (C/S-CC/LL)
} ccnode_type;
typedef struct {
unsigned short port;
unsigned short ll_port;
unsigned short timeout;
unsigned char protocol;
int control_sd; // control connection
socket_queue *socketq; //external (C/S-CC/LL)
} llnode_type;
typedef struct {
char dst_host[MAX_PATH];
unsigned short dst_port;
unsigned short port;
unsigned char src_protocol;
unsigned char dst_protocol;
} fnode_type;
typedef struct {
node_type type;
union {
ccnode_type cc;
llnode_type ll;
fnode_type pf;
} node;
int sdi_accept;
int sdx_accept;
socket_pair_list *pairs;
unsigned char buf[TGC_BUFFER_SIZE];
unsigned char key;
char method;
char filter[MAX_PATH + 1];
} TGC;
typedef struct {
char *name;
char *addr;
struct sockaddr_in *sin;
int sd;
} host_info;
/* OP Codes */
/*
Messege Structure:
0: OP Code (1B)
1: Msg. Len (2B)
2: DATA
*/
/*-----------------------------------------*/
/* Error codes */
#define E_TGC_OK 0
#define E_TGC_NOCANDO -1
#define E_TGC_BADOPCODE -2
#define E_TGC_IE -3
#define E_TGC_READ -4
#define E_TGC_WRITE -5
#define E_TGC_END -6
/* function prototypes */
int tgc_pre_init(TGC *tgc);
int tgc_post_init(TGC *tgc);
void tgc_shutdown(TGC *tgc);
int tgc_run(TGC *tgc);
int tgc_cc(TGC *tgc);
int tgc_ll(TGC *tgc);
int tgc_pf(TGC *tgc);
#endif