From: Kinsey Moore Date: Mon, 30 Sep 2013 15:26:39 +0000 (+0000) Subject: chan_sip: Allow Asterisk to retry after 403 on register X-Git-Tag: 11.7.0-rc1~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fb1c96baf4a8389b4a6974617175e2c554cad452;p=thirdparty%2Fasterisk.git chan_sip: Allow Asterisk to retry after 403 on register This adds a global option in chan_sip to allow it to continue attempting registration if a 403 is received, clearing the cached nonce and treating it as a non-fatal response. Normally, this would cause registration attempts to that endpoint to stop. (closes issue ASTERISK-17138) Review: https://reviewboard.asterisk.org/r/2874/ Reported by: Rudi ........ Merged revisions 400137 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@400140 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/UPGRADE.txt b/UPGRADE.txt index fc95ab677c..9073b32715 100644 --- a/UPGRADE.txt +++ b/UPGRADE.txt @@ -26,6 +26,9 @@ From 11.5 to 11.6: returning RESULT_SUCCESS even if there was an error. * The libuuid development library is now optional for res_rtp_asterisk. If the library is not present when building ICE and TURN support will not be present. +* The option "register_retry_403" has been added to chan_sip to work around + servers that are known to erroneously send 403 in response to valid + REGISTER requests and allows Asterisk to continue attepmting to connect. From 11.4 to 11.5: * The default settings for chan_sip are now overriden properly by the general diff --git a/channels/chan_sip.c b/channels/chan_sip.c index c669655456..9defb2e640 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -770,6 +770,7 @@ static int global_rtpholdtimeout; /*!< Time out call if no RTP during hold */ static int global_rtpkeepalive; /*!< Send RTP keepalives */ static int global_reg_timeout; /*!< Global time between attempts for outbound registrations */ static int global_regattempts_max; /*!< Registration attempts before giving up */ +static int global_reg_retry_403; /*!< Treat 403 responses to registrations as 401 responses */ static int global_shrinkcallerid; /*!< enable or disable shrinking of caller id */ static int global_callcounter; /*!< Enable call counters for all devices. This is currently enabled by setting the peer * call-limit to INT_MAX. When we remove the call-limit from the code, we can make it @@ -20683,6 +20684,7 @@ static char *sip_show_settings(struct ast_cli_entry *e, int cmd, struct ast_cli_ ast_cli(a->fd, " Sub. max duration: %d secs\n", max_subexpiry); ast_cli(a->fd, " Outbound reg. timeout: %d secs\n", global_reg_timeout); ast_cli(a->fd, " Outbound reg. attempts: %d\n", global_regattempts_max); + ast_cli(a->fd, " Outbound reg. retry 403:%d\n", global_reg_retry_403); ast_cli(a->fd, " Notify ringing state: %s\n", AST_CLI_YESNO(sip_cfg.notifyringing)); if (sip_cfg.notifyringing) { ast_cli(a->fd, " Include CID: %s%s\n", @@ -31390,6 +31392,7 @@ static int reload_config(enum channelreloadreason reason) sip_cfg.compactheaders = DEFAULT_COMPACTHEADERS; global_reg_timeout = DEFAULT_REGISTRATION_TIMEOUT; global_regattempts_max = 0; + global_reg_retry_403 = 0; sip_cfg.pedanticsipchecking = DEFAULT_PEDANTIC; sip_cfg.autocreatepeer = DEFAULT_AUTOCREATEPEER; global_autoframing = 0; @@ -31777,6 +31780,8 @@ static int reload_config(enum channelreloadreason reason) } } else if (!strcasecmp(v->name, "registerattempts")) { global_regattempts_max = atoi(v->value); + } else if (!strcasecmp(v->name, "register_retry_403")) { + global_reg_retry_403 = ast_true(v->value); } else if (!strcasecmp(v->name, "bindaddr") || !strcasecmp(v->name, "udpbindaddr")) { if (ast_parse_arg(v->value, PARSE_ADDR, &bindaddr)) { ast_log(LOG_WARNING, "Invalid address: %s\n", v->value); diff --git a/configs/sip.conf.sample b/configs/sip.conf.sample index 702f6e5f37..562b64c504 100644 --- a/configs/sip.conf.sample +++ b/configs/sip.conf.sample @@ -774,6 +774,9 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls ; 0 = continue forever, hammering the other server ; until it accepts the registration ; Default is 0 tries, continue forever +;register_retry_403=yes ; Treat 403 responses to registrations as if they were + ; 401 responses and continue retrying according to normal + ; retry rules. ;----------------------------------------- OUTBOUND MWI SUBSCRIPTIONS ------------------------- ; Asterisk can subscribe to receive the MWI from another SIP server and store it locally for retrieval