aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 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;