From be38c23ca75abe95e8f57c1fead45bc408809333 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Thu, 17 Apr 2014 09:13:01 +0000 Subject: Fixed #1761: Remove "timer" from Supported header if it is disabled git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4819 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsip-ua/sip_inv.c | 45 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c index eed74ccd..7f9e0e26 100644 --- a/pjsip/src/pjsip-ua/sip_inv.c +++ b/pjsip/src/pjsip-ua/sip_inv.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -1672,8 +1673,26 @@ PJ_DEF(pj_status_t) pjsip_inv_invite( pjsip_inv_session *inv, /* Add Supported header */ hdr = pjsip_endpt_get_capability(inv->dlg->endpt, PJSIP_H_SUPPORTED, NULL); if (hdr) { - pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*) - pjsip_hdr_shallow_clone(tdata->pool, hdr)); + pjsip_supported_hdr *h_sup; + + h_sup = (pjsip_supported_hdr*) pjsip_hdr_clone(tdata->pool, hdr); + /* Remove "timer" from Supported header if Session-Timers is + * disabled (https://trac.pjsip.org/repos/ticket/1761) + */ + if ((inv->options & PJSIP_INV_SUPPORT_TIMER) == 0) { + unsigned i; + const pj_str_t STR_TIMER = { "timer", 5 }; + for (i=0; icount; ++i) { + if (pj_stricmp(&h_sup->values[i], &STR_TIMER)==0) { + pj_array_erase(h_sup->values, sizeof(h_sup->values[0]), + h_sup->count, i); + --h_sup->count; + break; + } + } + } + + pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)h_sup); } /* Add Require header. */ @@ -2845,8 +2864,26 @@ PJ_DEF(pj_status_t) pjsip_inv_update ( pjsip_inv_session *inv, */ hdr = pjsip_endpt_get_capability(inv->dlg->endpt, PJSIP_H_SUPPORTED, NULL); if (hdr) { - pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*) - pjsip_hdr_shallow_clone(tdata->pool, hdr)); + pjsip_supported_hdr *h_sup; + + h_sup = (pjsip_supported_hdr*) pjsip_hdr_clone(tdata->pool, hdr); + /* Remove "timer" from Supported header if Session-Timers is + * disabled (https://trac.pjsip.org/repos/ticket/1761) + */ + if ((inv->options & PJSIP_INV_SUPPORT_TIMER) == 0) { + unsigned i; + const pj_str_t STR_TIMER = { "timer", 5 }; + for (i=0; icount; ++i) { + if (pj_stricmp(&h_sup->values[i], &STR_TIMER)==0) { + pj_array_erase(h_sup->values, sizeof(h_sup->values[0]), + h_sup->count, i); + --h_sup->count; + break; + } + } + } + + pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)h_sup); } status = pjsip_timer_update_req(inv, tdata); -- cgit v1.2.3