fix sip auto_simplify

This commit is contained in:
Anthony Minessale 2011-07-16 02:33:39 -05:00
parent 09c3fba27c
commit 2f950634ab
6 changed files with 35 additions and 7 deletions

View File

@ -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;

View File

@ -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;
@ -1518,8 +1524,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
case SWITCH_MESSAGE_INDICATE_BRIDGE:
{
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;

View File

@ -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;

View File

@ -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");

View File

@ -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))) {
@ -6382,10 +6384,10 @@ void sofia_glue_tech_simplify(private_object_t *tech_pvt)
&& strcmp(network_addr_a, switch_str_nil(tech_pvt->profile->extsipip))) {
switch_core_session_message_t *msg;
switch_log_printf(SWITCH_CHANNEL_ID_LOG, __FILE__, __SWITCH_FUNC__, __LINE__, switch_channel_get_uuid(inbound_channel),
SWITCH_LOG_NOTICE, "Will simplify channel [%s]\n", switch_channel_get_name(inbound_channel));
msg = switch_core_session_alloc(inbound_session, sizeof(*msg));
MESSAGE_STAMP_FFL(msg);
msg->message_id = SWITCH_MESSAGE_INDICATE_SIMPLIFY;
@ -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);
}
}

View File

@ -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;
}