FS-9241 Use tls_public_url instead of tls_url in INVITE Contact when NAT is detected
This commit is contained in:
parent
7f623fc0c8
commit
78c2ed0526
|
@ -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);
|
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_url_from_contact(char *buf, uint8_t to_dup);
|
||||||
char *sofia_glue_get_path_from_contact(char *buf);
|
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_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);
|
void sofia_glue_sql_close(sofia_profile_t *profile, time_t prune);
|
||||||
int sofia_glue_init_sql(sofia_profile_t *profile);
|
int sofia_glue_init_sql(sofia_profile_t *profile);
|
||||||
|
|
|
@ -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));
|
user, ipv6 ? "[" : "", host, ipv6 ? "]" : "", port, sofia_glue_transport2str(transport));
|
||||||
|
|
||||||
if (sofia_glue_check_nat(profile, tech_pvt->mparams.remote_ip)) {
|
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;
|
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 (!url) {
|
||||||
if (check_nat) {
|
if (check_nat) {
|
||||||
|
@ -10085,11 +10083,7 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
const char *url = NULL;
|
const char *url = NULL;
|
||||||
if (sofia_glue_check_nat(profile, tech_pvt->mparams.remote_ip)) {
|
url = sofia_glue_get_profile_url(profile, tech_pvt->mparams.remote_ip, transport);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (url) {
|
if (url) {
|
||||||
const char *brackets = NULL;
|
const char *brackets = NULL;
|
||||||
|
|
|
@ -931,15 +931,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
|
||||||
ipv6 ? "[" : "", ip_addr, ipv6 ? "]" : "", tech_pvt->profile->extsipport);
|
ipv6 ? "[" : "", ip_addr, ipv6 ? "]" : "", tech_pvt->profile->extsipport);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (sofia_glue_transport_has_tls(tech_pvt->transport)) {
|
sofia_glue_get_profile_url(tech_pvt->profile, tech_pvt->mparams.remote_ip, 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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:
|
/* For Emacs:
|
||||||
* Local Variables:
|
* Local Variables:
|
||||||
|
|
Loading…
Reference in New Issue