]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3634 the call is not bridged yet so we need to take more action, try this patch
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 2 Nov 2011 13:54:03 +0000 (08:54 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 2 Nov 2011 13:54:03 +0000 (08:54 -0500)
src/include/switch_types.h
src/switch_ivr_bridge.c
src/switch_ivr_originate.c

index e86ca9ece4f66078919723e5a0bd1a59e1e1cf23..f879783f385fd1ec98114a35ead293cdba834935 100644 (file)
@@ -1190,6 +1190,7 @@ typedef enum {
        CF_SIMPLIFY,
        CF_ZOMBIE_EXEC,
        CF_INTERCEPT,
+       CF_INTERCEPTED,
        /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
        /* IF YOU ADD NEW ONES CHECK IF THEY SHOULD PERSIST OR ZERO THEM IN switch_core_session.c switch_core_session_request_xml() */
        CF_FLAG_MAX
index 2342c38c812437f688fa51365e45ff338c12f79a..755bf326a1cc352e5d5f80262535dd4e8012053c 100644 (file)
@@ -1640,6 +1640,7 @@ SWITCH_DECLARE(void) switch_ivr_intercept_session(switch_core_session_t *session
                switch_channel_set_state(bchannel, CS_PARK);
        }
 
+       switch_channel_set_flag(channel, CF_INTERCEPTED);
        switch_ivr_uuid_bridge(switch_core_session_get_uuid(session), uuid);
        switch_core_session_rwunlock(rsession);
 
index 4e6258ce8fe46727287ae98a137e34047eba44f3..c6ba313c841f0b1e526f48badc1175a0996ec435 100644 (file)
@@ -3310,6 +3310,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                                        switch_channel_set_variable(caller_channel, buf, buf2);
                                }
 
+                               if (caller_channel && switch_channel_test_flag(caller_channel, CF_INTERCEPTED)) {
+                                       *cause = SWITCH_CAUSE_PICKED_OFF;
+                               }
+
                                if (!*cause) {
                                        if (reason) {
                                                *cause = reason;
@@ -3419,6 +3423,9 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                                        if (!(state == CS_RESET || switch_channel_test_flag(originate_status[i].peer_channel, CF_TRANSFER) ||
                                                  switch_channel_test_flag(originate_status[i].peer_channel, CF_REDIRECT) ||
                                                  switch_channel_test_flag(originate_status[i].peer_channel, CF_BRIDGED))) {
+                                               if (caller_channel && switch_channel_test_flag(caller_channel, CF_INTERCEPTED)) {
+                                                       switch_channel_set_flag(originate_status[i].peer_channel, CF_INTERCEPT);
+                                               }
                                                switch_channel_hangup(originate_status[i].peer_channel, *cause);
                                        }
                                }