From b489249f60b1db403469c17c1586e6d33a222781 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Tue, 12 Aug 2008 17:06:35 +0000 Subject: [PATCH] Wed Aug 6 15:17:30 EDT 2008 Pekka Pessi * 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 | 2 +- libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c | 4 ++-- libs/sofia-sip/tests/test_simple.c | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index 50310070ba..89bf81e742 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Tue Aug 12 13:06:05 EDT 2008 +Tue Aug 12 13:06:30 EDT 2008 diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c b/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c index 5a30b4cadb..fa2898b105 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c @@ -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 */ diff --git a/libs/sofia-sip/tests/test_simple.c b/libs/sofia-sip/tests/test_simple.c index 1f0010925b..d396415d5e 100644 --- a/libs/sofia-sip/tests/test_simple.c +++ b/libs/sofia-sip/tests/test_simple.c @@ -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);