diff --git a/core/plug-in/session_timer/SessionTimer.cpp b/core/plug-in/session_timer/SessionTimer.cpp index f6eb6b3e..b4bdc564 100644 --- a/core/plug-in/session_timer/SessionTimer.cpp +++ b/core/plug-in/session_timer/SessionTimer.cpp @@ -184,12 +184,15 @@ void SessionTimer::updateTimer(AmSession* s, const AmSipRequest& req) { // determine session interval string sess_expires_hdr = getHeader(req.hdrs, "Session-Expires", "x"); + bool rem_has_sess_expires = false; unsigned int rem_sess_expires=0; if (!sess_expires_hdr.empty()) { if (str2i(strip_header_params(sess_expires_hdr), rem_sess_expires)) { WARN("error while parsing Session-Expires header value '%s'\n", strip_header_params(sess_expires_hdr).c_str()); // exception? + } else { + rem_has_sess_expires = true; } } @@ -205,17 +208,20 @@ void SessionTimer::updateTimer(AmSession* s, const AmSipRequest& req) { } // calculate actual se + session_interval = session_timer_conf.getSessionExpires(); if (i_minse > min_se) min_se = i_minse; - if (rem_sess_expires < min_se) { + if (rem_has_sess_expires && (rem_sess_expires < min_se)) { session_interval = min_se; } else { - if (rem_sess_expires < session_interval) + if (rem_has_sess_expires && (rem_sess_expires < session_interval)) session_interval = rem_sess_expires; } + DBG("using actual session interval %u\n", session_interval); + // determine session refresher -- cf rfc4028 Table 2 // only if the remote party supports timer and asks // to be refresher we will let the remote party do it.