FS-2801
This commit is contained in:
parent
0eb33e5761
commit
04e57577b3
|
@ -4671,9 +4671,8 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
||||||
if (!switch_channel_get_variable(other_channel, SWITCH_B_SDP_VARIABLE)) {
|
if (!switch_channel_get_variable(other_channel, SWITCH_B_SDP_VARIABLE)) {
|
||||||
switch_channel_set_variable(other_channel, SWITCH_B_SDP_VARIABLE, r_sdp);
|
switch_channel_set_variable(other_channel, SWITCH_B_SDP_VARIABLE, r_sdp);
|
||||||
}
|
}
|
||||||
switch_mutex_unlock(tech_pvt->sofia_mutex);
|
//switch_channel_pre_answer(other_channel);
|
||||||
switch_channel_pre_answer(other_channel);
|
switch_core_session_queue_indication(other_session, SWITCH_MESSAGE_INDICATE_PROGRESS);
|
||||||
switch_mutex_lock(tech_pvt->sofia_mutex);
|
|
||||||
switch_core_session_rwunlock(other_session);
|
switch_core_session_rwunlock(other_session);
|
||||||
}
|
}
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -5100,10 +5099,9 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
||||||
if (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
|
if (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
|
||||||
if ((uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE))
|
if ((uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE))
|
||||||
&& (other_session = switch_core_session_locate(uuid))) {
|
&& (other_session = switch_core_session_locate(uuid))) {
|
||||||
other_channel = switch_core_session_get_channel(other_session);
|
//other_channel = switch_core_session_get_channel(other_session);
|
||||||
switch_mutex_unlock(tech_pvt->sofia_mutex);
|
//switch_channel_answer(other_channel);
|
||||||
switch_channel_answer(other_channel);
|
switch_core_session_queue_indication(other_session, SWITCH_MESSAGE_INDICATE_ANSWER);
|
||||||
switch_mutex_lock(tech_pvt->sofia_mutex);
|
|
||||||
switch_core_session_rwunlock(other_session);
|
switch_core_session_rwunlock(other_session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5132,9 +5130,10 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
||||||
if (!switch_channel_get_variable(other_channel, SWITCH_B_SDP_VARIABLE)) {
|
if (!switch_channel_get_variable(other_channel, SWITCH_B_SDP_VARIABLE)) {
|
||||||
switch_channel_set_variable(other_channel, SWITCH_B_SDP_VARIABLE, r_sdp);
|
switch_channel_set_variable(other_channel, SWITCH_B_SDP_VARIABLE, r_sdp);
|
||||||
}
|
}
|
||||||
switch_mutex_unlock(tech_pvt->sofia_mutex);
|
|
||||||
switch_channel_answer(other_channel);
|
//switch_channel_answer(other_channel);
|
||||||
switch_mutex_lock(tech_pvt->sofia_mutex);
|
switch_core_session_queue_indication(other_session, SWITCH_MESSAGE_INDICATE_ANSWER);
|
||||||
|
|
||||||
switch_core_session_rwunlock(other_session);
|
switch_core_session_rwunlock(other_session);
|
||||||
}
|
}
|
||||||
goto done;
|
goto done;
|
||||||
|
|
|
@ -658,12 +658,38 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_parse_next_event(switch_core_session_
|
||||||
SWITCH_DECLARE(switch_status_t) switch_ivr_parse_all_messages(switch_core_session_t *session)
|
SWITCH_DECLARE(switch_status_t) switch_ivr_parse_all_messages(switch_core_session_t *session)
|
||||||
{
|
{
|
||||||
switch_core_session_message_t *message;
|
switch_core_session_message_t *message;
|
||||||
|
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
while (switch_core_session_dequeue_message(session, &message) == SWITCH_STATUS_SUCCESS) {
|
while (switch_core_session_dequeue_message(session, &message) == SWITCH_STATUS_SUCCESS) {
|
||||||
i++;
|
i++;
|
||||||
switch_core_session_receive_message(session, message);
|
|
||||||
|
switch(message->message_id) {
|
||||||
|
case SWITCH_MESSAGE_INDICATE_ANSWER:
|
||||||
|
if (switch_channel_answer(channel) != SWITCH_STATUS_SUCCESS) {
|
||||||
|
switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
|
||||||
|
}
|
||||||
|
switch_core_session_free_message(&message);
|
||||||
|
break;
|
||||||
|
case SWITCH_MESSAGE_INDICATE_PROGRESS:
|
||||||
|
if (switch_channel_pre_answer(channel) != SWITCH_STATUS_SUCCESS) {
|
||||||
|
switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
|
||||||
|
}
|
||||||
|
switch_core_session_free_message(&message);
|
||||||
|
break;
|
||||||
|
case SWITCH_MESSAGE_INDICATE_RINGING:
|
||||||
|
if (switch_channel_ring_ready(channel) != SWITCH_STATUS_SUCCESS) {
|
||||||
|
switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
|
||||||
|
}
|
||||||
|
switch_core_session_free_message(&message);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
switch_core_session_receive_message(session, message);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
message = NULL;
|
message = NULL;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return i ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE;
|
return i ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE;
|
||||||
|
|
Loading…
Reference in New Issue