]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip: config option 'timers' can't be set to 'no'
authorKevin Harwell <kharwell@digium.com>
Mon, 6 Apr 2015 19:23:57 +0000 (19:23 +0000)
committerKevin Harwell <kharwell@digium.com>
Mon, 6 Apr 2015 19:23:57 +0000 (19:23 +0000)
When setting the configuration option 'timers' equal to 'no' the bit flag was
not properly negated. This patch clears all associated flags and only sets the
specified one. pjsip will handle any necessary flag combinations. Also went
ahead and did similar for the '100rel' option.

ASTERISK-24910 #close
Reported by: Ray Crumrine
Review: https://reviewboard.asterisk.org/r/4582/
........

Merged revisions 434131 from http://svn.asterisk.org/svn/asterisk/branches/13

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434132 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_pjsip.c
res/res_pjsip/pjsip_configuration.c

index 64cd43e18448ff03d53e29b0b45fef540a285fef..c8b8c23a70caaab49295172d3e06414facb2d4b4 100644 (file)
                                        <synopsis>Session timers for SIP packets</synopsis>
                                        <description>
                                                <enumlist>
-                                                       <enum name="forced" />
                                                        <enum name="no" />
-                                                       <enum name="required" />
                                                        <enum name="yes" />
+                                                       <enum name="required" />
+                                                       <enum name="always" />
+                                                       <enum name="forced"><para>Alias of always</para></enum>
                                                </enumlist>
                                        </description>
                                </configOption>
index 5a4741d906bd85001f906059c661819e2b829e2d..eacbef0641fa0cc2b6999bb733ac51811e11b725 100644 (file)
@@ -141,13 +141,14 @@ static int prack_handler(const struct aco_option *opt, struct ast_variable *var,
 {
        struct ast_sip_endpoint *endpoint = obj;
 
+       /* clear all */
+       endpoint->extensions.flags &= ~(PJSIP_INV_SUPPORT_100REL | PJSIP_INV_REQUIRE_100REL);
+
        if (ast_true(var->value)) {
                endpoint->extensions.flags |= PJSIP_INV_SUPPORT_100REL;
-       } else if (ast_false(var->value)) {
-               endpoint->extensions.flags &= ~PJSIP_INV_SUPPORT_100REL;
        } else if (!strcasecmp(var->value, "required")) {
                endpoint->extensions.flags |= PJSIP_INV_REQUIRE_100REL;
-       } else {
+       } else if (!ast_false(var->value)){
                return -1;
        }
 
@@ -174,15 +175,18 @@ static int timers_handler(const struct aco_option *opt, struct ast_variable *var
 {
        struct ast_sip_endpoint *endpoint = obj;
 
+       /* clear all */
+       endpoint->extensions.flags &= ~(PJSIP_INV_SUPPORT_TIMER | PJSIP_INV_REQUIRE_TIMER
+                                       | PJSIP_INV_ALWAYS_USE_TIMER);
+
+       /* set only the specified flag and let pjsip normalize if needed */
        if (ast_true(var->value)) {
                endpoint->extensions.flags |= PJSIP_INV_SUPPORT_TIMER;
-       } else if (ast_false(var->value)) {
-               endpoint->extensions.flags &= PJSIP_INV_SUPPORT_TIMER;
        } else if (!strcasecmp(var->value, "required")) {
                endpoint->extensions.flags |= PJSIP_INV_REQUIRE_TIMER;
-       } else if (!strcasecmp(var->value, "always")) {
+       } else if (!strcasecmp(var->value, "always") || !strcasecmp(var->value, "forced")) {
                endpoint->extensions.flags |= PJSIP_INV_ALWAYS_USE_TIMER;
-       } else {
+       } else if (!ast_false(var->value)) {
                return -1;
        }