Fixed parsing capability conditions
[lcr.git] / route.c
diff --git a/route.c b/route.c
index 5b42f58..61a5b60 100644 (file)
--- a/route.c
+++ b/route.c
@@ -251,7 +251,7 @@ struct param_defs param_defs[] = {
 struct action_defs action_defs[] = {
        { ACTION_EXTERNAL,
          "extern",     &EndpointAppPBX::action_init_call, &EndpointAppPBX::action_dialing_external, &EndpointAppPBX::action_hangup_call,
-         PARAM_CONNECT | PARAM_PREFIX | PARAM_COMPLETE | PARAM_TYPE | PARAM_CAPA | PARAM_BMODE | PARAM_INFO1 | PARAM_HLC | PARAM_EXTHLC | PARAM_PRESENT | PARAM_INTERFACES | PARAM_CALLERID | PARAM_CALLERIDTYPE | PARAM_KEYPAD | PARAM_TIMEOUT,
+         PARAM_CONNECT | PARAM_PREFIX | PARAM_COMPLETE | PARAM_TYPE | PARAM_CAPA | PARAM_BMODE | PARAM_INFO1 | PARAM_HLC | PARAM_EXTHLC | PARAM_PRESENT | PARAM_INTERFACES | PARAM_CALLERID | PARAM_CALLERIDTYPE | PARAM_KEYPAD | PARAM_CONTEXT | PARAM_TIMEOUT,
          "Call is routed to extern number as dialed."},
        { ACTION_INTERNAL,
          "intern",     &EndpointAppPBX::action_init_call, &EndpointAppPBX::action_dialing_internal, &EndpointAppPBX::action_hangup_call,
@@ -261,10 +261,6 @@ struct action_defs action_defs[] = {
          "outdial",    &EndpointAppPBX::action_init_call, &EndpointAppPBX::action_dialing_external, &EndpointAppPBX::action_hangup_call,
          PARAM_CONNECT | PARAM_PREFIX | PARAM_COMPLETE | PARAM_TYPE | PARAM_CAPA | PARAM_BMODE | PARAM_INFO1 | PARAM_HLC | PARAM_EXTHLC | PARAM_PRESENT | PARAM_INTERFACES | PARAM_CALLERID | PARAM_CALLERIDTYPE | PARAM_KEYPAD | PARAM_TIMEOUT,
          "Same as 'extern'"},
-       { ACTION_REMOTE,
-         "remote",     &EndpointAppPBX::action_init_remote, &EndpointAppPBX::action_dialing_remote, &EndpointAppPBX::action_hangup_call,
-         PARAM_CONNECT | PARAM_APPLICATION | PARAM_CONTEXT | PARAM_EXTEN | PARAM_TIMEOUT,
-         "Call is routed to Remote application, like Asterisk."},
        { ACTION_VBOX_RECORD,
          "vbox-record",&EndpointAppPBX::action_init_call, &EndpointAppPBX::action_dialing_vbox_record, &EndpointAppPBX::action_hangup_call,
          PARAM_CONNECT | PARAM_EXTENSION | PARAM_ANNOUNCEMENT | PARAM_TIMEOUT,
@@ -1220,19 +1216,25 @@ struct route_ruleset *ruleset_parse(void)
 
                                /* parse service value */
                                case COND_TYPE_CAPABILITY:
-                               if (!strncasecmp("speech", p, 6))
+                               if (!strncasecmp("speech", p, 6)) {
                                        cond->integer_value = INFO_BC_SPEECH;
-                               else if (!strncasecmp("audio", p, 5))
+                                       p += 6;
+                               } else if (!strncasecmp("audio", p, 5)) {
                                        cond->integer_value = INFO_BC_AUDIO;
-                               else if (!strncasecmp("video", p, 5))
+                                       p += 5;
+                               } else if (!strncasecmp("video", p, 5)) {
                                        cond->integer_value = INFO_BC_VIDEO;
-                               else if (!strncasecmp("digital-restricted", p, 18))
+                                       p += 5;
+                               } else if (!strncasecmp("digital-restricted", p, 18)) {
                                        cond->integer_value = INFO_BC_DATARESTRICTED;
-                               else if (!strncasecmp("digital-unrestricted", p, 20))
+                                       p += 18;
+                               } else if (!strncasecmp("digital-unrestricted", p, 20)) {
                                        cond->integer_value = INFO_BC_DATAUNRESTRICTED;
-                               else if (!strncasecmp("digital-unrestricted-tones", p, 26))
+                                       p += 20;
+                               } else if (!strncasecmp("digital-unrestricted-tones", p, 26)) {
                                        cond->integer_value = INFO_BC_DATAUNRESTRICTED_TONES;
-                               else {
+                                       p += 26;
+                               } else {
                                        SPRINT(failure, "Given service type is invalid or misspelled.");
                                        goto parse_error;
                                }
@@ -1241,11 +1243,13 @@ struct route_ruleset *ruleset_parse(void)
 
                                /* parse bmode value */
                                case COND_TYPE_BMODE:
-                               if (!strncasecmp("transparent", p, 11))
+                               if (!strncasecmp("transparent", p, 11)) {
                                        cond->integer_value = INFO_BMODE_CIRCUIT;
-                               else if (!strncasecmp("hdlc", p, 4))
+                                       p += 11;
+                               } else if (!strncasecmp("hdlc", p, 4)) {
                                        cond->integer_value = INFO_BMODE_PACKET;
-                               else {
+                                       p += 4;
+                               } else {
                                        SPRINT(failure, "Given bchannel mode is invalid or misspelled.");
                                        goto parse_error;
                                }
@@ -1254,35 +1258,49 @@ struct route_ruleset *ruleset_parse(void)
 
                                /* parse service value */
                                case COND_TYPE_HLC:
-                               if (!strncasecmp("telephony", p, 9))
+                               if (!strncasecmp("telephony", p, 9)) {
                                        cond->integer_value = INFO_HLC_TELEPHONY;
-                               else if (!strncasecmp("faxg2g3", p, 7))
+                                       p += 9;
+                               } else if (!strncasecmp("faxg2g3", p, 7)) {
                                        cond->integer_value = INFO_HLC_FAXG2G3;
-                               else if (!strncasecmp("faxg4", p, 5))
+                                       p += 7;
+                               } else if (!strncasecmp("faxg4", p, 5)) {
                                        cond->integer_value = INFO_HLC_FAXG4;
-                               else if (!strncasecmp("teletex1", p, 8))
+                                       p += 5;
+                               } else if (!strncasecmp("teletex1", p, 8)) {
                                        cond->integer_value = INFO_HLC_TELETEX1;
-                               else if (!strncasecmp("teletex2", p, 8))
+                                       p += 8;
+                               } else if (!strncasecmp("teletex2", p, 8)) {
                                        cond->integer_value = INFO_HLC_TELETEX2;
-                               else if (!strncasecmp("teletex3", p, 8))
+                                       p += 8;
+                               } else if (!strncasecmp("teletex3", p, 8)) {
                                        cond->integer_value = INFO_HLC_TELETEX3;
-                               else if (!strncasecmp("videotex1", p, 9))
+                                       p += 8;
+                               } else if (!strncasecmp("videotex1", p, 9)) {
                                        cond->integer_value = INFO_HLC_VIDEOTEX1;
-                               else if (!strncasecmp("videotex2", p, 9))
+                                       p += 9;
+                               } else if (!strncasecmp("videotex2", p, 9)) {
                                        cond->integer_value = INFO_HLC_VIDEOTEX2;
-                               else if (!strncasecmp("telex", p, 5))
+                                       p += 9;
+                               } else if (!strncasecmp("telex", p, 5)) {
                                        cond->integer_value = INFO_HLC_TELEX;
-                               else if (!strncasecmp("mhs", p, 3))
+                                       p += 5;
+                               } else if (!strncasecmp("mhs", p, 3)) {
                                        cond->integer_value = INFO_HLC_MHS;
-                               else if (!strncasecmp("osi", p, 3))
+                                       p += 3;
+                               } else if (!strncasecmp("osi", p, 3)) {
                                        cond->integer_value = INFO_HLC_OSI;
-                               else if (!strncasecmp("maintenance", p, 11))
+                                       p += 3;
+                               } else if (!strncasecmp("maintenance", p, 11)) {
                                        cond->integer_value = INFO_HLC_MAINTENANCE;
-                               else if (!strncasecmp("management", p, 10))
+                                       p += 11;
+                               } else if (!strncasecmp("management", p, 10)) {
                                        cond->integer_value = INFO_HLC_MANAGEMENT;
-                               else if (!strncasecmp("audiovisual", p, 11))
+                                       p += 10;
+                               } else if (!strncasecmp("audiovisual", p, 11)) {
                                        cond->integer_value = INFO_HLC_AUDIOVISUAL;
-                               else {
+                                       p += 11;
+                               } else {
                                        SPRINT(failure, "Given HLC type is invalid or misspelled.");
                                        goto parse_error;
                                }
@@ -2409,14 +2427,6 @@ struct route_action action_internal = {
        0,
 };
 
-struct route_action action_remote = {
-       NULL,
-       NULL,
-       ACTION_REMOTE,
-       0,
-       0,
-};
-
 struct route_action action_vbox = {
        NULL,
        NULL,