1 /*****************************************************************************\
5 **---------------------------------------------------------------------------**
6 ** Copyright: Andreas Eversberg **
8 ** match header file **
10 \*****************************************************************************/
13 /* memory structure of rulesets */
15 enum { /* value types */
18 VALUE_TYPE_INTEGER_RANGE,
20 VALUE_TYPE_STRING_RANGE,
23 enum { /* how to parse text file during startup */
39 enum { /* what to check during runtime */
85 enum { /* how to parse text file during startup */
90 PARAM_TYPE_CAPABILITY,
97 PARAM_TYPE_CALLERIDTYPE,
101 enum { /* defines when a statement should be executed */
106 /* parameter ID bits */
107 #define PARAM_PROCEEDING 1LL
108 #define PARAM_ALERTING (1LL<<1)
109 #define PARAM_CONNECT (1LL<<2)
110 #define PARAM_EXTENSION (1LL<<3)
111 #define PARAM_EXTENSIONS (1LL<<4)
112 #define PARAM_PREFIX (1LL<<5)
113 #define PARAM_CAPA (1LL<<6)
114 #define PARAM_BMODE (1LL<<7)
115 #define PARAM_INFO1 (1LL<<8)
116 #define PARAM_HLC (1LL<<9)
117 #define PARAM_EXTHLC (1LL<<10)
118 #define PARAM_PRESENT (1LL<<11)
119 #define PARAM_DIVERSION (1LL<<12)
120 #define PARAM_DEST (1LL<<13)
121 #define PARAM_SELECT (1LL<<14)
122 #define PARAM_DELAY (1LL<<15)
123 #define PARAM_LIMIT (1LL<<16)
124 #define PARAM_HOST (1LL<<17)
125 #define PARAM_PORT (1LL<<18)
126 #define PARAM_INTERFACES (1LL<<19)
127 #define PARAM_ADDRESS (1LL<<20)
128 #define PARAM_SAMPLE (1LL<<21)
129 #define PARAM_ANNOUNCEMENT (1LL<<22)
130 #define PARAM_RULESET (1LL<<23)
131 #define PARAM_CAUSE (1LL<<24)
132 #define PARAM_LOCATION (1LL<<25)
133 #define PARAM_DISPLAY (1LL<<26)
134 #define PARAM_PORTS (1LL<<27)
135 #define PARAM_TPRESET (1LL<<28)
136 #define PARAM_FILE (1LL<<29)
137 #define PARAM_CONTENT (1LL<<30)
138 #define PARAM_APPEND (1LL<<31)
139 #define PARAM_EXECUTE (1LL<<32)
140 #define PARAM_PARAM (1LL<<33)
141 #define PARAM_TYPE (1LL<<34)
142 #define PARAM_COMPLETE (1LL<<35)
143 #define PARAM_CALLERID (1LL<<36)
144 #define PARAM_CALLERIDTYPE (1LL<<37)
145 #define PARAM_CALLTO (1LL<<38)
146 #define PARAM_ROOM (1LL<<39)
147 #define PARAM_JINGLE (1LL<<40)
148 #define PARAM_TIMEOUT (1LL<<41)
149 #define PARAM_NOPASSWORD (1LL<<42)
150 #define PARAM_STRIP (1LL<<43)
151 #define PARAM_APPLICATION (1LL<<44)
152 #define PARAM_CONTEXT (1LL<<45)
153 #define PARAM_EXTEN (1LL<<46)
154 #define PARAM_ON (1LL<<47)
155 #define PARAM_KEYPAD (1LL<<48)
156 #define PARAM_POTS_CALL (1LL<<49)
159 * NOTE: The given index is the actual entry number of action_defs[], so add/remove both lists!!!
161 #define ACTION_EXTERNAL 0
162 #define ACTION_INTERNAL 1
163 #define ACTION_OUTDIAL 2
164 #define ACTION_VBOX_RECORD 3
165 #define ACTION_PARTYLINE 4
166 #define ACTION_LOGIN 5
167 #define ACTION_CALLERID 6
168 #define ACTION_CALLERIDNEXT 7
169 #define ACTION_FORWARD 8
170 #define ACTION_REDIAL 9
171 #define ACTION_REPLY 10
172 #define ACTION_POWERDIAL 11
173 #define ACTION_CALLBACK 12
174 #define ACTION_ABBREV 13
175 #define ACTION_TEST 14
176 #define ACTION_PLAY 15
177 #define ACTION_VBOX_PLAY 16
178 #define ACTION_CALCULATOR 17
179 #define ACTION_TIMER 18
180 #define ACTION_GOTO 19
181 #define ACTION_MENU 20
182 #define ACTION_DISCONNECT 21
183 #define ACTION_RELEASE 22
184 #define ACTION_DEFLECT 23
185 #define ACTION_SETFORWARD 24
186 #define ACTION_EXECUTE 25
187 #define ACTION_FILE 26
188 #define ACTION_PICK 27
189 #define ACTION_PASSWORD 28
190 #define ACTION_PASSWORD_WRITE 29
191 #define ACTION_NOTHING 30
192 #define ACTION_EFI 31
193 #define ACTION_POTS_RETRIEVE 32
194 #define ACTION_POTS_RELEASE 33
195 #define ACTION_POTS_REJECT 34
196 #define ACTION_POTS_ANSWER 35
197 #define ACTION_POTS_3PTY 36
198 #define ACTION_POTS_TRANSFER 37
200 struct route_cond { /* an item */
201 struct route_cond *next; /* next entry */
202 int index; /* index of cond_defs */
203 int match; /* what is matching (MATCH_*) */
204 int value_type; /* type of value (VALUE_TYPE_*) */
205 int value_extension; /* will it be extended? */
206 int integer_value; /* first integer */
207 int integer_value_to; /* second integer */
208 char *string_value; /* first string */
209 char *string_value_to; /* second string */
210 int comp_string; /* compare value of strings */
213 struct route_param { /* a parameter */
214 struct route_param *next; /* next item */
215 int index; /* index of param_defs */
216 unsigned long long id; /* what is it (PARAM_*) */
217 int value_type; /* type of value (VALUE_TYPE_*) */
218 int value_extension; /* will it be extended? */
219 int integer_value; /* integer value */
220 char *string_value; /* string value */
223 struct route_action { /* an action has a list of parameters */
224 struct route_action *next; /* next item */
225 struct route_param *param_first; /* link to parameter list */
226 int index; /* index of action_defs */
227 int timeout; /* timeout value for action (0 = no timeout) */
228 int line; /* line parsed from */
231 struct route_rule { /* a rule has a list of items and actions */
232 struct route_rule *next; /* next item */
233 char file[128]; /* filename */
234 int line; /* line parsed from */
235 struct route_cond *cond_first; /* link to condition list */
236 struct route_action *action_first; /* link to action list */
237 // int temp_couldmatch; /* stores, if the dialing could match. this is used to make a list of rules, that could match */
240 struct route_ruleset { /* the ruleset is a list of rules */
241 struct route_ruleset *next; /* next item */
242 char file[128]; /* filename */
243 int line; /* line parsed from */
244 char name[64]; /* name of ruleset */
245 struct route_rule *rule_first; /* linke to rule list */
248 struct cond_defs { /* defintion of all conditions */
249 const char *name; /* item's name */
250 int match; /* what to check */
251 int type; /* type of value (COND_TYPE) */
252 const char *doc; /* syntax */
253 const char *help; /* short help */
256 struct param_defs { /* definition of all options */
257 unsigned long long id; /* ID of parameter (just for checking) */
258 const char *name; /* name of parameter */
259 int type; /* type of value (PARAM_TYPE_*) */
260 const char *doc; /* syntax */
261 const char *help; /* quick help */
264 struct action_defs { /* definition of all actions */
265 int id; /* ID of parameter (just for checking) */
267 void (EndpointAppPBX::*init_func)(void);
268 void (EndpointAppPBX::*dialing_func)(void);
269 void (EndpointAppPBX::*hangup_func)(void);
270 unsigned long long params;
276 extern struct cond_defs cond_defs[];
277 extern struct param_defs param_defs[];
278 extern struct action_defs action_defs[];
279 extern struct route_ruleset *ruleset_first;
280 extern struct route_ruleset *ruleset_main;
281 extern struct route_action action_external;
282 extern struct route_action action_internal;
283 extern struct route_action action_remote;
284 extern struct route_action action_vbox;
285 extern struct route_action action_partyline;
286 extern struct route_action action_password;
287 extern struct route_action action_password_write;
288 extern struct route_action action_disconnect;
292 void doc_rules(const char *action);
293 void ruleset_free(struct route_ruleset *ruleset_start);
294 void ruleset_debug(struct route_ruleset *ruleset_start);
295 extern char ruleset_error[256];
296 struct route_ruleset *ruleset_parse(void);
297 struct route_ruleset *getrulesetbyname(const char *name);