]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
sofia-sip: extend timeout for session expires on short timeouts to be 90% of timeout...
authorMichael Jerris <mike@jerris.com>
Mon, 31 May 2010 13:50:44 +0000 (09:50 -0400)
committerMichael Jerris <mike@jerris.com>
Mon, 31 May 2010 13:50:44 +0000 (09:50 -0400)
libs/sofia-sip/.update
libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c

index b3e674b88b99dd2e4ccdb1725d66925c66d47c89..ec0a895cdbb8b5a0b8e67b62b781d9475713bd9f 100644 (file)
@@ -1 +1 @@
-Mon May 31 08:54:37 EDT 2010
+Mon May 31 09:47:08 EDT 2010
index bbbc534a811080b43214bb6de5eecd4573989ab6..83e5f9165895789ad5f94ffd9579a0b5badb648a 100644 (file)
@@ -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;