From be9e84e5c538b2b97600cf000ad295b101ad302a Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 11 Feb 2010 15:18:52 +0000 Subject: [PATCH] fix contact issue git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16603 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/endpoints/mod_sofia/sofia_presence.c | 25 +++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index 08a804e437..eaaae4c7ec 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -1901,7 +1901,7 @@ void sofia_presence_handle_sip_i_subscribe(int status, if (status < 200) { char *sticky = NULL; - char *contactstr = profile->url; + char *contactstr = profile->url, *cs = NULL; char *p = NULL, *new_contactstr = NULL; if (is_nat) { @@ -1922,29 +1922,38 @@ void sofia_presence_handle_sip_i_subscribe(int status, if (switch_stristr("port=tcp", contact->m_url->url_params)) { if (is_auto_nat) { - contactstr = profile->tcp_public_contact; + cs = profile->tcp_public_contact; } else { - contactstr = profile->tcp_contact; + cs = profile->tcp_contact; } } else if (switch_stristr("port=tls", contact->m_url->url_params)) { if (is_auto_nat) { - contactstr = profile->tls_contact; + cs = profile->tls_public_contact; } else { - contactstr = profile->tls_public_contact; + cs = profile->tls_contact; } } + if (cs) { + contactstr = cs; + } + + if (nh && nh->nh_ds && nh->nh_ds->ds_usage) { /* nua_dialog_usage_set_refresh_range(nh->nh_ds->ds_usage, exp_delta + SUB_OVERLAP, exp_delta + SUB_OVERLAP); */ nua_dialog_usage_set_refresh_range(nh->nh_ds->ds_usage, exp_delta * 2, exp_delta * 2); } - if ((p = strchr(contactstr, '@'))) { - new_contactstr = switch_mprintf("sip:%s%s", to_user, p); + if (contactstr && (p = strchr(contactstr, '@'))) { + if (strrchr(p, '>')) { + new_contactstr = switch_mprintf("", to_user, p); + } } nua_respond(nh, SIP_202_ACCEPTED, - SIPTAG_CONTACT_STR(new_contactstr), + TAG_IF(new_contactstr, SIPTAG_CONTACT_STR(new_contactstr)), NUTAG_WITH_THIS(nua), SIPTAG_SUBSCRIPTION_STATE_STR(sstr), SIPTAG_EXPIRES_STR(exp_delta_str), TAG_IF(sticky, NUTAG_PROXY(sticky)), TAG_END());