summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorCorey Farrell <git@cfware.com>2017-10-24 10:43:15 -0400
committerCorey Farrell <git@cfware.com>2017-10-24 11:57:53 -0400
commit6474de5f729851820153bef8d37dca4204fe2754 (patch)
treeea8088c8984ba27e757f2b6ec711f154246e6eaf /channels
parent4cc36594ef4fb59f0eb87671e09c523c1b4b0bcf (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.c8
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) {