- ipv6 support (-DUSE_IPV6)
[sip-router] / route_struct.h
1 /*
2  * $Id$
3  *
4  */
5
6 #ifndef route_struct_h
7 #define route_struct_h
8
9 #define EXPR_DROP -127  /* used only by the expression and if evaluator */
10 /*
11  * Other important values (no macros for them yet):
12  * expr true = 1
13  * expr false = 0 (used only inside the expression and if evaluator)
14  * 
15  * action continue  or if used in condition true = 1
16  * action drop/quit/stop script processing = 0
17  * action error or if used in condition false = -1 (<0 and !=EXPR_DROP)
18  * 
19  */
20
21
22 enum { EXP_T=1, ELEM_T };
23 enum { AND_OP=1, OR_OP, NOT_OP };
24 enum { EQUAL_OP=10, MATCH_OP, NO_OP };
25 enum { METHOD_O=1, URI_O, SRCIP_O, DSTIP_O, DEFAULT_O, ACTION_O, NUMBER_O};
26
27 enum { FORWARD_T=1, SEND_T, DROP_T, LOG_T, ERROR_T, ROUTE_T, EXEC_T,
28                 SET_HOST_T, SET_HOSTPORT_T, SET_USER_T, SET_USERPASS_T, 
29                 SET_PORT_T, SET_URI_T, IF_T, MODULE_T,
30                 SETFLAG_T, RESETFLAG_T, ISFLAGSET_T ,
31                 LEN_GT_T, PREFIX_T, STRIP_T };
32 enum { NOSUBTYPE=0, STRING_ST, NET_ST, NUMBER_ST, IP_ST, RE_ST, PROXY_ST,
33                 EXPR_ST, ACTIONS_ST, CMDF_ST, MODFIXUP_ST, URIHOST_ST, URIPORT_ST };
34
35         
36 struct expr{
37         int type; /* exp, exp_elem */
38         int op; /* and, or, not | ==,  =~ */
39         int  subtype;
40         union {
41                 struct expr* expr;
42                 int operand;
43         }l;
44         union {
45                 struct expr* expr;
46                 void* param;
47                 int   intval;
48         }r;
49 };
50
51
52 struct action{
53         int type;  /* forward, drop, log, send ...*/
54         int p1_type;
55         int p2_type;
56         int p3_type;
57         union {
58                 int number;
59                 char* string;
60                 void* data;
61         }p1, p2, p3;
62         struct action* next;
63 };
64
65
66
67 struct expr* mk_exp(int op, struct expr* left, struct expr* right);
68 struct expr* mk_elem(int op, int subtype, int operand, void* param);
69 struct action* mk_action(int type, int p1_type, int p2_type,
70                                                         void* p1, void* p2);
71 struct action* mk_action3(int type, int p1_type, int p2_type, int p3_type, 
72                                                         void* p1, void* p2, void* p3);
73 struct action* append_action(struct action* a, struct action* b);
74
75
76 void print_action(struct action* a);
77 void print_expr(struct expr* exp);
78
79
80
81
82
83 #endif
84