aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2008-06-10 14:12:51 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2008-06-10 14:12:51 +0000
commit38e07e747dd7b37bfe05047269cb841a18d41ad2 (patch)
tree16d1fca7ad67950e72eb36cff04ebe12b47680af /channels
parent6a23f183bc7963b5c75926e0ae8835b3ade9b837 (diff)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@121505 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index a092b2790..54d9cba2a 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -7473,8 +7473,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));
@@ -8767,6 +8772,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);
}