diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index d79626f4dc..a7f952ca97 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -1957,6 +1957,7 @@ void sofia_presence_handle_sip_i_subscribe(int status, if (status < 200) { char *sticky = NULL; char *contactstr = profile->url; + char *p = NULL, *new_contactstr = NULL; if (is_nat) { char params[128] = ""; @@ -1995,19 +1996,24 @@ void sofia_presence_handle_sip_i_subscribe(int status, } 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 + 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); + } + nua_respond(nh, SIP_202_ACCEPTED, - SIPTAG_CONTACT_STR(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()); - + TAG_IF(sticky, NUTAG_PROXY(sticky)), + TAG_END()); + + switch_safe_free(new_contactstr); switch_safe_free(sticky); - } if (sub_state == nua_substate_terminated) {