]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-5530
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 21 Jun 2013 02:15:32 +0000 (21:15 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 21 Jun 2013 02:15:32 +0000 (21:15 -0500)
src/switch_ivr_bridge.c

index 583fda498720a9a2e4f3de672fecfbe104bba1ad..7e5991a39608c8129e20fe06519cb519831be664 100644 (file)
@@ -1542,29 +1542,31 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_multi_threaded_bridge(switch_core_ses
                        if (cause && !switch_channel_test_flag(peer_channel, CF_ANSWERED)) {
                                switch_channel_handle_cause(caller_channel, cause);
                        }
-                       
-                       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))) {
-                               transfer_after_bridge(session, var);
-                       } else {
-                               const char *hup = switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE);
-                               int explicit = 0;
-
-                               if (hup) {
-                                       explicit = !strcasecmp(hup, "explicit");
-                               }
 
-                               if (explicit || (switch_channel_test_flag(peer_channel, CF_ANSWERED) && switch_true(hup))) {
-                                       switch_call_cause_t cause = switch_channel_get_cause(peer_channel);
-                                       if (cause == SWITCH_CAUSE_NONE) {
-                                               cause = SWITCH_CAUSE_NORMAL_CLEARING;
+                       if (!switch_channel_test_flag(caller_channel, CF_TRANSFER)) {
+                               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))) {
+                                       transfer_after_bridge(session, var);
+                               } else {
+                                       const char *hup = switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE);
+                                       int explicit = 0;
+                                       
+                                       if (hup) {
+                                               explicit = !strcasecmp(hup, "explicit");
                                        }
                                        
-                                       if (switch_channel_test_flag(peer_channel, CF_INTERCEPTED)) {
-                                               switch_channel_set_flag(peer_channel, CF_INTERCEPT);
+                                       if (explicit || (switch_channel_test_flag(peer_channel, CF_ANSWERED) && switch_true(hup))) {
+                                               switch_call_cause_t cause = switch_channel_get_cause(peer_channel);
+                                               if (cause == SWITCH_CAUSE_NONE) {
+                                                       cause = SWITCH_CAUSE_NORMAL_CLEARING;
+                                               }
+                                               
+                                               if (switch_channel_test_flag(peer_channel, CF_INTERCEPTED)) {
+                                                       switch_channel_set_flag(peer_channel, CF_INTERCEPT);
+                                               }
+                                               switch_channel_hangup(caller_channel, cause);
                                        }
-                                       switch_channel_hangup(caller_channel, cause);
                                }
                        }
                }