[Freeswitch-svn] [commit] r7758 - freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua

Freeswitch SVN mikej at freeswitch.org
Wed Feb 27 16:55:20 EST 2008


Author: mikej
Date: Wed Feb 27 16:55:20 2008
New Revision: 7758

Modified:
   freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c

Log:
Merge back a couple patches (curse you darcs)

Wed Feb 13 09:23:24 EST 2008  Pekka Pessi <Pekka.Pessi at nokia.com>
  * nua_subnotref.c: do not terminate subscriptions immediately after receiving 200 OK to un-SUBSCRIBE

Mon Feb 25 09:49:39 EST 2008  Pekka.Pessi at nokia.com
  * nua_subnotref.c: fixed problems re-calculating the subscription duration upon NOTIFY
  
  Thanks for Colin Whittaker for reporting this problem.



Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c	(original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c	Wed Feb 27 16:55:20 2008
@@ -371,6 +371,9 @@
     else
       delta = 0;
 
+    if (delta > eu->eu_expires)
+      delta = eu->eu_expires;
+
     if (win_messenger_enable && !nua_dialog_is_established(nh->nh_ds)) {
       /* Notify from messanger does not match with dialog tag */ 
       nh->nh_ds->ds_remote_tag = su_strdup(nh->nh_home, "");
@@ -379,23 +382,23 @@
     if (delta > 0) {
       nua_dialog_usage_set_refresh(du, delta);
     } 
-    else if (!eu->eu_notified) {
-      /* This is a fetch: subscription was really terminated
-	 but we wait 32 seconds for NOTIFY. */
-      delta = 64 * NTA_SIP_T1 / 1000;
-
-      if (win_messenger_enable)
-	delta = 4 * 60; 	/* Wait 4 minutes for NOTIFY from Messenger */
+    else {
+      if (eu->eu_substate == nua_substate_terminated) {
+	if (!eu->eu_notified)
+	  eu->eu_substate = nua_substate_embryonic;
+      }
 
-      eu->eu_final_wait = 1;
+      if (eu->eu_substate != nua_substate_terminated) {
+	/* Wait 32 seconds for NOTIFY. */
+	delta = 64 * NTA_SIP_T1 / 1000;
 	
-      if (eu->eu_substate == nua_substate_terminated)
-	eu->eu_substate = nua_substate_embryonic;
+	eu->eu_final_wait = 1;
 
-      nua_dialog_usage_set_refresh_range(du, delta, delta);
-    }
-    else {
-      eu->eu_substate = nua_substate_terminated;
+	if (!eu->eu_notified && win_messenger_enable)
+	  delta = 4 * 60; 	/* Wait 4 minutes for NOTIFY from Messenger */
+
+	nua_dialog_usage_set_refresh_range(du, delta, delta);
+      }
     }
 
     substate = eu->eu_substate;
@@ -650,8 +653,6 @@
     if (substate == nua_substate_active || substate == nua_substate_pending) {
       if (subs && subs->ss_expires)
 	delta = strtoul(subs->ss_expires, NULL, 10);
-      else
-	delta = eu->eu_expires;
     }
     else if (substate == nua_substate_embryonic) {
       if (subs && subs->ss_reason) {
@@ -689,7 +690,8 @@
     nua_dialog_usage_set_refresh_range(du, retry, retry + 5);
   }
   else {
-    nua_dialog_usage_set_refresh(du, delta);
+    if (delta < SIP_TIME_MAX)
+      nua_dialog_usage_set_refresh(du, delta);
   }
 
   return retval;



More information about the Freeswitch-svn mailing list