From a107ee8616918db8968c2c064f39745d326a0fab Mon Sep 17 00:00:00 2001 From: Mark Petersen Date: Sat, 26 Feb 2022 10:07:53 +0100 Subject: [PATCH] chan_sip.c Session timers get removed on UPDATE If Asterisk receives a SIP REFER with Session-Timers UAC maintain Session-Timers when sending UPDATE" ASTERISK-29843 Change-Id: I8e9a21c13bf757fa34d778f49ba3cf859b29ae5c --- channels/chan_sip.c | 4 +--- doc/CHANGES-staging/chan_sip_session-timer_on_update.txt | 6 ++++++ 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 doc/CHANGES-staging/chan_sip_session-timer_on_update.txt diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 58273edb69..565f9e1854 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -12505,11 +12505,9 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, ui 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. - 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_INVITE) { + && (sipmethod == SIP_INVITE || sipmethod == SIP_UPDATE)) { char se_hdr[256]; snprintf(se_hdr, sizeof(se_hdr), "%d;refresher=%s", p->stimer->st_interval, p->stimer->st_ref == SESSION_TIMER_REFRESHER_US ? "uac" : "uas"); diff --git a/doc/CHANGES-staging/chan_sip_session-timer_on_update.txt b/doc/CHANGES-staging/chan_sip_session-timer_on_update.txt new file mode 100644 index 0000000000..259782f518 --- /dev/null +++ b/doc/CHANGES-staging/chan_sip_session-timer_on_update.txt @@ -0,0 +1,6 @@ +Subject: chan_sip + +Session timers get removed on UPDATE +Fix if Asterisk receives a SIP REFER with Session-Timers UAC +that Asterisk maintains Session-Timers when sending UPDATE request + -- 2.47.2