Revision
15372
Author
anthm
Date
2009-11-05 07:41:11 -0600 (Thu, 05 Nov 2009)

Log Message

decided to do this differently i think it was slightly wrong

Modified Paths

Diff

Modified: freeswitch/trunk/src/include/switch_types.h (15371 => 15372)


--- freeswitch/trunk/src/include/switch_types.h	2009-11-05 08:00:48 UTC (rev 15371)
+++ freeswitch/trunk/src/include/switch_types.h	2009-11-05 13:41:11 UTC (rev 15372)
@@ -929,7 +929,6 @@
 	CF_NOT_READY,
 	CF_SIGNAL_BRIDGE_TTL,
 	CF_MEDIA_BRIDGE_TTL,
-	CF_HANGUP_AFTER_BRIDGE,
 	/* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
 	CF_FLAG_MAX
 } switch_channel_flag_t;

Modified: freeswitch/trunk/src/switch_ivr_bridge.c (15371 => 15372)


--- freeswitch/trunk/src/switch_ivr_bridge.c	2009-11-05 08:00:48 UTC (rev 15371)
+++ freeswitch/trunk/src/switch_ivr_bridge.c	2009-11-05 13:41:11 UTC (rev 15372)
@@ -793,10 +793,6 @@
             switch_channel_set_variable(other_channel, SWITCH_BRIDGE_VARIABLE, NULL);
 			
             if (switch_channel_up(other_channel)) {
-				if (switch_channel_test_flag(other_channel, CF_HANGUP_AFTER_BRIDGE)) {
-					switch_channel_hangup(other_channel, switch_channel_get_cause(channel));	
-				}
-
 				if (switch_true(switch_channel_get_variable(other_channel, SWITCH_PARK_AFTER_BRIDGE_VARIABLE))) {
 					switch_ivr_park_session(other_session);
 				} else if ((var = switch_channel_get_variable(other_channel, SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE))) {
@@ -1127,10 +1123,6 @@
 		if ((state != CS_EXECUTE && state != CS_SOFT_EXECUTE && state != CS_PARK && state != CS_ROUTING) ||
 			(switch_channel_test_flag(peer_channel, CF_ANSWERED) && state < CS_HANGUP)) {
 
-			if (switch_channel_test_flag(caller_channel, CF_HANGUP_AFTER_BRIDGE)) {
-				switch_channel_hangup(caller_channel, switch_channel_get_cause(peer_channel));	
-			}
-
 			if (switch_true(switch_channel_get_variable(caller_channel, SWITCH_PARK_AFTER_BRIDGE_VARIABLE))) {
 				switch_ivr_park_session(session);
 			} else if ((var = switch_channel_get_variable(caller_channel, SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE))) {

Modified: freeswitch/trunk/src/switch_ivr_originate.c (15371 => 15372)


--- freeswitch/trunk/src/switch_ivr_originate.c	2009-11-05 08:00:48 UTC (rev 15371)
+++ freeswitch/trunk/src/switch_ivr_originate.c	2009-11-05 13:41:11 UTC (rev 15372)
@@ -2340,7 +2340,7 @@
 						force_reason = SWITCH_CAUSE_ATTENDED_TRANSFER;
 
 						if ((holding_session = switch_core_session_locate(holding))) {
-							switch_channel_set_flag(switch_core_session_get_channel(holding_session), CF_HANGUP_AFTER_BRIDGE);
+							switch_channel_set_variable(switch_core_session_get_channel(holding_session), SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE, "true");
 							switch_core_session_rwunlock(holding_session);
 						}
 						
@@ -2361,6 +2361,7 @@
 							switch_channel_t *holding_channel = switch_core_session_get_channel(holding_session);
 
 							if (caller_channel && switch_channel_ready(caller_channel)) {
+								switch_channel_set_variable(holding_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE, "true");
 								switch_ivr_uuid_bridge(holding, switch_core_session_get_uuid(session));
 								holding = NULL;
 							} else {
@@ -2403,7 +2404,15 @@
                         }
 						
 						if (holding && oglobals.idx != IDX_TIMEOUT && oglobals.idx != IDX_KEY_CANCEL) {
+							switch_core_session_t *holding_session;
+
+							if ((holding_session = switch_core_session_locate(holding))) {
+								switch_channel_set_variable(switch_core_session_get_channel(holding_session), SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE, "true");
+								switch_core_session_rwunlock(holding_session);
+							}
+							
                             switch_ivr_uuid_bridge(holding, switch_core_session_get_uuid(originate_status[i].peer_session));
+							holding = NULL;
                         } else {
 							switch_channel_hangup(originate_status[i].peer_channel, reason);
 						}