lcr/route.h

299 lines
8.6 KiB
C

/*****************************************************************************\
** **
** 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_HLC,
COND_TYPE_IFATTR,
};
enum { /* what to check during runtime */
MATCH_EXTERN,
MATCH_INTERN,
MATCH_PORT,
MATCH_INTERFACE,
MATCH_CALLERID,
MATCH_CALLERID2,
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,
MATCH_REMOTE,
MATCH_NOTREMOTE,
MATCH_POTS_FLASH,
MATCH_POTS_CW,
MATCH_POTS_CALLS,
MATCH_POTS_LAST,
};
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_HLC,
PARAM_TYPE_DIVERSION,
PARAM_TYPE_DESTIN,
PARAM_TYPE_PORTS,
PARAM_TYPE_TYPE,
PARAM_TYPE_CALLERIDTYPE,
PARAM_TYPE_ON,
};
enum { /* defines when a statement should be executed */
INFO_ON_INIT,
INFO_ON_HANGUP,
};
/* parameter ID bits */
#define PARAM_PROCEEDING 1LL
#define PARAM_ALERTING (1LL<<1)
#define PARAM_CONNECT (1LL<<2)
#define PARAM_EXTENSION (1LL<<3)
#define PARAM_EXTENSIONS (1LL<<4)
#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)
#define PARAM_ANNOUNCEMENT (1LL<<22)
#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_JINGLE (1LL<<40)
#define PARAM_TIMEOUT (1LL<<41)
#define PARAM_NOPASSWORD (1LL<<42)
#define PARAM_STRIP (1LL<<43)
#define PARAM_APPLICATION (1LL<<44)
#define PARAM_CONTEXT (1LL<<45)
#define PARAM_EXTEN (1LL<<46)
#define PARAM_ON (1LL<<47)
#define PARAM_KEYPAD (1LL<<48)
#define PARAM_POTS_CALL (1LL<<49)
/* 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_VBOX_RECORD 3
#define ACTION_PARTYLINE 4
#define ACTION_LOGIN 5
#define ACTION_CALLERID 6
#define ACTION_CALLERIDNEXT 7
#define ACTION_FORWARD 8
#define ACTION_REDIAL 9
#define ACTION_REPLY 10
#define ACTION_POWERDIAL 11
#define ACTION_CALLBACK 12
#define ACTION_ABBREV 13
#define ACTION_TEST 14
#define ACTION_PLAY 15
#define ACTION_VBOX_PLAY 16
#define ACTION_CALCULATOR 17
#define ACTION_TIMER 18
#define ACTION_GOTO 19
#define ACTION_MENU 20
#define ACTION_DISCONNECT 21
#define ACTION_RELEASE 22
#define ACTION_DEFLECT 23
#define ACTION_SETFORWARD 24
#define ACTION_EXECUTE 25
#define ACTION_FILE 26
#define ACTION_PICK 27
#define ACTION_PASSWORD 28
#define ACTION_PASSWORD_WRITE 29
#define ACTION_NOTHING 30
#define ACTION_EFI 31
#define ACTION_POTS_RETRIEVE 32
#define ACTION_POTS_RELEASE 33
#define ACTION_POTS_REJECT 34
#define ACTION_POTS_ANSWER 35
#define ACTION_POTS_3PTY 36
#define ACTION_POTS_TRANSFER 37
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 */
// int temp_couldmatch; /* stores, if the dialing could match. this is used to make a list of rules, that could match */
};
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 ruleset */
struct route_rule *rule_first; /* linke to rule list */
};
struct cond_defs { /* defintion of all conditions */
const char *name; /* item's name */
int match; /* what to check */
int type; /* type of value (COND_TYPE) */
const char *doc; /* syntax */
const char *help; /* short help */
};
struct param_defs { /* definition of all options */
unsigned long long id; /* ID of parameter (just for checking) */
const char *name; /* name of parameter */
int type; /* type of value (PARAM_TYPE_*) */
const char *doc; /* syntax */
const char *help; /* quick help */
};
struct action_defs { /* definition of all actions */
int id; /* ID of parameter (just for checking) */
const char *name;
void (EndpointAppPBX::*init_func)(void);
void (EndpointAppPBX::*dialing_func)(void);
void (EndpointAppPBX::*hangup_func)(void);
unsigned long long params;
const 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_remote;
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(const char *name);