Fix issue where session timer headers were present when they should not have been.
authorJoshua Colp <jcolp@digium.com>
Tue, 10 Jun 2008 14:11:16 +0000 (14:11 +0000)
committerJoshua Colp <jcolp@digium.com>
Tue, 10 Jun 2008 14:11:16 +0000 (14:11 +0000)
(closes issue #12706)
Reported by: falves11
Patches:
      chan_sip.c.diff uploaded by rjain (license 226)
Tested by: falves11

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@121503 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 0962fc7..b5ac72d 100644 (file)
@@ -7845,8 +7845,13 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, in
                ast_string_field_set(p, url, NULL);
        }
 
-       /* Add Session-Timers related headers if the feature is active for this session */
-       if (p->stimer && p->stimer->st_active == TRUE && p->stimer->st_active_peer_ua == TRUE) {
+       /* Add Session-Timers related headers if the feature is active for this session.
+          An exception to this behavior is the ACK request. Since Asterisk never requires 
+          session-timers support from a remote end-point (UAS) in an INVITE, it must 
+          not send 'Require: timer' header in the ACK request. Also, Require: header 
+          is not applicable for CANCEL method. */
+       if (p->stimer && p->stimer->st_active == TRUE && p->stimer->st_active_peer_ua == TRUE 
+           && sipmethod != SIP_ACK && sipmethod != SIP_CANCEL) {
                char se_hdr[256];
                snprintf(se_hdr, sizeof(se_hdr), "%d;refresher=%s", p->stimer->st_interval, 
                        strefresher2str(p->stimer->st_ref));
@@ -9168,6 +9173,7 @@ static int transmit_invite(struct sip_pvt *p, int sipmethod, int sdp, int init)
                
                snprintf(i2astr, sizeof(i2astr), "%d", p->stimer->st_interval);
                add_header(&req, "Session-Expires", i2astr);
+               snprintf(i2astr, sizeof(i2astr), "%d", st_get_se(p, FALSE));
                add_header(&req, "Min-SE", i2astr);
        }