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

Freeswitch SVN anthm at freeswitch.org
Fri Dec 7 11:14:10 EST 2007


Author: anthm
Date: Fri Dec  7 11:14:09 2007
New Revision: 6566

Modified:
   freeswitch/trunk/src/switch_ivr_bridge.c

Log:
don't hangup when transfering

Modified: freeswitch/trunk/src/switch_ivr_bridge.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_bridge.c	(original)
+++ freeswitch/trunk/src/switch_ivr_bridge.c	Fri Dec  7 11:14:09 2007
@@ -464,13 +464,14 @@
 		switch_channel_set_variable(channel, SWITCH_BRIDGE_VARIABLE, NULL);
 		switch_channel_set_variable(other_channel, SWITCH_BRIDGE_VARIABLE, NULL);
 
-		if (switch_channel_test_flag(other_channel, CF_ANSWERED) && 
-			switch_channel_get_state(other_channel) < CS_HANGUP &&
-			!switch_channel_test_flag(other_channel, CF_TRANSFER) &&
-			switch_true(switch_channel_get_variable(other_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) {
-			switch_channel_hangup(other_channel, switch_channel_get_cause(channel));
-		} else {
-			switch_channel_set_state(other_channel, CS_EXECUTE);
+		if (!switch_channel_test_flag(other_channel, CF_TRANSFER)) {
+			if (switch_channel_test_flag(other_channel, CF_ANSWERED) && 
+				switch_channel_get_state(other_channel) < CS_HANGUP &&
+				switch_true(switch_channel_get_variable(other_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) {
+				switch_channel_hangup(other_channel, switch_channel_get_cause(channel));
+			} else {
+				switch_channel_set_state(other_channel, CS_EXECUTE);
+			}
 		}
 		switch_core_session_rwunlock(other_session);
 	}
@@ -684,11 +685,12 @@
 
   done:
 
-	if (switch_channel_test_flag(peer_channel, CF_ANSWERED) && 
-		switch_channel_get_state(caller_channel) < CS_HANGUP && 
-		!switch_channel_test_flag(caller_channel, CF_TRANSFER) &&
-		switch_true(switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) {
-		switch_channel_hangup(caller_channel, switch_channel_get_cause(peer_channel));
+	if (!switch_channel_test_flag(caller_channel, CF_TRANSFER)) {
+		if (switch_channel_test_flag(peer_channel, CF_ANSWERED) && 
+			switch_channel_get_state(caller_channel) < CS_HANGUP && 
+			switch_true(switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) {
+			switch_channel_hangup(caller_channel, switch_channel_get_cause(peer_channel));
+		}
 	}
 
 	return status;



More information about the Freeswitch-svn mailing list