diff options
author | Corey Farrell <git@cfware.com> | 2017-10-24 10:43:15 -0400 |
---|---|---|
committer | Corey Farrell <git@cfware.com> | 2017-10-24 11:57:53 -0400 |
commit | 6474de5f729851820153bef8d37dca4204fe2754 (patch) | |
tree | ea8088c8984ba27e757f2b6ec711f154246e6eaf /channels | |
parent | 4cc36594ef4fb59f0eb87671e09c523c1b4b0bcf (diff) |
chan_sip: Fix SUBSCRIBE with missing "Expires" header.
When chan_sip receives a SUBSCRIBE request with no "Expires" header it
processes the request as an unsubscribe. This is incorrect, per RFC3264
when the "Expires" header is missing a default expiry should be used.
ASTERISK-18140
Change-Id: Ibf6dcd4fdd07a32c2bc38be1dd557981f08188b5
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_sip.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index ef83666db..fd780b61f 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -28672,7 +28672,13 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req, p->lastinvite = seqno; } if (!p->needdestroy) { - p->expiry = atoi(sip_get_header(req, "Expires")); + const char *expires_str = sip_get_header(req, "Expires"); + + if (ast_strlen_zero(expires_str)) { + p->expiry = default_expiry; + } else { + p->expiry = atoi(expires_str); + } /* check if the requested expiry-time is within the approved limits from sip.conf */ if (p->expiry > max_subexpiry) { |