diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 1e2be121f9..beb9f73973 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -367,6 +367,8 @@ struct sofia_profile { char *bindurl; char *tls_url; char *tls_bindurl; + char *tcp_contact; + char *tls_contact; char *sipdomain; char *timer_name; char *hold_music; diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index b99a50d432..443a5eafeb 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -2071,11 +2071,15 @@ switch_status_t config_sofia(int reload, char *profile_name) profile->bindurl = profile->url; } + profile->tcp_contact = switch_core_sprintf(profile->pool, "%s;transport=tcp", profile->url); + profile->tls_contact = switch_core_sprintf(profile->pool, "%s;transport=tls", profile->url); + + if (profile->bind_params) { char *bindurl = profile->bindurl; profile->bindurl = switch_core_sprintf(profile->pool, "%s;%s", bindurl, profile->bind_params); } - + /* * handle TLS params #2 */ diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index 361ab42f80..89d618e0b4 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -1540,7 +1540,8 @@ void sofia_presence_handle_sip_i_subscribe(int status, if (status < 200) { char *sticky = NULL; - + char *contact_str = profile->url; + if (is_nat) { char params[128] = ""; if (contact->m_url->url_params) { @@ -1555,9 +1556,16 @@ void sofia_presence_handle_sip_i_subscribe(int status, network_port, params); } + + if (switch_stristr("port=tcp", contact->m_url->url_params)) { + contact_str = profile->tcp_contact; + } else if (switch_stristr("port=tls", contact->m_url->url_params)) { + contact_str = profile->tls_contact; + } - nua_respond(nh, SIP_202_ACCEPTED, NUTAG_WITH_THIS(nua), SIPTAG_SUBSCRIPTION_STATE_STR(sstr), TAG_IF(sticky, NUTAG_PROXY(sticky)), - TAG_END()); + + nua_respond(nh, SIP_202_ACCEPTED, SIPTAG_CONTACT_STR(contact_str), NUTAG_WITH_THIS(nua), SIPTAG_SUBSCRIPTION_STATE_STR(sstr), + TAG_IF(sticky, NUTAG_PROXY(sticky)), TAG_END()); switch_safe_free(sticky);