]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix auto_simplify
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 30 Nov 2012 00:34:27 +0000 (18:34 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 30 Nov 2012 00:34:27 +0000 (18:34 -0600)
src/mod/endpoints/mod_sofia/mod_sofia.c
src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/sofia_glue.c

index f483321e36914f9a2748445afcbf4762166bcf73..73c50565fee0b5894ad0c2c130d3bf2a3d1a9963 100644 (file)
@@ -1097,8 +1097,9 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
 
 
                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) {
@@ -1714,7 +1715,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
 
                        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)) {
index 44f17a320fcae14f75b5735a70a48532e651f29c..146ef4fd44446e18998464663ce6c30cefa8c0ca 100644 (file)
@@ -1191,7 +1191,7 @@ uint32_t sofia_reg_reg_count(sofia_profile_t *profile, const char *user, const c
 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);
index 388e647cc03e66b217e4206a1655ccfe6c11e9fc..efdce9449ee705d9c2c1f7029bed99b51756fbf6 100644 (file)
@@ -6785,21 +6785,19 @@ switch_status_t sofia_glue_send_notify(sofia_profile_t *profile, const char *use
 }
 
 
-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);
 
@@ -6807,6 +6805,8 @@ void sofia_glue_tech_simplify(private_object_t *tech_pvt)
                        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");
@@ -6851,6 +6851,11 @@ void sofia_glue_tech_simplify(private_object_t *tech_pvt)
 
                switch_core_session_rwunlock(other_session);
        }
+
+
+ end:
+
+       return r;
 }
 
 void sofia_glue_pause_jitterbuffer(switch_core_session_t *session, switch_bool_t on)