- started to build the expresion & acion tree/list
[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 };
13
14 enum { FORWARD_T=1, SEND_T, DROP_T, LOG_T, ERROR_T};
15 enum { NOSUBTYPE=0, STRING_ST, NET_ST, NUMBER_ST, IP_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         }r;
30 };
31
32
33 struct action{
34         int type;  /* forward, drop, log, send ...*/
35         int p1_type;
36         int p2_type;
37         union {
38                 int number;
39                 char* string;
40                 void* data;
41         }p1, p2;
42         struct action* next;
43 };
44
45 struct expr* mk_exp(int op, struct expr* left, struct expr* right);
46 struct expr* mk_elem(int op, int subtype, int operand, void* param);
47 struct action* mk_action(int type, int p1_type, int p2_type, void* p1, void* p2);
48
49 void print_action(struct action* a);
50 void print_expr(struct expr* exp);
51
52
53
54
55
56 #endif
57