3ad0c76ae734f1d3780374d0e5016f4903292281
[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                 APPEND_BRANCH_T,
33                 REVERT_URI_T };
34 enum { NOSUBTYPE=0, STRING_ST, NET_ST, NUMBER_ST, IP_ST, RE_ST, PROXY_ST,
35                 EXPR_ST, ACTIONS_ST, CMDF_ST, MODFIXUP_ST, URIHOST_ST, URIPORT_ST,
36                 MYSELF_ST };
37
38         
39 struct expr{
40         int type; /* exp, exp_elem */
41         int op; /* and, or, not | ==,  =~ */
42         int  subtype;
43         union {
44                 struct expr* expr;
45                 int operand;
46         }l;
47         union {
48                 struct expr* expr;
49                 void* param;
50                 int   intval;
51         }r;
52 };
53
54
55 struct action{
56         int type;  /* forward, drop, log, send ...*/
57         int p1_type;
58         int p2_type;
59         int p3_type;
60         union {
61                 int number;
62                 char* string;
63                 void* data;
64         }p1, p2, p3;
65         struct action* next;
66 };
67
68
69
70 struct expr* mk_exp(int op, struct expr* left, struct expr* right);
71 struct expr* mk_elem(int op, int subtype, int operand, void* param);
72 struct action* mk_action(int type, int p1_type, int p2_type,
73                                                         void* p1, void* p2);
74 struct action* mk_action3(int type, int p1_type, int p2_type, int p3_type, 
75                                                         void* p1, void* p2, void* p3);
76 struct action* append_action(struct action* a, struct action* b);
77
78
79 void print_action(struct action* a);
80 void print_expr(struct expr* exp);
81
82
83
84
85
86 #endif
87