From 1e98fcac6b13a32731d3691ee5df166550b58c48 Mon Sep 17 00:00:00 2001 From: Kevin Harwell Date: Mon, 6 Apr 2015 19:23:57 +0000 Subject: [PATCH] res_pjsip: config option 'timers' can't be set to 'no' 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 Change-Id: Ibbc25d4592aabf7596ef473447d630961f88c217 --- res/res_pjsip.c | 5 +++-- res/res_pjsip/pjsip_configuration.c | 18 +++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/res/res_pjsip.c b/res/res_pjsip.c index 2fb669ed95..98710ce9f3 100644 --- a/res/res_pjsip.c +++ b/res/res_pjsip.c @@ -324,10 +324,11 @@ Session timers for SIP packets - - + + + Alias of always diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c index 67cb863051..30d7702ce1 100644 --- a/res/res_pjsip/pjsip_configuration.c +++ b/res/res_pjsip/pjsip_configuration.c @@ -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; } -- 2.47.2