summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-ua
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2012-07-23 13:31:26 +0000
committerNanang Izzuddin <nanang@teluu.com>2012-07-23 13:31:26 +0000
commit3f7e9837dccd839c202a6c967e94c1cae95ad03b (patch)
tree2cc4b43b1d8807169d09b68670b36b0f5b84347c /pjsip/src/pjsip-ua
parent04731aa133494c84f6939205b4f1b991fc2503f9 (diff)
Fixed #1560: Added 'timer' in require header in sending 2xx response when session timer refresher is 'uac'.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4213 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsip-ua')
-rw-r--r--pjsip/src/pjsip-ua/sip_timer.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/pjsip/src/pjsip-ua/sip_timer.c b/pjsip/src/pjsip-ua/sip_timer.c
index 17c83c24..dee41155 100644
--- a/pjsip/src/pjsip-ua/sip_timer.c
+++ b/pjsip/src/pjsip-ua/sip_timer.c
@@ -1030,6 +1030,33 @@ PJ_DEF(pj_status_t) pjsip_timer_update_resp(pjsip_inv_session *inv,
if (inv->timer && inv->timer->active) {
/* Add Session-Expires header and start the timer */
add_timer_headers(inv, tdata, PJ_TRUE, PJ_FALSE);
+
+ /* Add 'timer' to Require header (see ticket #1560). */
+ if (inv->timer->refresher == TR_UAC) {
+ pjsip_require_hdr *req_hdr;
+ pj_bool_t req_hdr_has_timer = PJ_FALSE;
+
+ req_hdr = (pjsip_require_hdr*)
+ pjsip_msg_find_hdr(tdata->msg, PJSIP_H_REQUIRE,
+ NULL);
+ if (req_hdr == NULL) {
+ req_hdr = pjsip_require_hdr_create(tdata->pool);
+ PJ_ASSERT_RETURN(req_hdr, PJ_ENOMEM);
+ pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)req_hdr);
+ } else {
+ unsigned i;
+ for (i = 0; i < req_hdr->count; ++i) {
+ if (pj_stricmp(&req_hdr->values[i], &STR_TIMER)) {
+ req_hdr_has_timer = PJ_TRUE;
+ break;
+ }
+ }
+ }
+ if (!req_hdr_has_timer)
+ req_hdr->values[req_hdr->count++] = STR_TIMER;
+ }
+
+ /* Finally, start timer. */
start_timer(inv);
}
}