Module: sems Branch: master Commit: a1fcef99d1efb35646420a57a2d9ac183ee797cd URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=a1fcef99d1efb35646420a57a2d9ac183ee797cd
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Fri Mar 4 17:33:29 2011 +0100 SST fixes: timer option tag; Min-SE==Interval --- core/plug-in/session_timer/SessionTimer.cpp | 53 +++++++++++++++------------ core/plug-in/session_timer/SessionTimer.h | 2 + 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/core/plug-in/session_timer/SessionTimer.cpp b/core/plug-in/session_timer/SessionTimer.cpp index 19168b1..d866de2 100644 --- a/core/plug-in/session_timer/SessionTimer.cpp +++ b/core/plug-in/session_timer/SessionTimer.cpp @@ -152,17 +152,15 @@ bool SessionTimer::onSendRequest(const string& method, hdrs); } - string m_hdrs = SIP_HDR_COLSP(SIP_HDR_SUPPORTED) "timer" CRLF; + addOptionTag(hdrs, SIP_HDR_SUPPORTED, TIMER_OPTION_TAG); if ((method != SIP_METH_INVITE) && (method != SIP_METH_UPDATE)) - goto end; + return false; // session-expires / min-se only in INV/UPD removeHeader(hdrs, SIP_HDR_SESSION_EXPIRES); removeHeader(hdrs, SIP_HDR_MIN_SE); - m_hdrs += SIP_HDR_COLSP(SIP_HDR_SESSION_EXPIRES) + int2str(session_interval) +CRLF + hdrs += SIP_HDR_COLSP(SIP_HDR_SESSION_EXPIRES) + int2str(session_interval) + CRLF + SIP_HDR_COLSP(SIP_HDR_MIN_SE) + int2str(min_se) + CRLF; - end: - hdrs += m_hdrs; return false; } @@ -173,22 +171,26 @@ bool SessionTimer::onSendReply(const AmSipRequest& req, string& hdrs, int flags) { + // only in 2xx responses to INV/UPD if (((req.method != SIP_METH_INVITE) && (req.method != SIP_METH_UPDATE)) || (code < 200) || (code >= 300)) return false; - - string m_hdrs = SIP_HDR_COLSP(SIP_HDR_SUPPORTED) "timer" CRLF; - // only in 2xx responses to INV/UPD - m_hdrs += SIP_HDR_COLSP(SIP_HDR_SESSION_EXPIRES) + + addOptionTag(hdrs, SIP_HDR_SUPPORTED, TIMER_OPTION_TAG); + + if (((session_refresher_role==UAC) && (session_refresher==refresh_remote)) + || ((session_refresher_role==UAS) && remote_timer_aware)) { + addOptionTag(hdrs, SIP_HDR_REQUIRE, TIMER_OPTION_TAG); + } else { + removeOptionTag(hdrs, SIP_HDR_REQUIRE, TIMER_OPTION_TAG); + } + + // remove (possibly existing) Session-Expires header + removeHeader(hdrs, SIP_HDR_SESSION_EXPIRES); + + hdrs += SIP_HDR_COLSP(SIP_HDR_SESSION_EXPIRES) + int2str(session_interval) + ";refresher="+ (session_refresher_role==UAC ? "uac":"uas")+CRLF; - - if (((session_refresher_role==UAC) && (session_refresher==refresh_remote)) - || ((session_refresher_role==UAS) && remote_timer_aware)) - m_hdrs += SIP_HDR_COLSP(SIP_HDR_REQUIRE) "timer" CRLF; - - hdrs += m_hdrs; return false; } @@ -266,7 +268,7 @@ void SessionTimer::updateTimer(AmSession* s, const AmSipRequest& req) { if((req.method == SIP_METH_INVITE)||(req.method == SIP_METH_UPDATE)){ remote_timer_aware = - key_in_list(getHeader(req.hdrs, SIP_HDR_SUPPORTED),"timer", true); + key_in_list(getHeader(req.hdrs, SIP_HDR_SUPPORTED), TIMER_OPTION_TAG, true); // determine session interval string sess_expires_hdr = getHeader(req.hdrs, SIP_HDR_SESSION_EXPIRES, @@ -295,17 +297,20 @@ void SessionTimer::updateTimer(AmSession* s, const AmSipRequest& req) { } } - // calculate actual se - session_interval = session_timer_conf.getSessionExpires(); - + // minimum limit of both if (i_minse > min_se) min_se = i_minse; - if (rem_has_sess_expires && (rem_sess_expires < min_se)) { - session_interval = min_se; - } else { - if (rem_has_sess_expires && (rem_sess_expires < session_interval)) - session_interval = rem_sess_expires; + // calculate actual se + session_interval = session_timer_conf.getSessionExpires(); + + if (rem_has_sess_expires) { + if (rem_sess_expires <= min_se) { + session_interval = min_se; + } else { + if (rem_sess_expires < session_interval) + session_interval = rem_sess_expires; + } } DBG("using actual session interval %u\n", session_interval); diff --git a/core/plug-in/session_timer/SessionTimer.h b/core/plug-in/session_timer/SessionTimer.h index 9cafbdf..9e43435 100644 --- a/core/plug-in/session_timer/SessionTimer.h +++ b/core/plug-in/session_timer/SessionTimer.h @@ -33,6 +33,8 @@ #define MOD_NAME "session_timer" +#define TIMER_OPTION_TAG "timer" + /* Session Timer: -ssa */ class AmTimeoutEvent; // these are the timer IDs for session timer _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
