more stuff

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6908 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale
2007-12-20 02:55:36 +00:00
parent 427fbdb369
commit ef3fde4ddf
16 changed files with 5575 additions and 6031 deletions
+28
View File
@@ -202,6 +202,34 @@ switch_status_t sofia_on_hangup(switch_core_session_t *session)
tech_pvt = (private_object_t *) switch_core_session_get_private(session);
switch_assert(tech_pvt != NULL);
if (switch_test_flag(tech_pvt, TFLAG_SIP_HOLD)) {
const char *buuid;
switch_core_session_t *bsession;
switch_channel_t *bchannel;
const char *lost_ext;
if (tech_pvt->max_missed_packets) {
switch_rtp_set_max_missed_packets(tech_pvt->rtp_session, tech_pvt->max_missed_packets);
}
switch_channel_presence(tech_pvt->channel, "unknown", "unhold");
if ((buuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE))) {
if ((bsession = switch_core_session_locate(buuid))) {
bchannel = switch_core_session_get_channel(bsession);
if ((lost_ext = switch_channel_get_variable(bchannel, "left_hanging_extension"))) {
switch_ivr_session_transfer(bsession, lost_ext, NULL, NULL);
}
switch_channel_clear_flag(bchannel, CF_BROADCAST);
switch_channel_set_flag(bchannel, CF_BREAK);
switch_core_session_rwunlock(bsession);
}
}
switch_clear_flag_locked(tech_pvt, TFLAG_SIP_HOLD);
}
cause = switch_channel_get_cause(channel);
sip_cause = hangup_cause_to_sip(cause);
+1 -1
View File
@@ -1875,7 +1875,7 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t
switch_core_session_t *b_session;
if ((b_session = switch_core_session_locate(br))) {
switch_channel_set_variable(channel, "TRANSFER_FALLBACK", from->a_user);
switch_channel_set_variable(channel, "transfer_fallback_extension", from->a_user);
switch_ivr_session_transfer(b_session, exten, NULL, NULL);
switch_core_session_rwunlock(b_session);
}
+4 -2
View File
@@ -670,9 +670,11 @@ static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char *
dft_state = "confirmed";
}
if (!strcasecmp(state, "cs_execute") && !strcasecmp(direction, "inbound") && !strcasecmp(event_status, "hold")) {
if (!strcasecmp(state, "cs_execute") && !strstr(event_status, "hold")) {
goto end;
} else if (!strcasecmp(state, "cs_hangup")) {
}
if (!strcasecmp(state, "cs_hangup")) {
astate = "terminated";
} else if (switch_strlen_zero(astate)) {
astate = switch_str_nil(switch_event_get_header(helper->event, "answer-state"));