From a123e8cb0e070379e34acbc3e61c0b2397c6b7fc Mon Sep 17 00:00:00 2001 From: Joseph Nadiv Date: Thu, 20 May 2021 03:15:30 -0400 Subject: [PATCH] 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 --- doc/CHANGES-staging/res_pjsip.txt | 5 +++++ res/res_pjsip.c | 11 +++++++++++ 2 files changed, 16 insertions(+) create mode 100644 doc/CHANGES-staging/res_pjsip.txt 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 36dd12a03d..0998fb354a 100644 --- a/res/res_pjsip.c +++ b/res/res_pjsip.c @@ -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, + "", + 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, -- 2.47.2