[Freeswitch-svn] [commit] r3412 - freeswitch/trunk/src

Freeswitch SVN anthm at freeswitch.org
Sat Nov 18 20:21:41 EST 2006


Author: anthm
Date: Sat Nov 18 20:21:41 2006
New Revision: 3412

Modified:
   freeswitch/trunk/src/switch_core.c

Log:
stackable dialplans

Modified: freeswitch/trunk/src/switch_core.c
==============================================================================
--- freeswitch/trunk/src/switch_core.c	(original)
+++ freeswitch/trunk/src/switch_core.c	Sat Nov 18 20:21:41 2006
@@ -2625,11 +2625,26 @@
 		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 @@
 				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)



More information about the Freeswitch-svn mailing list