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);
+ if (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) {
switch_channel_set_variable(channel, SOFIA_REPLACES_HEADER, NULL);
- sofia_set_flag(tech_pvt, TFLAG_SIMPLIFY);
+ if (switch_true(switch_channel_get_variable(tech_pvt->channel, "sip_auto_simplify"))) {
+ sofia_set_flag(tech_pvt, TFLAG_SIMPLIFY);
+ }
if (switch_rtp_ready(tech_pvt->rtp_session)) {
void sofia_glue_copy_t38_options(switch_t38_options_t *t38_options, switch_core_session_t *session);
switch_t38_options_t *sofia_glue_extract_t38_options(switch_core_session_t *session, const char *r_sdp);
char *sofia_glue_get_multipart(switch_core_session_t *session, const char *prefix, const char *sdp, char **mp_type);
-void sofia_glue_tech_simplify(private_object_t *tech_pvt);
+int sofia_glue_tech_simplify(private_object_t *tech_pvt);
switch_console_callback_match_t *sofia_reg_find_reg_url_multi(sofia_profile_t *profile, const char *user, const char *host);
switch_console_callback_match_t *sofia_reg_find_reg_url_with_positive_expires_multi(sofia_profile_t *profile, const char *user, const char *host, time_t reg_time, const char *contact_str, long exptime);
switch_bool_t sofia_glue_profile_exists(const char *key);
}
-void sofia_glue_tech_simplify(private_object_t *tech_pvt)
+int sofia_glue_tech_simplify(private_object_t *tech_pvt)
{
const char *uuid, *network_addr_a = NULL, *network_addr_b = NULL, *simplify, *simplify_other_channel;
switch_channel_t *other_channel = NULL, *inbound_channel = NULL;
switch_core_session_t *other_session = NULL, *inbound_session = NULL;
uint8_t did_simplify = 0;
+ int r = 0;
if (!switch_channel_test_flag(tech_pvt->channel, CF_ANSWERED) || switch_channel_test_flag(tech_pvt->channel, CF_SIMPLIFY)) {
- return;
+ goto end;
}
-
-
- if ((uuid = switch_channel_get_partner_uuid(tech_pvt->channel))
- && (other_session = switch_core_session_locate(uuid))) {
+ if ((uuid = switch_channel_get_partner_uuid(tech_pvt->channel)) && (other_session = switch_core_session_locate(uuid))) {
other_channel = switch_core_session_get_channel(other_session);
simplify = switch_channel_get_variable(tech_pvt->channel, "sip_auto_simplify");
simplify_other_channel = switch_channel_get_variable(other_channel, "sip_auto_simplify");
+ r = 1;
+
if (switch_true(simplify) && !switch_channel_test_flag(tech_pvt->channel, CF_BRIDGE_ORIGINATOR)) {
network_addr_a = switch_channel_get_variable(tech_pvt->channel, "network_addr");
network_addr_b = switch_channel_get_variable(other_channel, "network_addr");
switch_core_session_rwunlock(other_session);
}
+
+
+ end:
+
+ return r;
}
void sofia_glue_pause_jitterbuffer(switch_core_session_t *session, switch_bool_t on)