summaryrefslogtreecommitdiffstats
path: root/route.h
diff options
context:
space:
mode:
authorSuper User2007-05-06 15:54:52 +0200
committerSuper User2007-05-06 15:54:52 +0200
commit2ed0fee489c37a6e2d4473f6185ebbe3e746ac11 (patch)
treefcf232bc282c083404cfde0ce5b04236fe202c3e /route.h
parentfirst commit (diff)
downloadlcr-2ed0fee489c37a6e2d4473f6185ebbe3e746ac11.tar.gz
lcr-2ed0fee489c37a6e2d4473f6185ebbe3e746ac11.tar.xz
lcr-2ed0fee489c37a6e2d4473f6185ebbe3e746ac11.zip
only for backup, still in coding state - no compile!!!
Diffstat (limited to 'route.h')
-rw-r--r--route.h282
1 files changed, 282 insertions, 0 deletions
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);
+