mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-07-25 19:25:44 +00:00
skip some callbacks when session is not present
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10463 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
1d398babde
commit
2e20feaac6
@ -2334,6 +2334,18 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
||||
|
||||
state_process:
|
||||
|
||||
switch ((enum nua_callstate) ss_state) {
|
||||
case nua_callstate_terminated:
|
||||
case nua_callstate_terminating:
|
||||
case nua_callstate_ready:
|
||||
case nua_callstate_completed:
|
||||
case nua_callstate_received:
|
||||
if (!(session && channel && tech_pvt)) goto done;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch ((enum nua_callstate) ss_state) {
|
||||
case nua_callstate_init:
|
||||
break;
|
||||
@ -2342,7 +2354,6 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
||||
case nua_callstate_calling:
|
||||
break;
|
||||
case nua_callstate_proceeding:
|
||||
if (channel) {
|
||||
if (status == 180) {
|
||||
switch_channel_mark_ring_ready(channel);
|
||||
if (!switch_channel_test_flag(channel, CF_GEN_RINGBACK)) {
|
||||
@ -2398,13 +2409,12 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case nua_callstate_completing:
|
||||
nua_ack(nh, TAG_END());
|
||||
break;
|
||||
case nua_callstate_received:
|
||||
if (tech_pvt && !switch_test_flag(tech_pvt, TFLAG_SDP)) {
|
||||
if (!switch_test_flag(tech_pvt, TFLAG_SDP)) {
|
||||
if (r_sdp && !switch_test_flag(tech_pvt, TFLAG_SDP)) {
|
||||
if (switch_channel_test_flag(channel, CF_PROXY_MODE)) {
|
||||
switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "RECEIVED_NOMEDIA");
|
||||
@ -2537,7 +2547,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
||||
case nua_callstate_early:
|
||||
break;
|
||||
case nua_callstate_completed:
|
||||
if (tech_pvt && r_sdp) {
|
||||
if (r_sdp) {
|
||||
sdp_parser_t *parser;
|
||||
sdp_session_t *sdp;
|
||||
uint8_t match = 0, is_ok = 1;
|
||||
@ -2809,16 +2819,13 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
||||
|
||||
break;
|
||||
case nua_callstate_terminating:
|
||||
if (session) {
|
||||
if (status == 488 || switch_channel_get_state(channel) == CS_HIBERNATE) {
|
||||
tech_pvt->q850_cause = SWITCH_CAUSE_MANDATORY_IE_MISSING;
|
||||
} else if (!switch_test_flag(tech_pvt, TFLAG_BYE)) {
|
||||
switch_set_flag_locked(tech_pvt, TFLAG_BYE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case nua_callstate_terminated:
|
||||
if (session) {
|
||||
if (!switch_test_flag(tech_pvt, TFLAG_BYE)) {
|
||||
switch_set_flag_locked(tech_pvt, TFLAG_BYE);
|
||||
if (switch_test_flag(tech_pvt, TFLAG_NOHUP)) {
|
||||
@ -2850,7 +2857,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
||||
}
|
||||
|
||||
tech_pvt->nh = NULL;
|
||||
}
|
||||
|
||||
|
||||
if (nh) {
|
||||
nua_handle_bind(nh, NULL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user