]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix dialplan stack
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 20 Dec 2006 02:49:26 +0000 (02:49 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 20 Dec 2006 02:49:26 +0000 (02:49 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3746 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/applications/mod_enum/mod_enum.c
src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c
src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c
src/switch_core.c

index a954ba212fba36ec4159244daac5287138402f40..9b20625166328e7143594901b67d171b14e0e10b 100644 (file)
@@ -549,11 +549,8 @@ static switch_caller_extension_t *enum_dialplan_hunt(switch_core_session_t *sess
 
        if (extension) {
         switch_channel_set_state(channel, CS_EXECUTE);
-    } else {
-        switch_channel_hangup(channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
     }
 
-
        return extension;
 
 }
index 01f665c1b50a0ad139f818d6c182c6bf8a59adfb..c8bb93ee3fb898cce41354a52601072003815843 100644 (file)
@@ -150,8 +150,6 @@ static switch_caller_extension_t *directory_dialplan_hunt(switch_core_session_t
        
        if (extension) {
                switch_channel_set_state(channel, CS_EXECUTE);
-       } else {
-               switch_channel_hangup(channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
        }
 
        return extension;
index aa508f28af1d9030ac76445e98050129140e99c1..071414400955cea0a45f2db7161326d995dccea7 100644 (file)
@@ -290,7 +290,6 @@ static switch_caller_extension_t *dialplan_hunt(switch_core_session_t *session)
         
        if (switch_xml_locate("dialplan", NULL, NULL, NULL, &xml, &cfg, stream.data) != SWITCH_STATUS_SUCCESS) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of dialplan failed\n");
-               switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
                return NULL;
        }
        
@@ -300,7 +299,6 @@ static switch_caller_extension_t *dialplan_hunt(switch_core_session_t *session)
        if (!(xcontext = switch_xml_find_child(cfg, "context", "name", context))) {
                if (!(xcontext = switch_xml_find_child(cfg, "context", "name", "global"))) {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "context %s not found\n", context);
-                       switch_channel_hangup(channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
                        switch_xml_free(xml);
                        return NULL;
                }
@@ -328,8 +326,6 @@ static switch_caller_extension_t *dialplan_hunt(switch_core_session_t *session)
 
        if (extension) {
                switch_channel_set_state(channel, CS_EXECUTE);
-       } else {
-               switch_channel_hangup(channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
        }
 
        return extension;
index f1d93cded20e588a03a342b1be9d5ec44ac15ae0..a10b9ef5e1b84c7a7ad5038e2912d0320c5a572e 100644 (file)
@@ -2617,45 +2617,50 @@ static void switch_core_standard_on_ring(switch_core_session_t *session)
 {
        switch_dialplan_interface_t *dialplan_interface = NULL;
        switch_caller_profile_t *caller_profile;
-       switch_caller_extension_t *extension;
+       switch_caller_extension_t *extension = NULL;
 
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Standard RING %s\n", switch_channel_get_name(session->channel));
 
        if ((caller_profile = switch_channel_get_caller_profile(session->channel)) == 0) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't get profile!\n");
                switch_channel_hangup(session->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
+        return;
        } else {
                char *dp[25];
+        char *dpstr;
                int argc, x, count = 0;
 
                if (!switch_strlen_zero(caller_profile->dialplan)) {
-                       argc = switch_separate_string(caller_profile->dialplan, ',', dp, (sizeof(dp) / sizeof(dp[0]))); 
-                       for (x = 0; x < argc; x++) {
-                               if (!(dialplan_interface = switch_loadable_module_get_dialplan_interface(dp[x]))) {
-                                       continue;
-                               }
-
-                               count++;
-
-                               if ((extension = dialplan_interface->hunt_function(session)) != 0) {
-                                       switch_channel_set_caller_extension(session->channel, extension);
-                                       break;
-                               }
-                       }
-               }
+            if ((dpstr = switch_core_session_strdup(session, caller_profile->dialplan))) {
+                argc = switch_separate_string(dpstr, ',', dp, (sizeof(dp) / sizeof(dp[0]))); 
+                for (x = 0; x < argc; x++) {
+                    if (!(dialplan_interface = switch_loadable_module_get_dialplan_interface(dp[x]))) {
+                        continue;
+                    }
+
+                    count++;
+
+                    if ((extension = dialplan_interface->hunt_function(session)) != 0) {
+                        switch_channel_set_caller_extension(session->channel, extension);
+                        return;
+                    }
+                }
+            }
+        }
 
                if (!count) {
                        if (switch_channel_test_flag(session->channel, CF_OUTBOUND)) {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No Dialplan, changing state to HOLD\n");
                                switch_channel_set_state(session->channel, CS_HOLD);
                                return;
-                       } else {
-                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No Dialplan, Aborting\n");
-                               switch_channel_hangup(session->channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
-                       }
+                       } 
                }
        }
-       
+
+       if (!extension) {
+        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No Route, Aborting\n");
+        switch_channel_hangup(session->channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
+    }
 }
 
 static void switch_core_standard_on_execute(switch_core_session_t *session)