]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Wed Aug 6 15:17:30 EDT 2008 Pekka Pessi <first.last@nokia.com>
authorMichael Jerris <mike@jerris.com>
Tue, 12 Aug 2008 17:06:35 +0000 (17:06 +0000)
committerMichael Jerris <mike@jerris.com>
Tue, 12 Aug 2008 17:06:35 +0000 (17:06 +0000)
  * nua_subnotref.c: nua_unsubscribe() should not terminate usage w/ final response

  Do not terminate until final NOTIFY or timeout.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9275 d0543943-73ff-0310-b7d9-9358b9ac24b2

libs/sofia-sip/.update
libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c
libs/sofia-sip/tests/test_simple.c

index 50310070baa4752e7bd646679eb4acd82572d96d..89bf81e74281c28110238128a8d8e9f333c16b86 100644 (file)
@@ -1 +1 @@
-Tue Aug 12 13:06:05 EDT 2008
+Tue Aug 12 13:06:30 EDT 2008
index 5a30b4cadb56e1acb7c6307bc62feba84bd7935e..fa2898b105470de62a2b1aa7303b7134bc95698b 100644 (file)
@@ -249,7 +249,7 @@ static int nua_subscribe_client_request(nua_client_request_t *cr,
   nua_dialog_usage_t *du = cr->cr_usage; 
   sip_time_t expires = 0;
 
-  if (cr->cr_event != nua_r_subscribe || !du || du->du_shutdown)
+  if (cr->cr_event == nua_r_destroy || !du || du->du_shutdown)
     cr->cr_terminating = 1;
 
   if (du) {
@@ -281,7 +281,7 @@ static int nua_subscribe_client_request(nua_client_request_t *cr,
 
     nua_dialog_usage_reset_refresh(du); /* during SUBSCRIBE transaction */
     
-    if (cr->cr_terminating)
+    if (cr->cr_terminating || cr->cr_event != nua_r_subscribe)
       expires = eu->eu_delta = 0;
     else if (sip->sip_expires)
       /* Use value specified by application or negotiated with Min-Expires */
index 1f0010925be715eb920bba8fe13694ddbea97303..d396415d5eada6593638ed22b30ea1f5090f26b7 100644 (file)
@@ -954,7 +954,10 @@ int test_subscribe_notify(struct context *ctx)
   TEST(e->data->e_status, 200);
   r_tags = e->data->e_tags;
   TEST_1(tl_find(r_tags, nutag_substate));
-  TEST(tl_find(r_tags, nutag_substate)->t_value, nua_substate_terminated);
+  if (en1 == a->events->head)
+    TEST(tl_find(r_tags, nutag_substate)->t_value, nua_substate_terminated);
+  else
+    TEST(tl_find(r_tags, nutag_substate)->t_value, nua_substate_active);
   TEST_1(sip = sip_object(e->data->e_msg));
   TEST_1(sip->sip_expires);
   TEST_1(sip->sip_expires->ex_delta == 0);