fix dialplan stack

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3746 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale 2006-12-20 02:49:26 +00:00
parent 5626cdd351
commit ae2aed9dff
4 changed files with 23 additions and 27 deletions

View File

@ -549,11 +549,8 @@ static switch_caller_extension_t *enum_dialplan_hunt(switch_core_session_t *sess
if (extension) { if (extension) {
switch_channel_set_state(channel, CS_EXECUTE); switch_channel_set_state(channel, CS_EXECUTE);
} else {
switch_channel_hangup(channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
} }
return extension; return extension;
} }

View File

@ -150,8 +150,6 @@ static switch_caller_extension_t *directory_dialplan_hunt(switch_core_session_t
if (extension) { if (extension) {
switch_channel_set_state(channel, CS_EXECUTE); switch_channel_set_state(channel, CS_EXECUTE);
} else {
switch_channel_hangup(channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
} }
return extension; return extension;

View 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) { 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_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; 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", context))) {
if (!(xcontext = switch_xml_find_child(cfg, "context", "name", "global"))) { 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_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); switch_xml_free(xml);
return NULL; return NULL;
} }
@ -328,8 +326,6 @@ static switch_caller_extension_t *dialplan_hunt(switch_core_session_t *session)
if (extension) { if (extension) {
switch_channel_set_state(channel, CS_EXECUTE); switch_channel_set_state(channel, CS_EXECUTE);
} else {
switch_channel_hangup(channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
} }
return extension; return extension;

View File

@ -2617,19 +2617,22 @@ static void switch_core_standard_on_ring(switch_core_session_t *session)
{ {
switch_dialplan_interface_t *dialplan_interface = NULL; switch_dialplan_interface_t *dialplan_interface = NULL;
switch_caller_profile_t *caller_profile; 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)); 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) { 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_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't get profile!\n");
switch_channel_hangup(session->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); switch_channel_hangup(session->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
return;
} else { } else {
char *dp[25]; char *dp[25];
char *dpstr;
int argc, x, count = 0; int argc, x, count = 0;
if (!switch_strlen_zero(caller_profile->dialplan)) { if (!switch_strlen_zero(caller_profile->dialplan)) {
argc = switch_separate_string(caller_profile->dialplan, ',', dp, (sizeof(dp) / sizeof(dp[0]))); 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++) { for (x = 0; x < argc; x++) {
if (!(dialplan_interface = switch_loadable_module_get_dialplan_interface(dp[x]))) { if (!(dialplan_interface = switch_loadable_module_get_dialplan_interface(dp[x]))) {
continue; continue;
@ -2639,7 +2642,8 @@ static void switch_core_standard_on_ring(switch_core_session_t *session)
if ((extension = dialplan_interface->hunt_function(session)) != 0) { if ((extension = dialplan_interface->hunt_function(session)) != 0) {
switch_channel_set_caller_extension(session->channel, extension); switch_channel_set_caller_extension(session->channel, extension);
break; return;
}
} }
} }
} }
@ -2649,13 +2653,14 @@ static void switch_core_standard_on_ring(switch_core_session_t *session)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No Dialplan, changing state to HOLD\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No Dialplan, changing state to HOLD\n");
switch_channel_set_state(session->channel, CS_HOLD); switch_channel_set_state(session->channel, CS_HOLD);
return; 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) static void switch_core_standard_on_execute(switch_core_session_t *session)