diff options
Diffstat (limited to 'channels/chan_sip.c')
-rw-r--r-- | channels/chan_sip.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 2fa124ff2..3b0df05ca 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -1608,7 +1608,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 */ @@ -6730,7 +6731,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; @@ -10129,6 +10131,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; @@ -16658,7 +16661,7 @@ static int handle_response_register(struct sip_pvt *p, int resp, char *rest, str } 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; |