]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9241 Use tls_public_url instead of tls_url in INVITE Contact when NAT is detected
authorFrançois <fdelawarde@wirelessmundi.com>
Wed, 8 Jun 2016 17:01:31 +0000 (19:01 +0200)
committerFrançois <fdelawarde@wirelessmundi.com>
Tue, 5 Jul 2016 15:15:04 +0000 (17:15 +0200)
src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_glue.c

index 512f239eb4e86476ee01c9d6c2f0ad8394c4a8a2..70ef0dd241505ae7073cfbaa21bd9b5de812de4f 100644 (file)
@@ -1028,6 +1028,7 @@ void sofia_presence_set_chat_hash(private_object_t *tech_pvt, sip_t const *sip);
 switch_status_t sofia_on_hangup(switch_core_session_t *session);
 char *sofia_glue_get_url_from_contact(char *buf, uint8_t to_dup);
 char *sofia_glue_get_path_from_contact(char *buf);
+char *sofia_glue_get_profile_url(sofia_profile_t *profile, char *remote_ip, const sofia_transport_t transport);
 void sofia_presence_set_hash_key(char *hash_key, int32_t len, sip_t const *sip);
 void sofia_glue_sql_close(sofia_profile_t *profile, time_t prune);
 int sofia_glue_init_sql(sofia_profile_t *profile);
index 811a45d75345602a20e7efab276cede5571e6974..49eb3eff8eaa1699bcbb7debb238f0da1c189029 100644 (file)
@@ -10046,11 +10046,9 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
                                                                                        user, ipv6 ? "[" : "", host, ipv6 ? "]" : "", port, sofia_glue_transport2str(transport));
 
                        if (sofia_glue_check_nat(profile, tech_pvt->mparams.remote_ip)) {
-                               url = (sofia_glue_transport_has_tls(transport)) ? profile->tls_public_url : profile->public_url;
                                check_nat = 1;
-                       } else {
-                               url = (sofia_glue_transport_has_tls(transport)) ? profile->tls_url : profile->url;
                        }
+                       url = sofia_glue_get_profile_url(profile, tech_pvt->mparams.remote_ip, transport);
 
                        if (!url) {
                                if (check_nat) {
@@ -10085,11 +10083,7 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
 
                } else {
                        const char *url = NULL;
-                       if (sofia_glue_check_nat(profile, tech_pvt->mparams.remote_ip)) {
-                               url = (sofia_glue_transport_has_tls(transport)) ? profile->tls_public_url : profile->public_url;
-                       } else {
-                               url = (sofia_glue_transport_has_tls(transport)) ? profile->tls_url : profile->url;
-                       }
+                       url = sofia_glue_get_profile_url(profile, tech_pvt->mparams.remote_ip, transport);
 
                        if (url) {
                                const char *brackets = NULL;
index eaad00a2a199a1f320da09f929e2101e893df189..9fc7a60a70e529193be406ad07ee6d06c201accb 100644 (file)
@@ -931,15 +931,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
                                                                                                                                                   ipv6 ? "[" : "", ip_addr, ipv6 ? "]" : "", tech_pvt->profile->extsipport);
                                }
                        } else {
-                               if (sofia_glue_transport_has_tls(tech_pvt->transport)) {
-                                       tech_pvt->invite_contact = tech_pvt->profile->tls_url;
-                               } else {
-                                       if (!zstr(tech_pvt->mparams.remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech_pvt->mparams.remote_ip)) {
-                                               tech_pvt->invite_contact = tech_pvt->profile->public_url;
-                                       } else {
-                                               tech_pvt->invite_contact = tech_pvt->profile->url;
-                                       }
-                               }
+                               sofia_glue_get_profile_url(tech_pvt->profile, tech_pvt->mparams.remote_ip, tech_pvt->transport);
                        }
                }
 
@@ -3105,6 +3097,33 @@ void sofia_glue_clear_soa(switch_core_session_t *session, switch_bool_t partner)
 
 }
 
+char *sofia_glue_get_profile_url(sofia_profile_t *profile, char *remote_ip, const sofia_transport_t transport)
+{
+       char *url = NULL;
+       int check_nat = 0;
+
+       if (!zstr(remote_ip) && sofia_glue_check_nat(profile, remote_ip)) {
+               check_nat = 1;
+       }
+
+       if (sofia_glue_transport_has_tls(transport)) {
+               if (check_nat && profile->tls_public_url) {
+                       url = profile->tls_public_url;
+               } else {
+                       url = profile->tls_url;
+               }
+       } else {
+               if (check_nat && profile->public_url) {
+                       url = profile->public_url;
+               } else {
+                       url = profile->url;
+               }
+       }
+
+       if (!url) url = profile->url;
+
+       return url;
+}
 
 /* For Emacs:
  * Local Variables: