From 958671cfbec825e1f4eb3cd004fa04b9baa79f35 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 26 Nov 2008 19:30:40 +0000 Subject: [PATCH] patch for SFSIP-104 git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10544 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/endpoints/mod_sofia/mod_sofia.h | 2 ++ src/mod/endpoints/mod_sofia/sofia.c | 6 +++++- src/mod/endpoints/mod_sofia/sofia_presence.c | 14 +++++++++++--- 3 files changed, 18 insertions(+), 4 deletions(-) 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);