00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef route_struct_h
00040 #define route_struct_h
00041
00042 #define EXPR_DROP -127
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 enum { EXP_T=1, ELEM_T };
00056 enum { AND_OP=1, OR_OP, NOT_OP, EVAL_OP, PLUS_OP, MINUS_OP, DIV_OP, MULT_OP, MODULO_OP,
00057 BAND_OP, BOR_OP, BXOR_OP, BNOT_OP, BLSHIFT_OP, BRSHIFT_OP };
00058 enum { EQUAL_OP=20, MATCH_OP, NOTMATCH_OP, MATCHD_OP, NOTMATCHD_OP,
00059 GT_OP, LT_OP, GTE_OP, LTE_OP, DIFF_OP, VALUE_OP, NO_OP };
00060 enum { METHOD_O=1, URI_O, FROM_URI_O, TO_URI_O, SRCIP_O, SRCPORT_O,
00061 DSTIP_O, DSTPORT_O, PROTO_O, AF_O, MSGLEN_O, DEFAULT_O, ACTION_O,
00062 EXPR_O, NUMBER_O, NUMBERV_O, STRINGV_O, RETCODE_O, SCRIPTVAR_O};
00063
00064 enum { FORWARD_T=1, SEND_T, DROP_T, LOG_T, ERROR_T, ROUTE_T, EXEC_T,
00065 SET_HOST_T, SET_HOSTPORT_T, SET_USER_T, SET_USERPASS_T,
00066 SET_PORT_T, SET_HOSTALL_T, SET_URI_T, IF_T, MODULE_T, SET_DEBUG_T,
00067 SETFLAG_T, RESETFLAG_T, ISFLAGSET_T ,
00068 SETSFLAG_T, RESETSFLAG_T, ISSFLAGSET_T ,
00069 SETBFLAG_T, RESETBFLAG_T, ISBFLAGSET_T ,
00070 LEN_GT_T, PREFIX_T, STRIP_T,STRIP_TAIL_T,
00071 APPEND_BRANCH_T,
00072 REVERT_URI_T,
00073 FORCE_RPORT_T,
00074 FORCE_LOCAL_RPORT_T,
00075 SET_ADV_ADDR_T,
00076 SET_ADV_PORT_T,
00077 FORCE_TCP_ALIAS_T,
00078 FORCE_SEND_SOCKET_T,
00079 SERIALIZE_BRANCHES_T,
00080 NEXT_BRANCHES_T,
00081 RETURN_T,
00082 EXIT_T,
00083 SWITCH_T, CASE_T, DEFAULT_T, SBREAK_T,
00084 WHILE_T,
00085 SET_DSTURI_T, RESET_DSTURI_T, ISDSTURISET_T,
00086 EQ_T, COLONEQ_T, PLUSEQ_T, MINUSEQ_T, DIVEQ_T, MULTEQ_T, MODULOEQ_T,
00087 BANDEQ_T, BOREQ_T, BXOREQ_T, USE_BLACKLIST_T, UNUSE_BLACKLIST_T,
00088 SET_TIME_STAMP_T,RESET_TIME_STAMP_T, DIFF_TIME_STAMP_T,
00089 PV_PRINTF_T
00090 };
00091 enum { NOSUBTYPE=0, STRING_ST, NET_ST, NUMBER_ST, IP_ST, RE_ST, PROXY_ST,
00092 EXPR_ST, ACTIONS_ST, CMD_ST, MODFIXUP_ST,
00093 MYSELF_ST, STR_ST, SOCKID_ST, SOCKETINFO_ST, SCRIPTVAR_ST, NULLV_ST,
00094 BLACKLIST_ST, SCRIPTVAR_ELEM_ST};
00095
00096 struct expr;
00097 #include "pvar.h"
00098
00099 typedef struct operand {
00100 int type;
00101 union operand_val {
00102 struct expr* expr;
00103 str s;
00104 int n;
00105 pv_spec_t* spec;
00106 void* data;
00107 } v;
00108 } operand_t, *operand_p;
00109
00110
00111 struct expr{
00112 int type;
00113 int op;
00114 operand_t left;
00115 operand_t right;
00116 };
00117
00118 typedef struct action_elem_ {
00119 int type;
00120 union {
00121 long number;
00122 char* string;
00123 void* data;
00124 str s;
00125 pv_spec_t* item;
00126 } u;
00127 } action_elem_t, *action_elem_p;
00128
00129
00130
00131
00132
00133 #define MAX_ACTION_ELEMS 7
00134 struct action{
00135 int type;
00136 action_elem_t elem[MAX_ACTION_ELEMS];
00137 int line;
00138 struct action* next;
00139 };
00140
00141
00142
00143 struct expr* mk_exp(int op, struct expr* left, struct expr* right);
00144 struct expr* mk_elem(int op, int leftt, void *leftd, int rightt, void *rightd);
00145 struct action* mk_action(int type, int n, action_elem_t *elem, int line);
00146 struct action* append_action(struct action* a, struct action* b);
00147
00148
00149 void print_action(struct action* a);
00150 void print_expr(struct expr* exp);
00151 void print_actions(struct action* a);
00152
00153
00154
00155
00156 #endif
00157