From 9f9abf2ea172ebbfe66f0ed2549f6280fecac790 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sun, 19 Nov 2006 01:21:41 +0000 Subject: [PATCH] stackable dialplans git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3412 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/switch_core.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/switch_core.c b/src/switch_core.c index 926d936988..17ac24523b 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -2625,11 +2625,26 @@ static void switch_core_standard_on_ring(switch_core_session_t *session) 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); } else { + char *dp[25]; + int argc, x, count = 0; + if (!switch_strlen_zero(caller_profile->dialplan)) { - dialplan_interface = switch_loadable_module_get_dialplan_interface(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 (!dialplan_interface) { + 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); @@ -2638,12 +2653,9 @@ static void switch_core_standard_on_ring(switch_core_session_t *session) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No Dialplan, Aborting\n"); switch_channel_hangup(session->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); } - } else { - if ((extension = dialplan_interface->hunt_function(session)) != 0) { - switch_channel_set_caller_extension(session->channel, extension); - } } } + } static void switch_core_standard_on_execute(switch_core_session_t *session)