- still to do action,c
[sip-router] / route_struct.h
1 /*
2  * $Id$
3  *
4  */
5
6 #ifndef route_struct_h
7 #define route_struct_h
8
9 enum { EXP_T=1, ELEM_T };
10 enum { AND_OP=1, OR_OP, NOT_OP };
11 enum { EQUAL_OP=10, MATCH_OP };
12 enum { METHOD_O=1, URI_O, SRCIP_O, DSTIP_O, DEFAULT_O };
13
14 enum { FORWARD_T=1, SEND_T, DROP_T, LOG_T, ERROR_T, ROUTE_T, EXEC_T};
15 enum { NOSUBTYPE=0, STRING_ST, NET_ST, NUMBER_ST, IP_ST, RE_ST, PROXY_ST };
16
17         
18 struct expr{
19         int type; /* exp, exp_elem */
20         int op; /* and, or, not | ==,  ~= */
21         int  subtype;
22         union {
23                 struct expr* expr;
24                 int operand;
25         }l;
26         union {
27                 struct expr* expr;
28                 void* param;
29                 int   intval;
30         }r;
31 };
32
33
34 struct action{
35         int type;  /* forward, drop, log, send ...*/
36         int p1_type;
37         int p2_type;
38         union {
39                 int number;
40                 char* string;
41                 void* data;
42         }p1, p2;
43         struct action* next;
44 };
45
46
47 struct net{
48         unsigned long ip;
49         unsigned long mask;
50 };
51
52 struct expr* mk_exp(int op, struct expr* left, struct expr* right);
53 struct expr* mk_elem(int op, int subtype, int operand, void* param);
54 struct action* mk_action(int type, int p1_type, int p2_type, void* p1, void* p2);
55 struct action* append_action(struct action* a, struct action* b);
56
57
58 struct net* mk_net(unsigned long ip, unsigned long mask);
59
60 void print_action(struct action* a);
61 void print_expr(struct expr* exp);
62
63
64
65
66
67 #endif
68