X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=route.h;fp=route.h;h=c4da1b4fda45e6d38b45ddfe694f91f5a1b11d73;hp=0000000000000000000000000000000000000000;hb=2ed0fee489c37a6e2d4473f6185ebbe3e746ac11;hpb=1bf9bb306b9b92b50e56a2dcce131eb5e82e667a diff --git a/route.h b/route.h new file mode 100644 index 0000000..c4da1b4 --- /dev/null +++ b/route.h @@ -0,0 +1,282 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** match header file ** +** ** +\*****************************************************************************/ + + +/* memory structure of rulesets */ + +enum { /* value types */ + VALUE_TYPE_NULL, + VALUE_TYPE_INTEGER, + VALUE_TYPE_INTEGER_RANGE, + VALUE_TYPE_STRING, + VALUE_TYPE_STRING_RANGE, +}; + +enum { /* how to parse text file during startup */ + COND_TYPE_NULL, + COND_TYPE_INTEGER, + COND_TYPE_TIME, + COND_TYPE_MDAY, + COND_TYPE_MONTH, + COND_TYPE_WDAY, + COND_TYPE_YEAR, + COND_TYPE_STRING, + COND_TYPE_IP, + COND_TYPE_CAPABILITY, + COND_TYPE_BMODE, + COND_TYPE_IFATTR, +}; + +enum { /* what to check during runtime */ +#ifdef PBX + MATCH_EXTERN, + MATCH_INTERN, +#endif + MATCH_H323, +// MATCH_IP, + MATCH_PORT, + MATCH_INTERFACE, + MATCH_CALLERID, + MATCH_EXTENSION, + MATCH_DIALING, + MATCH_ENBLOCK, + MATCH_OVERLAP, + MATCH_ANONYMOUS, + MATCH_VISIBLE, + MATCH_UNKNOWN, + MATCH_AVAILABLE, + MATCH_FAKE, + MATCH_REAL, + MATCH_REDIRECTED, + MATCH_DIRECT, + MATCH_REDIRID, + MATCH_TIME, + MATCH_MDAY, + MATCH_MONTH, + MATCH_YEAR, + MATCH_WDAY, + MATCH_CAPABILITY, + MATCH_INFOLAYER1, + MATCH_HLC, + MATCH_FILE, + MATCH_EXECUTE, + MATCH_DEFAULT, + MATCH_TIMEOUT, + MATCH_FREE, + MATCH_NOTFREE, + MATCH_DOWN, + MATCH_UP, + MATCH_BUSY, + MATCH_IDLE, +}; + +enum { /* how to parse text file during startup */ + PARAM_TYPE_NULL, + PARAM_TYPE_INTEGER, + PARAM_TYPE_STRING, + PARAM_TYPE_YESNO, + PARAM_TYPE_CAPABILITY, + PARAM_TYPE_BMODE, + PARAM_TYPE_DIVERSION, + PARAM_TYPE_DESTIN, + PARAM_TYPE_PORTS, + PARAM_TYPE_TYPE, + PARAM_TYPE_CALLERIDTYPE, +}; + +/* parameter ID bits */ +#define PARAM_PROCEEDING 1LL +#define PARAM_ALERTING (1LL<<1) +#define PARAM_CONNECT (1LL<<2) +#ifdef PBX +#define PARAM_EXTENSION (1LL<<3) +#define PARAM_EXTENSIONS (1LL<<4) +#endif +#define PARAM_PREFIX (1LL<<5) +#define PARAM_CAPA (1LL<<6) +#define PARAM_BMODE (1LL<<7) +#define PARAM_INFO1 (1LL<<8) +#define PARAM_HLC (1LL<<9) +#define PARAM_EXTHLC (1LL<<10) +#define PARAM_PRESENT (1LL<<11) +#define PARAM_DIVERSION (1LL<<12) +#define PARAM_DEST (1LL<<13) +#define PARAM_SELECT (1LL<<14) +#define PARAM_DELAY (1LL<<15) +#define PARAM_LIMIT (1LL<<16) +#define PARAM_HOST (1LL<<17) +#define PARAM_PORT (1LL<<18) +#define PARAM_INTERFACES (1LL<<19) +#define PARAM_ADDRESS (1LL<<20) +#define PARAM_SAMPLE (1LL<<21) +#ifdef PBX +#define PARAM_ANNOUNCEMENT (1LL<<22) +#endif +#define PARAM_RULESET (1LL<<23) +#define PARAM_CAUSE (1LL<<24) +#define PARAM_LOCATION (1LL<<25) +#define PARAM_DISPLAY (1LL<<26) +#define PARAM_PORTS (1LL<<27) +#define PARAM_TPRESET (1LL<<28) +#define PARAM_FILE (1LL<<29) +#define PARAM_CONTENT (1LL<<30) +#define PARAM_APPEND (1LL<<31) +#define PARAM_EXECUTE (1LL<<32) +#define PARAM_PARAM (1LL<<33) +#define PARAM_TYPE (1LL<<34) +#define PARAM_COMPLETE (1LL<<35) +#define PARAM_CALLERID (1LL<<36) +#define PARAM_CALLERIDTYPE (1LL<<37) +#define PARAM_CALLTO (1LL<<38) +#define PARAM_ROOM (1LL<<39) +#define PARAM_TIMEOUT (1LL<<40) +#ifdef PBX +#define PARAM_NOPASSWORD (1LL<<41) +#endif + + +/* action index + * NOTE: The given index is the actual entry number of action_defs[], so add/remove both lists!!! + */ +#define ACTION_EXTERNAL 0 +#define ACTION_INTERNAL 1 +#define ACTION_OUTDIAL 2 +#define ACTION_H323 3 +#define ACTION_CHAN 4 +#define ACTION_VBOX_RECORD 5 +#define ACTION_PARTYLINE 6 +#define ACTION_LOGIN 7 +#define ACTION_CALLERID 8 +#define ACTION_CALLERIDNEXT 9 +#define ACTION_FORWARD 10 +#define ACTION_REDIAL 11 +#define ACTION_REPLY 12 +#define ACTION_POWERDIAL 13 +#define ACTION_CALLBACK 14 +#define ACTION_ABBREV 15 +#define ACTION_TEST 16 +#define ACTION_PLAY 17 +#define ACTION_VBOX_PLAY 18 +#define ACTION_CALCULATOR 19 +#define ACTION_TIMER 20 +#define ACTION_GOTO 21 +#define ACTION_MENU 22 +#define ACTION_DISCONNECT 23 +#define ACTION_HELP 24 +#define ACTION_DEFLECT 25 +#define ACTION_SETFORWARD 26 +#define ACTION_EXECUTE 27 +#define ACTION_FILE 28 +#define ACTION_PICK 29 +#define ACTION_PASSWORD 30 +#define ACTION_PASSWORD_WRITE 31 +#define ACTION_NOTHING 32 +#define ACTION_EFI 33 + +struct route_cond { /* an item */ + struct route_cond *next; /* next entry */ + int index; /* index of cond_defs */ + int match; /* what is matching (MATCH_*) */ + int value_type; /* type of value (VALUE_TYPE_*) */ + int value_extension; /* will it be extended? */ + int integer_value; /* first integer */ + int integer_value_to; /* second integer */ + char *string_value; /* first string */ + char *string_value_to; /* second string */ + int comp_string; /* compare value of strings */ +}; + +struct route_param { /* a parameter */ + struct route_param *next; /* next item */ + int index; /* index of param_defs */ + unsigned long long id; /* what is it (PARAM_*) */ + int value_type; /* type of value (VALUE_TYPE_*) */ + int value_extension; /* will it be extended? */ + int integer_value; /* integer value */ + char *string_value; /* string value */ +}; + +struct route_action { /* an action has a list of parameters */ + struct route_action *next; /* next item */ + struct route_param *param_first; /* link to parameter list */ + int index; /* index of action_defs */ + int timeout; /* timeout value for action (0 = no timeout) */ + int line; /* line parsed from */ +}; + +struct route_rule { /* a rule has a list of items and actions */ + struct route_rule *next; /* next item */ + char file[128]; /* filename */ + int line; /* line parsed from */ + struct route_cond *cond_first; /* link to condition list */ + struct route_action *action_first; /* link to action list */ +}; + +struct route_ruleset { /* the ruleset is a list of rules */ + struct route_ruleset *next; /* next item */ + char file[128]; /* filename */ + int line; /* line parsed from */ + char name[64]; /* name of rule */ + struct route_rule *rule_first; /* linke to rule list */ +}; + +struct cond_defs { /* defintion of all conditions */ + char *name; /* item's name */ + int match; /* what to check */ + int type; /* type of value (COND_TYPE) */ + char *doc; /* syntax */ + char *help; /* short help */ +}; + +struct param_defs { /* definition of all options */ + unsigned long long id; /* ID of parameter (just for checking) */ + char *name; /* name of parameter */ + int type; /* type of value (PARAM_TYPE_*) */ + char *doc; /* syntax */ + char *help; /* quick help */ +}; + +struct action_defs { /* definition of all actions */ + int id; /* ID of parameter (just for checking) */ + char *name; + void (EndpointAppPBX::*init_func)(void); + void (EndpointAppPBX::*dialing_func)(void); + void (EndpointAppPBX::*hangup_func)(void); + unsigned long long params; + char *help; +}; + + + +extern struct cond_defs cond_defs[]; +extern struct param_defs param_defs[]; +extern struct action_defs action_defs[]; +extern struct route_ruleset *ruleset_first; +extern struct route_ruleset *ruleset_main; +extern struct route_action action_external; +extern struct route_action action_internal; +extern struct route_action action_h323; +extern struct route_action action_chan; +extern struct route_action action_vbox; +extern struct route_action action_partyline; +extern struct route_action action_password; +extern struct route_action action_password_write; +extern struct route_action action_disconnect; + +/* functions */ + +void doc_rules(const char *action); +void ruleset_free(struct route_ruleset *ruleset_start); +void ruleset_debug(struct route_ruleset *ruleset_start); +extern char ruleset_error[256]; +struct route_ruleset *ruleset_parse(void); +struct route_ruleset *getrulesetbyname(char *name); +