SIP: Fix incoming re-invite
[lcr.git] / route.h
diff --git a/route.h b/route.h
index c4da1b4..ba49f49 100644 (file)
--- a/route.h
+++ b/route.h
@@ -32,19 +32,17 @@ enum { /* how to parse text file during startup */
        COND_TYPE_IP,
        COND_TYPE_CAPABILITY,
        COND_TYPE_BMODE,
+       COND_TYPE_HLC,
        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_CALLERID2,
        MATCH_EXTENSION,
        MATCH_DIALING,
        MATCH_ENBLOCK,
@@ -76,6 +74,12 @@ enum { /* what to check during runtime */
        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 */
@@ -85,21 +89,26 @@ enum { /* how to parse text file during startup */
        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)
-#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)
@@ -117,9 +126,7 @@ enum { /* how to parse text file during startup */
 #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)
@@ -137,11 +144,16 @@ enum { /* how to parse text file during startup */
 #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
-
+#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!!!
@@ -149,37 +161,41 @@ enum { /* how to parse text file during startup */
 #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
+#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 */
@@ -218,40 +234,41 @@ struct route_rule { /* a rule has a list of items and actions */
        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 rule */
+       char                    name[64];               /* name of ruleset */
        struct route_rule       *rule_first;            /* linke to rule list */
 };
 
 struct cond_defs { /* defintion of all conditions */
-       char                    *name;                  /* item's name */
+       const char              *name;                  /* item's name */
        int                     match;                  /* what to check */
        int                     type;                   /* type of value (COND_TYPE) */
-       char                    *doc;                   /* syntax */
-       char                    *help;                  /* short help */
+       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) */
-       char                    *name;                  /* name of parameter */
+       const char              *name;                  /* name of parameter */
        int                     type;                   /* type of value (PARAM_TYPE_*) */
-       char                    *doc;                   /* syntax */
-       char                    *help;                  /* quick help */
+       const char              *doc;                   /* syntax */
+       const char              *help;                  /* quick help */
 };
 
 struct action_defs { /* definition of all actions */
        int                     id;                     /* ID of parameter (just for checking) */
-       char                    *name;
+       const char              *name;
        void                    (EndpointAppPBX::*init_func)(void);
        void                    (EndpointAppPBX::*dialing_func)(void);
        void                    (EndpointAppPBX::*hangup_func)(void);
        unsigned long long       params;
-       char                    *help;
+       const char              *help;
 };
 
 
@@ -263,8 +280,7 @@ 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_remote;
 extern struct route_action     action_vbox;
 extern struct route_action     action_partyline;
 extern struct route_action     action_password;
@@ -278,5 +294,5 @@ 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);
+struct route_ruleset *getrulesetbyname(const char *name);