]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-2872
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 1 Dec 2010 19:07:37 +0000 (13:07 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 1 Dec 2010 19:07:47 +0000 (13:07 -0600)
src/switch_ivr_bridge.c

index 4d320d0e5c6181e03043035432ab05eaa9bf54d4..1f9f7acd8f4a3727464b2aac3e5a7956b42a26c0 100644 (file)
@@ -433,19 +433,21 @@ static void *audio_bridge_thread(switch_thread_t *thread, void *obj)
 
                if (ans_a != ans_b) {
                        switch_channel_t *un = ans_a ? chan_b : chan_a;
+                       switch_channel_t *a = un == chan_b ? chan_a : chan_b;
 
-                       if (!switch_channel_test_flag(un, CF_OUTBOUND)) {
-                               switch_channel_pass_callee_id(un == chan_b ? chan_a : chan_b, un);
+                       if ((!switch_channel_test_flag(un, CF_OUTBOUND) && switch_channel_test_flag(a, CF_OUTBOUND)) || (un == chan_a && !originator)) {
+                               switch_channel_pass_callee_id(a, un);
                                if (switch_channel_answer(un) != SWITCH_STATUS_SUCCESS) {
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Media Establishment Failed.\n", switch_channel_get_name(un));
                                        goto end_of_bridge_loop;
                                }
-                       }
 
-                       if (ans_a)
-                               ans_b = 1;
-                       else
-                               ans_a = 1;
+                               if (ans_a) {
+                                       ans_b = 1;
+                               } else {
+                                       ans_a = 1;
+                               }
+                       }
                }
 
                if (originator && !sent_update && ans_a && ans_b && switch_channel_media_ack(chan_a) && switch_channel_media_ack(chan_b)) {