diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index b3e674b88b..ec0a895cdb 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Mon May 31 08:54:37 EDT 2010 +Mon May 31 09:47:08 EDT 2010 diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c b/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c index bbbc534a81..83e5f91658 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c @@ -1552,6 +1552,7 @@ static void nua_session_usage_refresh(nua_handle_t *nh, return; if (ss->ss_timer->refresher == nua_remote_refresher) { + SU_DEBUG_3(("nua(%p): session almost expired, sending BYE before timeout.\n", (void *)nh)); ss->ss_reason = "SIP;cause=408;text=\"Session timeout\""; nua_stack_bye(nh->nh_nua, nh, nua_r_bye, NULL); return; @@ -4493,14 +4494,14 @@ session_timer_set(nua_session_usage_t *ss, int uas) t->timer_set = 1; } else if (t->refresher == nua_remote_refresher) { - /* if the side not performing refreshes does not receive a - session refresh request before the session expiration, it SHOULD send - a BYE to terminate the session, slightly before the session - expiration. The minimum of 32 seconds and one third of the session - interval is RECOMMENDED. */ + /* RFC 4028 10.3 and 10.4: Send BYE before the session expires. + Increased interval from 2/3 to 9/10 of session expiration delay + because some endpoints won't UPDATE early enough with very short + sessions (e.g. 120). */ + unsigned interval = t->interval; - interval -= 32 > interval / 3 ? interval / 3 : 32; + interval -= 32 > interval / 10 ? interval / 10 : 32; nua_dialog_usage_set_refresh_range(du, interval, interval); t->timer_set = 1;