[commit] r13167 - in freeswitch/trunk/src: . include
Author: anthm Date: Mon Apr 27 12:45:04 2009 New Revision: 13167 Log: FSCORE-357 Modified: freeswitch/trunk/src/include/switch_core.h freeswitch/trunk/src/switch_channel.c freeswitch/trunk/src/switch_core_session.c freeswitch/trunk/src/switch_ivr_bridge.c Modified: freeswitch/trunk/src/include/switch_core.h ============================================================================== --- freeswitch/trunk/src/include/switch_core.h (original) +++ freeswitch/trunk/src/include/switch_core.h Mon Apr 27 12:45:04 2009 @@ -677,6 +677,8 @@ SWITCH_DECLARE(void) switch_core_session_hupall_matching_var(_In_ const char *var_name, _In_ const char *var_val, _In_ switch_call_cause_t cause); SWITCH_DECLARE(void) switch_core_session_hupall_endpoint(const switch_endpoint_interface_t *endpoint_interface, switch_call_cause_t cause); +SWITCH_DECLARE(switch_status_t) switch_core_session_get_partner(switch_core_session_t *session, switch_core_session_t **partner); + /*! \brief Send a message to another session using it's uuid \param uuid_str the unique id of the session you want to send a message to Modified: freeswitch/trunk/src/switch_channel.c ============================================================================== --- freeswitch/trunk/src/switch_channel.c (original) +++ freeswitch/trunk/src/switch_channel.c Mon Apr 27 12:45:04 2009 @@ -764,7 +764,7 @@ state = switch_channel_get_running_state(other_channel); mystate = switch_channel_get_running_state(channel); - if (mystate != ostate || state >= CS_HANGUP || state == want_state) { + if (mystate != ostate || state >= CS_HANGUP || state >= want_state) { break; } switch_cond_next(); Modified: freeswitch/trunk/src/switch_core_session.c ============================================================================== --- freeswitch/trunk/src/switch_core_session.c (original) +++ freeswitch/trunk/src/switch_core_session.c Mon Apr 27 12:45:04 2009 @@ -75,6 +75,19 @@ return session; } +SWITCH_DECLARE(switch_status_t) switch_core_session_get_partner(switch_core_session_t *session, switch_core_session_t **partner) +{ + const char *uuid; + + if ((uuid = switch_channel_get_variable(session->channel, SWITCH_SIGNAL_BOND_VARIABLE))) { + *partner = switch_core_session_locate(uuid); + return SWITCH_STATUS_SUCCESS; + } + + *partner = NULL; + return SWITCH_STATUS_FALSE; +} + SWITCH_DECLARE(void) switch_core_session_hupall_matching_var(const char *var_name, const char *var_val, switch_call_cause_t cause) { Modified: freeswitch/trunk/src/switch_ivr_bridge.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_bridge.c (original) +++ freeswitch/trunk/src/switch_ivr_bridge.c Mon Apr 27 12:45:04 2009 @@ -508,15 +508,24 @@ if (switch_true(switch_channel_get_variable(channel, SWITCH_COPY_XML_CDR_VARIABLE))) { + switch_core_session_t *other_session; + switch_channel_t *other_channel; switch_xml_t cdr; char *xml_text; - if (switch_ivr_generate_xml_cdr(session, &cdr) == SWITCH_STATUS_SUCCESS) { - if ((xml_text = switch_xml_toxml(cdr, SWITCH_FALSE))) { - switch_channel_set_variable_partner(channel, "b_leg_cdr", xml_text); - switch_safe_free(xml_text); + if (switch_core_session_get_partner(session, &other_session) == SWITCH_STATUS_SUCCESS) { + other_channel = switch_core_session_get_channel(other_session); + + switch_channel_wait_for_state(channel, other_channel, CS_REPORTING); + + if (switch_ivr_generate_xml_cdr(session, &cdr) == SWITCH_STATUS_SUCCESS) { + if ((xml_text = switch_xml_toxml(cdr, SWITCH_FALSE))) { + switch_channel_set_variable(other_channel, "b_leg_cdr", xml_text); + switch_safe_free(xml_text); + } + switch_xml_free(cdr); } - switch_xml_free(cdr); + switch_core_session_rwunlock(other_session); } }
participants (1)
-
FreeSWITCH SVN