From 5b6a60e1d034ea34b0a16c2f1e33682607cae733 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Thu, 24 Jul 2008 16:48:09 +0000 Subject: [PATCH] port r9170 git-svn-id: http://svn.freeswitch.org/svn/freeswitch/tags/1.0.1@9171 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- configure.in | 2 +- src/mod/endpoints/mod_sofia/sofia.c | 17 ++++++++--------- src/switch_ivr_bridge.c | 16 +++++++++++++++- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/configure.in b/configure.in index 12cde113b3..ac6b682acd 100644 --- a/configure.in +++ b/configure.in @@ -7,7 +7,7 @@ AC_INIT([freeswitch], [1.0.1], BUG-REPORT-ADDRESS) AC_SUBST(SWITCH_VERSION_MAJOR, [1]) AC_SUBST(SWITCH_VERSION_MINOR, [0]) AC_SUBST(SWITCH_VERSION_MICRO, [1]) -AC_SUBST(SWITCH_VERSION_REVISION, [9168]) +AC_SUBST(SWITCH_VERSION_REVISION, [9171]) AC_SUBST(SOUNDS_VERSION, [1.0.2]) AC_CONFIG_FILES([src/include/switch_version.h.in:src/include/switch_version.h.template]) diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index a13efae686..093fd5f49b 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -1956,6 +1956,14 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status switch_channel_clear_flag(channel, CF_REQ_MEDIA); + if ((status == 180 || status == 183 || status == 200)) { + if (sip->sip_user_agent && sip->sip_user_agent->g_string) { + switch_channel_set_variable(channel, "sip_user_agent", sip->sip_user_agent->g_string); + } else if (sip->sip_server && sip->sip_server->g_string) { + switch_channel_set_variable(channel, "sip_user_agent", sip->sip_server->g_string); + } + } + if (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) { if (!switch_test_flag(tech_pvt, TFLAG_SENT_UPDATE)) { @@ -2137,14 +2145,6 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status, status = 180; } - if (sip && channel && (status == 180 || status == 183 || status == 200) && switch_channel_test_flag(channel, CF_OUTBOUND)) { - if (sip->sip_user_agent && sip->sip_user_agent->g_string) { - switch_channel_set_variable(channel, "sip_user_agent", sip->sip_user_agent->g_string); - } else if (sip->sip_server && sip->sip_server->g_string) { - switch_channel_set_variable(channel, "sip_user_agent", sip->sip_server->g_string); - } - } - if (channel && (status == 180 || status == 183) && switch_channel_test_flag(channel, CF_OUTBOUND)) { const char *val; if ((val = switch_channel_get_variable(channel, "sip_auto_answer")) && switch_true(val)) { @@ -3686,7 +3686,6 @@ static void sofia_info_send_sipfrag(switch_core_session_t *aleg, switch_core_ses } } } - /* * This subroutine will take the a_params of a sip_addr_s structure and spin through them. * Each param will be used to create a channel variable. diff --git a/src/switch_ivr_bridge.c b/src/switch_ivr_bridge.c index 8eb89ee537..2dab092034 100644 --- a/src/switch_ivr_bridge.c +++ b/src/switch_ivr_bridge.c @@ -495,7 +495,12 @@ static switch_status_t uuid_bridge_on_soft_execute(switch_core_session_t *sessio } if (!ready_b) { - switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + const char *cid = switch_channel_get_variable(other_channel, "rdnis"); + if (ready_a && cid) { + switch_ivr_session_transfer(session, cid, NULL, NULL); + } else { + switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + } } switch_core_session_rwunlock(other_session); return SWITCH_STATUS_FALSE; @@ -825,6 +830,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_uuid_bridge(const char *originator_uu switch_channel_t *originator_channel, *originatee_channel, *swap_channel; switch_status_t status = SWITCH_STATUS_FALSE; switch_caller_profile_t *cp, *originator_cp, *originatee_cp; + char *p; if ((originator_session = switch_core_session_locate(originator_uuid))) { if ((originatee_session = switch_core_session_locate(originatee_uuid))) { @@ -895,6 +901,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_uuid_bridge(const char *originator_uu cp->destination_number = switch_core_strdup(cp->pool, originator_cp->caller_id_number); cp->caller_id_number = switch_core_strdup(cp->pool, originator_cp->caller_id_number); cp->caller_id_name = switch_core_strdup(cp->pool, originator_cp->caller_id_name); + cp->rdnis = switch_core_strdup(cp->pool, originatee_cp->destination_number); + if ((p = strchr(cp->rdnis, '@'))) { + *p = '\0'; + } switch_channel_set_caller_profile(originatee_channel, cp); switch_channel_set_originator_caller_profile(originatee_channel, switch_caller_profile_clone(originatee_session, originator_cp)); @@ -902,6 +912,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_uuid_bridge(const char *originator_uu cp->destination_number = switch_core_strdup(cp->pool, originatee_cp->caller_id_number); cp->caller_id_number = switch_core_strdup(cp->pool, originatee_cp->caller_id_number); cp->caller_id_name = switch_core_strdup(cp->pool, originatee_cp->caller_id_name); + cp->rdnis = switch_core_strdup(cp->pool, originator_cp->destination_number); + if ((p = strchr(cp->rdnis, '@'))) { + *p = '\0'; + } switch_channel_set_caller_profile(originator_channel, cp); switch_channel_set_originatee_caller_profile(originator_channel, switch_caller_profile_clone(originator_session, originatee_cp));