From 76f57d02bb6c665690d0bf478e0df360bbe45f30 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Tue, 3 Mar 2009 22:00:18 +0000 Subject: [PATCH] Tue Mar 3 11:30:32 CST 2009 Pekka Pessi * check_nua: added test case for CANCELed INVITE timing out git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12397 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/sofia-sip/.update | 2 +- .../libsofia-sip-ua/nua/check_session.c | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index 7ce7b88b5c..8e54af0426 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Tue Mar 3 11:27:12 CST 2009 +Tue Mar 3 15:59:49 CST 2009 diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c b/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c index 710ca6e5f2..5598d2aa28 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c @@ -1005,6 +1005,53 @@ START_TEST(cancel_2_2_7) } END_TEST + +START_TEST(cancel_2_2_8) +{ + nua_handle_t *nh; + struct message *invite, *cancel; + int timeout; + + s2_case("2.2.8", "CANCEL and INVITE times out", + "NUA is caller, NUA sends CANCEL after receiving 180 " + "but UAS never responds."); + + nh = nua_handle(nua, NULL, SIPTAG_TO(s2sip->aor), TAG_END()); + + nua_invite(nh, SOATAG_USER_SDP_STR("m=audio 5004 RTP/AVP 0 8"), + TAG_END()); + fail_unless(s2_check_callstate(nua_callstate_calling)); + + invite = s2_sip_wait_for_request(SIP_METHOD_INVITE); + process_offer(invite); + respond_with_sdp( + invite, dialog, SIP_180_RINGING, + SIPTAG_CONTENT_DISPOSITION_STR("session;handling=optional"), + TAG_END()); + fail_unless(s2_check_event(nua_r_invite, 180)); + fail_unless(s2_check_callstate(nua_callstate_proceeding)); + + nua_cancel(nh, TAG_END()); + cancel = s2_sip_wait_for_request(SIP_METHOD_CANCEL); + s2_sip_free_message(cancel); + fail_if(!cancel); + + /* Now, time out both CANCEL and INVITE */ + for (timeout = 0; timeout < 34; timeout++) { + s2_nua_fast_forward(1, s2base->root); + cancel = s2_sip_next_request(SIP_METHOD_CANCEL); + if (cancel) + s2_sip_free_message(cancel); + } + + fail_unless(s2_check_event(nua_r_cancel, 408)); + fail_unless(s2_check_event(nua_r_invite, 408)); + fail_unless(s2_check_callstate(nua_callstate_terminated)); + nua_handle_destroy(nh); +} +END_TEST + + TCase *cancel_tcase(int threading) { TCase *tc = tcase_create("2.2 - CANCEL"); @@ -1017,6 +1064,7 @@ TCase *cancel_tcase(int threading) if (XXX) tcase_add_test(tc, cancel_2_2_5); tcase_add_test(tc, cancel_2_2_6); tcase_add_test(tc, cancel_2_2_7); + tcase_add_test(tc, cancel_2_2_8); return tc; }