]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip.c: Support endpoints with domain info in username
authorJoseph Nadiv <ynadiv@corpit.xyz>
Thu, 20 May 2021 07:15:30 +0000 (03:15 -0400)
committerFriendly Automation <jenkins2@gerrit.asterisk.org>
Wed, 26 May 2021 15:30:34 +0000 (10:30 -0500)
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 [new file with mode: 0644]
res/res_pjsip.c

diff --git a/doc/CHANGES-staging/res_pjsip.txt b/doc/CHANGES-staging/res_pjsip.txt
new file mode 100644 (file)
index 0000000..ffbf13a
--- /dev/null
@@ -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
index 36dd12a03dbac0d504a580040989bff6a3f4435c..0998fb354a922d873923a46b058825118bac1cc4 100644 (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,