Merge pull request #880 in FS/freeswitch from ~FRANCOIS/freeswitch-fs-9241:master to master

* commit '78c2ed0526e25c10241ceb918e73aef02446ffd2':
  FS-9241 Use tls_public_url instead of tls_url in INVITE Contact when NAT is detected
This commit is contained in:
Brian West 2016-07-05 15:01:08 -05:00
commit 2c3c6b9b68
3 changed files with 31 additions and 17 deletions

View 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);

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

View 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: