summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorMatthew Nicholson <mnicholson@digium.com>2009-08-12 19:53:14 +0000
committerMatthew Nicholson <mnicholson@digium.com>2009-08-12 19:53:14 +0000
commit56110dd4f1f484b04ecb003aafd18fd53fc51e26 (patch)
treee6c4ddd58eb12b0a1abc744c174e6776de6642a6 /channels
parent2898243c773ed75a1bb34574b6aa2600cbd91c6a (diff)
Make asterisk handle 423 Interval Too Short messages better.
This change uses separate values for the acceptable minimum expiry provided by the 423 error and the expiry value stored in the configuration file. Previously, the value pulled from the configuration file would be overwritten. (closes issue #14366) Reported by: Nick_Lewis Patches: sip-expiry-fix1.diff uploaded by mnicholson (license 96) chan_sip.c-reqexpiry.patch uploaded by Nick (license 657) Tested by: mnicholson git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@211876 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 638a381d8..84e99ff73 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -2070,7 +2070,8 @@ struct sip_registry {
enum sip_transport transport; /*!< Transport for this registration UDP, TCP or TLS */
int portno; /*!< Optional port override */
int expire; /*!< Sched ID of expiration */
- int expiry; /*!< Value to use for the Expires header */
+ int configured_expiry; /*!< Configured value to use for the Expires header */
+ int expiry; /*!< Negotiated value used for the Expires header */
int regattempts; /*!< Number of attempts (since the last success) */
int timeout; /*!< sched id of sip_reg_timeout */
int refresh; /*!< How often to refresh */
@@ -7428,7 +7429,8 @@ static int sip_register(const char *value, int lineno)
}
reg->transport = transport;
reg->expire = -1;
- reg->expiry = (expire ? atoi(expire) : default_expiry);
+ reg->configured_expiry = (expire ? atoi(expire) : default_expiry);
+ reg->expiry = reg->configured_expiry;
reg->timeout = -1;
reg->refresh = reg->expiry;
reg->portno = portnum;
@@ -11363,6 +11365,7 @@ static int sip_reregister(const void *data)
ast_log(LOG_NOTICE, " -- Re-registration for %s@%s\n", r->username, r->hostname);
r->expire = -1;
+ r->expiry = r->configured_expiry;
__sip_do_register(r);
registry_unref(r, "unref the re-register scheduled event");
return 0;
@@ -18268,7 +18271,7 @@ static int handle_response_register(struct sip_pvt *p, int resp, const char *res
}
if (r->expiry > max_expiry) {
ast_log(LOG_WARNING, "Required expiration time from %s@%s is too high, giving up\n", p->registry->username, p->registry->hostname);
- r->expiry = default_expiry;
+ r->expiry = r->configured_expiry;
r->regstate = REG_STATE_REJECTED;
} else {
r->regstate = REG_STATE_UNREGISTERED;