diff --git a/doc/CHANGES-staging/res_pjsip.txt b/doc/CHANGES-staging/res_pjsip.txt new file mode 100644 index 0000000000..ffbf13a9c2 --- /dev/null +++ b/doc/CHANGES-staging/res_pjsip.txt @@ -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 diff --git a/res/res_pjsip.c b/res/res_pjsip.c index 3e9e4541ec..809096d096 100644 --- a/res/res_pjsip.c +++ b/res/res_pjsip.c @@ -3841,6 +3841,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, + "", + 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,