提交 57317dff authored 作者: Anthony Minessale's avatar Anthony Minessale

prevent invalid state change

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7365 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 2a4a8e76
...@@ -1808,7 +1808,9 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session ...@@ -1808,7 +1808,9 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
switch_channel_set_flag(nchannel, CF_OUTBOUND); switch_channel_set_flag(nchannel, CF_OUTBOUND);
switch_set_flag_locked(tech_pvt, TFLAG_OUTBOUND); switch_set_flag_locked(tech_pvt, TFLAG_OUTBOUND);
switch_clear_flag_locked(tech_pvt, TFLAG_LATE_NEGOTIATION); switch_clear_flag_locked(tech_pvt, TFLAG_LATE_NEGOTIATION);
switch_channel_set_state(nchannel, CS_INIT); if (switch_channel_get_state(nchannel) == CS_NEW) {
switch_channel_set_state(nchannel, CS_INIT);
}
tech_pvt->caller_profile = caller_profile; tech_pvt->caller_profile = caller_profile;
*new_session = nsession; *new_session = nsession;
cause = SWITCH_CAUSE_SUCCESS; cause = SWITCH_CAUSE_SUCCESS;
......
...@@ -1530,7 +1530,9 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status, ...@@ -1530,7 +1530,9 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
if (switch_channel_test_flag(channel, CF_BYPASS_MEDIA)) { if (switch_channel_test_flag(channel, CF_BYPASS_MEDIA)) {
switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "RECEIVED_NOMEDIA"); switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "RECEIVED_NOMEDIA");
switch_set_flag_locked(tech_pvt, TFLAG_READY); switch_set_flag_locked(tech_pvt, TFLAG_READY);
switch_channel_set_state(channel, CS_INIT); if (switch_channel_get_state(channel) == CS_NEW) {
switch_channel_set_state(channel, CS_INIT);
}
switch_set_flag(tech_pvt, TFLAG_SDP); switch_set_flag(tech_pvt, TFLAG_SDP);
goto done; goto done;
} else { } else {
...@@ -1553,7 +1555,9 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status, ...@@ -1553,7 +1555,9 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
su_home_t *home = NULL; su_home_t *home = NULL;
switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "RECEIVED"); switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "RECEIVED");
switch_set_flag_locked(tech_pvt, TFLAG_READY); switch_set_flag_locked(tech_pvt, TFLAG_READY);
switch_channel_set_state(channel, CS_INIT); if (switch_channel_get_state(channel) == CS_NEW) {
switch_channel_set_state(channel, CS_INIT);
}
switch_set_flag(tech_pvt, TFLAG_SDP); switch_set_flag(tech_pvt, TFLAG_SDP);
if (replaces_str) { if (replaces_str) {
home = su_home_new(sizeof(*home)); home = su_home_new(sizeof(*home));
...@@ -1748,7 +1752,9 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status, ...@@ -1748,7 +1752,9 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
} }
if (switch_channel_get_state(channel) == CS_HIBERNATE) { if (switch_channel_get_state(channel) == CS_HIBERNATE) {
switch_set_flag_locked(tech_pvt, TFLAG_READY); switch_set_flag_locked(tech_pvt, TFLAG_READY);
switch_channel_set_state(channel, CS_INIT); if (switch_channel_get_state(channel) == CS_NEW) {
switch_channel_set_state(channel, CS_INIT);
}
switch_set_flag(tech_pvt, TFLAG_SDP); switch_set_flag(tech_pvt, TFLAG_SDP);
} }
goto done; goto done;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论