From 2491cc6e6531092c201f6119d9984feb46a9c367 Mon Sep 17 00:00:00 2001
From: Olle Johansson <oej@edvina.net>
Date: Thu, 3 Jul 2008 16:25:59 +0000
Subject: [PATCH] Revert some logic for session timers. We do send in-dialog
 requests that should not have session-timer require headers, like MESSAGE and
 REFER. So in the future, only add them on requests and responses that are
 related to INVITEs and re-INVITEs.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@127779 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_sip.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index e75a1c9363..6f5e263d03 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -7711,8 +7711,8 @@ static int respprep(struct sip_request *resp, struct sip_pvt *p, const char *msg
 	add_header(resp, "Allow", ALLOWED_METHODS);
 	add_header(resp, "Supported", SUPPORTED_EXTENSIONS);
 
-	/* 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) {
+	/* If this is an invite, add Session-Timers related headers if the feature is active for this session */
+	if (p->method == SIP_INVITE && p->stimer && p->stimer->st_active == TRUE && p->stimer->st_active_peer_ua == TRUE) {
 		char se_hdr[256];
 		snprintf(se_hdr, sizeof(se_hdr), "%d;refresher=%s", p->stimer->st_interval, 
 			strefresher2str(p->stimer->st_ref));
@@ -7854,10 +7854,12 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, in
 	/* 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. */
+	   not send 'Require: timer' header in the ACK request. 
+	   This should only be added in the INVITE transactions, not MESSAGE or REFER or other
+	   in-dialog messages.
+	*/
 	if (p->stimer && p->stimer->st_active == TRUE && p->stimer->st_active_peer_ua == TRUE 
-	    && sipmethod != SIP_ACK && sipmethod != SIP_CANCEL) {
+	    && sipmethod == SIP_INVITE) {
 		char se_hdr[256];
 		snprintf(se_hdr, sizeof(se_hdr), "%d;refresher=%s", p->stimer->st_interval, 
 			strefresher2str(p->stimer->st_ref));
-- 
GitLab