提交 2f950634 authored 作者: Anthony Minessale's avatar Anthony Minessale

fix sip auto_simplify

上级 09c3fba2
......@@ -1114,6 +1114,8 @@ typedef enum {
CF_CNG_PLC,
CF_ATTENDED_TRANSFER,
CF_LAZY_ATTENDED_TRANSFER,
CF_SIGNAL_DATA,
CF_SIMPLIFY,
/* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
CF_FLAG_MAX
} switch_channel_flag_t;
......
......@@ -968,6 +968,12 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
switch_assert(tech_pvt->rtp_session != NULL);
tech_pvt->read_frame.datalen = 0;
if (sofia_test_flag(tech_pvt, TFLAG_SIMPLIFY) && sofia_test_flag(tech_pvt, TFLAG_GOT_ACK)) {
sofia_glue_tech_simplify(tech_pvt);
sofia_clear_flag(tech_pvt, TFLAG_SIMPLIFY);
}
while (sofia_test_flag(tech_pvt, TFLAG_IO) && tech_pvt->read_frame.datalen == 0) {
tech_pvt->read_frame.flags = SFF_NONE;
......@@ -1519,7 +1525,8 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
{
sofia_glue_tech_track(tech_pvt->profile, session);
sofia_glue_tech_simplify(tech_pvt);
sofia_set_flag(tech_pvt, TFLAG_SIMPLIFY);
if (switch_rtp_ready(tech_pvt->rtp_session)) {
const char *val;
......
......@@ -288,7 +288,7 @@ typedef enum {
TFLAG_NOHUP,
TFLAG_NOSDP_REINVITE,
TFLAG_NAT,
TFLAG_USEME,
TFLAG_SIMPLIFY,
TFLAG_SIP_HOLD,
TFLAG_INB_NOMEDIA,
TFLAG_LATE_NEGOTIATION,
......@@ -313,6 +313,7 @@ typedef enum {
TFLAG_3PCC_INVITE,
TFLAG_NOREPLY,
TFLAG_LIBERAL_DTMF,
TFLAG_GOT_ACK,
/* No new flags below this line */
TFLAG_MAX
} TFLAGS;
......
......@@ -945,6 +945,7 @@ static void our_sofia_event_callback(nua_event_t event,
extract_header_vars(profile, sip, session, nh);
sofia_glue_tech_track(tech_pvt->profile, session);
sofia_set_flag(tech_pvt, TFLAG_GOT_ACK);
}
}
case nua_r_ack:
......@@ -5827,7 +5828,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
if ((enum nua_callstate) ss_state == nua_callstate_ready && channel && session && tech_pvt) {
sofia_glue_tech_simplify(tech_pvt);
sofia_set_flag(tech_pvt, TFLAG_SIMPLIFY);
}
......@@ -6804,6 +6805,8 @@ void sofia_handle_sip_i_reinvite(switch_core_session_t *session,
char via_space[2048];
char branch[16] = "";
sofia_clear_flag(tech_pvt, TFLAG_GOT_ACK);
sofia_glue_get_addr(de->data->e_msg, network_ip, sizeof(network_ip), &network_port);
switch_stun_random_string(branch, sizeof(branch) - 1, "0123456789abcdef");
......
......@@ -6352,10 +6352,12 @@ void sofia_glue_tech_simplify(private_object_t *tech_pvt)
switch_core_session_t *other_session = NULL, *inbound_session = NULL;
uint8_t did_simplify = 0;
if (!switch_channel_test_flag(tech_pvt->channel, CF_ANSWERED)) {
if (!switch_channel_test_flag(tech_pvt->channel, CF_ANSWERED) || switch_channel_test_flag(tech_pvt->channel, CF_SIMPLIFY)) {
return;
}
if ((uuid = switch_channel_get_variable(tech_pvt->channel, SWITCH_SIGNAL_BOND_VARIABLE))
&& (other_session = switch_core_session_locate(uuid))) {
......@@ -6395,6 +6397,9 @@ void sofia_glue_tech_simplify(private_object_t *tech_pvt)
did_simplify = 1;
sofia_glue_tech_track(tech_pvt->profile, inbound_session);
switch_channel_set_flag(inbound_channel, CF_SIMPLIFY);
}
}
......
......@@ -716,6 +716,14 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_parse_all_signal_data(switch_core_ses
void *data;
switch_core_session_message_t msg = { 0 };
int i = 0;
switch_channel_t *channel = switch_core_session_get_channel(session);
if (switch_channel_test_flag(channel, CF_SIGNAL_DATA)) {
return SWITCH_STATUS_FALSE;
}
switch_channel_set_flag(channel, CF_SIGNAL_DATA);
msg.message_id = SWITCH_MESSAGE_INDICATE_SIGNAL_DATA;
msg.from = __FILE__;
......@@ -730,6 +738,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_parse_all_signal_data(switch_core_ses
}
switch_channel_clear_flag(channel, CF_SIGNAL_DATA);
return i ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论