res_pjsip.c: Support endpoints with domain info in username

In multidomain environments, it is desirable to create
PJSIP endpoints with the domain info in the endpoint name
in pjsip_endpoint.conf.  This resulted in an error with
registrations, NOTIFY, and OPTIONS packet generation.

This commit will detect if there is an @ in the endpoint
identifier and generate the URI accordingly so NOTIFY and
OPTIONS From headers will generate correctly.

ASTERISK-28393

Change-Id: I96f8d01dfdd5573ba7a28299e46271dd4210b619
This commit is contained in:
Joseph Nadiv 2021-05-20 03:15:30 -04:00 committed by Friendly Automation
parent 0ee56cc2bd
commit a123e8cb0e
2 changed files with 16 additions and 0 deletions

View File

@ -0,0 +1,5 @@
Subject: res_pjsip
PJSIP support of registrations of endpoints in multidomain
scenarios, where the endpoint contains the domain info
in pjsip_endpoint.conf

View File

@ -3518,6 +3518,17 @@ static int sip_dialog_create_from(pj_pool_t *pool, pj_str_t *from, const char *u
type |= PJSIP_TRANSPORT_IPV6;
}
/* In multidomain scenario, username may contain @ with domain info */
if (!ast_sip_get_disable_multi_domain() && strchr(user, '@')) {
from->ptr = pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE);
from->slen = pj_ansi_snprintf(from->ptr, PJSIP_MAX_URL_SIZE,
"<sip:%s%s%s>",
user,
(type != PJSIP_TRANSPORT_UDP && type != PJSIP_TRANSPORT_UDP6) ? ";transport=" : "",
(type != PJSIP_TRANSPORT_UDP && type != PJSIP_TRANSPORT_UDP6) ? pjsip_transport_get_type_name(type) : "");
return 0;
}
if (!ast_strlen_zero(domain)) {
from->ptr = pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE);
from->slen = pj_ansi_snprintf(from->ptr, PJSIP_MAX_URL_SIZE,