Tue Mar 3 12:15:01 CST 2009 Pekka Pessi <first.last@nokia.com>

* nua: check_nua now uses s2base.h and s2sip.h



git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12398 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Michael Jerris 2009-03-03 22:00:56 +00:00
parent 76f57d02bb
commit 522b3c4858
9 changed files with 770 additions and 1657 deletions

View File

@ -1 +1 @@
Tue Mar 3 15:59:49 CST 2009 Tue Mar 3 16:00:35 CST 2009

View File

@ -55,8 +55,6 @@ check_nua_SOURCES = check_nua.c check_nua.h \
check_nua_LDADD = $(nua_libs) ${top_builddir}/s2check/libs2.a \ check_nua_LDADD = $(nua_libs) ${top_builddir}/s2check/libs2.a \
@CHECK_LIBS@ @CHECK_LIBS@
check_nua_CFLAGS = $(CFLAGS) -I$(top_srcdir)/s2check
nua_libs = libnua.la \ nua_libs = libnua.la \
../iptsec/libiptsec.la \ ../iptsec/libiptsec.la \
../ipt/libipt.la \ ../ipt/libipt.la \
@ -84,6 +82,6 @@ EXTRA_DIST = nua.docs $(BUILT_SOURCES)
include $(top_srcdir)/rules/sofia.am include $(top_srcdir)/rules/sofia.am
INCLUDES = ${INTERNAL_INCLUDES} INCLUDES = ${INTERNAL_INCLUDES} -I$(top_srcdir)/s2check
TAG_DLL_FLAGS = LIST=nua_tag_list TAG_DLL_FLAGS = LIST=nua_tag_list

View File

@ -71,7 +71,7 @@ static void etsi_setup(void)
NUTAG_OUTBOUND("no-options-keepalive, no-validate"), NUTAG_OUTBOUND("no-options-keepalive, no-validate"),
TAG_END()); TAG_END());
soa = soa_create(NULL, s2->root, NULL); soa = soa_create(NULL, s2base->root, NULL);
fail_if(!soa); fail_if(!soa);
@ -148,7 +148,7 @@ respond_with_sdp(struct message *request,
fail_if(soa_get_local_sdp(soa, NULL, &body, &bodylen) != 1); fail_if(soa_get_local_sdp(soa, NULL, &body, &bodylen) != 1);
ta_start(ta, tag, value); ta_start(ta, tag, value);
s2_respond_to(request, dialog, status, phrase, s2_sip_respond_to(request, dialog, status, phrase,
SIPTAG_CONTENT_TYPE_STR("application/sdp"), SIPTAG_CONTENT_TYPE_STR("application/sdp"),
SIPTAG_PAYLOAD_STR(body), SIPTAG_PAYLOAD_STR(body),
SIPTAG_CONTENT_DISPOSITION_STR("session"), SIPTAG_CONTENT_DISPOSITION_STR("session"),
@ -168,7 +168,7 @@ invite_sent_by_nua(nua_handle_t *nh,
fail_unless(s2_check_callstate(nua_callstate_calling)); fail_unless(s2_check_callstate(nua_callstate_calling));
return s2_wait_for_request(SIP_METHOD_INVITE); return s2_sip_wait_for_request(SIP_METHOD_INVITE);
} }
static void static void
@ -182,10 +182,10 @@ bye_by_nua(struct dialog *dialog, nua_handle_t *nh,
nua_bye(nh, ta_tags(ta)); nua_bye(nh, ta_tags(ta));
ta_end(ta); ta_end(ta);
bye = s2_wait_for_request(SIP_METHOD_BYE); bye = s2_sip_wait_for_request(SIP_METHOD_BYE);
fail_if(!bye); fail_if(!bye);
s2_respond_to(bye, dialog, SIP_200_OK, TAG_END()); s2_sip_respond_to(bye, dialog, SIP_200_OK, TAG_END());
s2_free_message(bye); s2_sip_free_message(bye);
fail_unless(s2_check_event(nua_r_bye, 200)); fail_unless(s2_check_event(nua_r_bye, 200));
fail_unless(s2_check_callstate(nua_callstate_terminated)); fail_unless(s2_check_callstate(nua_callstate_terminated));
} }
@ -208,7 +208,7 @@ START_TEST(SIP_CC_OE_CE_V_019)
"sends an ACK request with a To header identical to the " "sends an ACK request with a To header identical to the "
"received one for each received Success (200 OK) responses."); "received one for each received Success (200 OK) responses.");
nh = nua_handle(nua, NULL, SIPTAG_TO(s2->local), TAG_END()); nh = nua_handle(nua, NULL, SIPTAG_TO(s2sip->aor), TAG_END());
invite = invite_sent_by_nua(nh, TAG_END()); invite = invite_sent_by_nua(nh, TAG_END());
@ -218,17 +218,17 @@ START_TEST(SIP_CC_OE_CE_V_019)
fail_unless(s2_check_event(nua_r_invite, 200)); fail_unless(s2_check_event(nua_r_invite, 200));
fail_unless(s2_check_callstate(nua_callstate_ready)); fail_unless(s2_check_callstate(nua_callstate_ready));
fail_unless(s2_check_request(SIP_METHOD_ACK)); fail_unless(s2_sip_check_request(SIP_METHOD_ACK));
respond_with_sdp(invite, d2, SIP_200_OK, TAG_END()); respond_with_sdp(invite, d2, SIP_200_OK, TAG_END());
s2_free_message(invite); s2_sip_free_message(invite);
fail_unless(s2_check_request(SIP_METHOD_ACK)); fail_unless(s2_sip_check_request(SIP_METHOD_ACK));
bye = s2_wait_for_request(SIP_METHOD_BYE); bye = s2_sip_wait_for_request(SIP_METHOD_BYE);
fail_if(!bye); fail_if(!bye);
s2_respond_to(bye, d2, SIP_200_OK, TAG_END()); s2_sip_respond_to(bye, d2, SIP_200_OK, TAG_END());
s2_free_message(bye); s2_sip_free_message(bye);
bye_by_nua(d1, nh, TAG_END()); bye_by_nua(d1, nh, TAG_END());
@ -248,39 +248,39 @@ START_TEST(SIP_CC_OE_CE_TI_008)
"that matches the transaction, still answer with an " "that matches the transaction, still answer with an "
"ACK request until timer D set to at least 32 second expires."); "ACK request until timer D set to at least 32 second expires.");
nh = nua_handle(nua, NULL, SIPTAG_TO(s2->local), TAG_END()); nh = nua_handle(nua, NULL, SIPTAG_TO(s2sip->aor), TAG_END());
invite = invite_sent_by_nua(nh, TAG_END()); invite = invite_sent_by_nua(nh, TAG_END());
s2_respond_to(invite, d1, 404, "First not found", TAG_END()); s2_sip_respond_to(invite, d1, 404, "First not found", TAG_END());
fail_unless(s2_check_event(nua_r_invite, 404)); fail_unless(s2_check_event(nua_r_invite, 404));
fail_unless(s2_check_callstate(nua_callstate_terminated)); fail_unless(s2_check_callstate(nua_callstate_terminated));
fail_unless(s2_check_request(SIP_METHOD_ACK)); fail_unless(s2_sip_check_request(SIP_METHOD_ACK));
s2_fast_forward(5, s2->root); s2_nua_fast_forward(5, s2base->root);
s2_respond_to(invite, d1, 404, "Not found after 5 seconds", TAG_END()); s2_sip_respond_to(invite, d1, 404, "Not found after 5 seconds", TAG_END());
fail_unless(s2_check_request(SIP_METHOD_ACK)); fail_unless(s2_sip_check_request(SIP_METHOD_ACK));
s2_fast_forward(5, s2->root); s2_nua_fast_forward(5, s2base->root);
s2_respond_to(invite, d1, 404, "Not found after 10 seconds", TAG_END()); s2_sip_respond_to(invite, d1, 404, "Not found after 10 seconds", TAG_END());
fail_unless(s2_check_request(SIP_METHOD_ACK)); fail_unless(s2_sip_check_request(SIP_METHOD_ACK));
s2_fast_forward(21, s2->root); s2_nua_fast_forward(21, s2base->root);
s2_respond_to(invite, d1, 404, "Not found after 31 seconds", TAG_END()); s2_sip_respond_to(invite, d1, 404, "Not found after 31 seconds", TAG_END());
fail_unless(s2_check_request(SIP_METHOD_ACK)); fail_unless(s2_sip_check_request(SIP_METHOD_ACK));
s2_fast_forward(5, s2->root); s2_nua_fast_forward(5, s2base->root);
/* Wake up nua thread and let it time out INVITE transaction */ /* Wake up nua thread and let it time out INVITE transaction */
nua_set_params(s2->nua, TAG_END()); nua_set_params(s2->nua, TAG_END());
s2_check_event(nua_r_set_params, 0); s2_check_event(nua_r_set_params, 0);
s2_respond_to(invite, d1, 404, "Not found after 32 seconds", TAG_END()); s2_sip_respond_to(invite, d1, 404, "Not found after 32 seconds", TAG_END());
s2_free_message(invite); s2_sip_free_message(invite);
fail_if(s2_check_request_timeout(SIP_METHOD_ACK, 500)); fail_if(s2_sip_check_request_timeout(SIP_METHOD_ACK, 3));
nua_handle_destroy(nh); nua_handle_destroy(nh);
} }
@ -299,7 +299,7 @@ START_TEST(SIP_CC_OE_CE_TI_011_012)
"on receipt of a retransmitted Success (200 OK) " "on receipt of a retransmitted Success (200 OK) "
"responses does not send an ACK request."); "responses does not send an ACK request.");
nh = nua_handle(nua, NULL, SIPTAG_TO(s2->local), TAG_END()); nh = nua_handle(nua, NULL, SIPTAG_TO(s2sip->aor), TAG_END());
invite = invite_sent_by_nua(nh, TAG_END()); invite = invite_sent_by_nua(nh, TAG_END());
@ -309,29 +309,29 @@ START_TEST(SIP_CC_OE_CE_TI_011_012)
fail_unless(s2_check_event(nua_r_invite, 200)); fail_unless(s2_check_event(nua_r_invite, 200));
fail_unless(s2_check_callstate(nua_callstate_ready)); fail_unless(s2_check_callstate(nua_callstate_ready));
fail_unless(s2_check_request(SIP_METHOD_ACK)); fail_unless(s2_sip_check_request(SIP_METHOD_ACK));
s2_fast_forward(5, s2->root); s2_nua_fast_forward(5, s2base->root);
respond_with_sdp(invite, d1, SIP_200_OK, TAG_END()); respond_with_sdp(invite, d1, SIP_200_OK, TAG_END());
fail_unless(s2_check_request(SIP_METHOD_ACK)); fail_unless(s2_sip_check_request(SIP_METHOD_ACK));
s2_fast_forward(5, s2->root); s2_nua_fast_forward(5, s2base->root);
respond_with_sdp(invite, d1, SIP_200_OK, TAG_END()); respond_with_sdp(invite, d1, SIP_200_OK, TAG_END());
fail_unless(s2_check_request(SIP_METHOD_ACK)); fail_unless(s2_sip_check_request(SIP_METHOD_ACK));
s2_fast_forward(21, s2->root); s2_nua_fast_forward(20, s2base->root);
respond_with_sdp(invite, d1, SIP_200_OK, TAG_END()); respond_with_sdp(invite, d1, SIP_200_OK, TAG_END());
fail_unless(s2_check_request(SIP_METHOD_ACK)); fail_unless(s2_sip_check_request(SIP_METHOD_ACK));
s2_fast_forward(5, s2->root); /* Stack times out the INVITE transaction */
s2_nua_fast_forward(5, s2base->root);
/* Wake up nua thread and let it time out INVITE transaction */ respond_with_sdp(invite, d1, SIP_200_OK,
nua_set_params(s2->nua, TAG_END()); SIPTAG_SUBJECT_STR("Stray 200 OK"),
s2_check_event(nua_r_set_params, 0); TAG_END());
s2_sip_free_message(invite);
respond_with_sdp(invite, d1, SIP_200_OK, TAG_END()); mark_point();
s2_free_message(invite); fail_if(s2_sip_check_request_timeout(SIP_METHOD_ACK, 3));
fail_if(s2_check_request_timeout(SIP_METHOD_ACK, 500));
bye_by_nua(d1, nh, TAG_END()); bye_by_nua(d1, nh, TAG_END());

View File

@ -33,6 +33,7 @@
#include "config.h" #include "config.h"
#include "test_s2.h"
#include "check_nua.h" #include "check_nua.h"
#include <stdlib.h> #include <stdlib.h>
@ -43,8 +44,6 @@
#include <fnmatch.h> #include <fnmatch.h>
#endif #endif
#include "test_s2.h"
static void usage(int exitcode) static void usage(int exitcode)
{ {
fprintf(exitcode ? stderr : stdout, fprintf(exitcode ? stderr : stdout,
@ -62,6 +61,8 @@ int main(int argc, char *argv[])
s2_tester = "check_nua"; s2_tester = "check_nua";
s2_suite("N2");
if (getenv("CHECK_NUA_VERBOSE")) if (getenv("CHECK_NUA_VERBOSE"))
s2_start_stop = strtoul(getenv("CHECK_NUA_VERBOSE"), NULL, 10); s2_start_stop = strtoul(getenv("CHECK_NUA_VERBOSE"), NULL, 10);

View File

@ -75,7 +75,7 @@ static void pingpong_setup(void)
TPTAG_PINGPONG(20000), TPTAG_PINGPONG(20000),
TPTAG_KEEPALIVE(10000), TPTAG_KEEPALIVE(10000),
TAG_END()); TAG_END());
tport_set_params(s2->tcp.tport, TPTAG_PONG2PING(1), TAG_END()); tport_set_params(s2sip->tcp.tport, TPTAG_PONG2PING(1), TAG_END());
} }
static void pingpong_thread_setup(void) static void pingpong_thread_setup(void)
@ -121,12 +121,12 @@ START_TEST(register_1_0_1)
nua_register(nh, TAG_END()); nua_register(nh, TAG_END());
fail_unless((m = s2_wait_for_request(SIP_METHOD_REGISTER)) != NULL, NULL); fail_unless((m = s2_sip_wait_for_request(SIP_METHOD_REGISTER)) != NULL, NULL);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_403_FORBIDDEN, SIP_403_FORBIDDEN,
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
nua_handle_destroy(nh); nua_handle_destroy(nh);
@ -156,38 +156,38 @@ START_TEST(register_1_1_2)
nua_register(nh, TAG_END()); nua_register(nh, TAG_END());
m = s2_wait_for_request(SIP_METHOD_REGISTER); fail_if(!m); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER); fail_if(!m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_407_PROXY_AUTH_REQUIRED, SIP_407_PROXY_AUTH_REQUIRED,
SIPTAG_PROXY_AUTHENTICATE_STR(s2_auth_digest_str), SIPTAG_PROXY_AUTHENTICATE_STR(s2_auth_digest_str),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
s2_check_event(nua_r_register, 407); s2_check_event(nua_r_register, 407);
nua_authenticate(nh, NUTAG_AUTH(s2_auth_credentials), TAG_END()); nua_authenticate(nh, NUTAG_AUTH(s2_auth_credentials), TAG_END());
m = s2_wait_for_request(SIP_METHOD_REGISTER); fail_if(!m); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER); fail_if(!m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_401_UNAUTHORIZED, SIP_401_UNAUTHORIZED,
SIPTAG_WWW_AUTHENTICATE_STR(s2_auth2_digest_str), SIPTAG_WWW_AUTHENTICATE_STR(s2_auth2_digest_str),
SIPTAG_PROXY_AUTHENTICATE_STR(s2_auth_digest_str), SIPTAG_PROXY_AUTHENTICATE_STR(s2_auth_digest_str),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
s2_check_event(nua_r_register, 401); s2_check_event(nua_r_register, 401);
nua_authenticate(nh, NUTAG_AUTH(s2_auth2_credentials), TAG_END()); nua_authenticate(nh, NUTAG_AUTH(s2_auth2_credentials), TAG_END());
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m);
fail_if(!m->sip->sip_authorization); fail_if(!m->sip->sip_authorization);
fail_if(!m->sip->sip_proxy_authorization); fail_if(!m->sip->sip_proxy_authorization);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
assert(s2->registration->contact != NULL); assert(s2->registration->contact != NULL);
s2_check_event(nua_r_register, 200); s2_check_event(nua_r_register, 200);
@ -237,32 +237,32 @@ START_TEST(register_1_2_1) {
nua_register(nh, TAG_END()); nua_register(nh, TAG_END());
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m);
fail_if(!m->sip->sip_contact || m->sip->sip_contact->m_next); fail_if(!m->sip->sip_contact || m->sip->sip_contact->m_next);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
assert(s2->registration->contact != NULL); assert(s2->registration->contact != NULL);
s2_check_event(nua_r_register, 100); s2_check_event(nua_r_register, 100);
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m);
fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next); fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
fail_unless(s2->registration->contact != NULL); fail_unless(s2->registration->contact != NULL);
fail_if(s2->registration->contact->m_next != NULL); fail_if(s2->registration->contact->m_next != NULL);
@ -286,19 +286,19 @@ static nua_handle_t *make_auth_natted_register(
nua_register(nh, ta_tags(ta)); nua_register(nh, ta_tags(ta));
ta_end(ta); ta_end(ta);
m = s2_wait_for_request(SIP_METHOD_REGISTER); fail_if(!m); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER); fail_if(!m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_401_UNAUTHORIZED, SIP_401_UNAUTHORIZED,
SIPTAG_WWW_AUTHENTICATE_STR(s2_auth_digest_str), SIPTAG_WWW_AUTHENTICATE_STR(s2_auth_digest_str),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
s2_check_event(nua_r_register, 401); s2_check_event(nua_r_register, 401);
nua_authenticate(nh, NUTAG_AUTH(s2_auth_credentials), TAG_END()); nua_authenticate(nh, NUTAG_AUTH(s2_auth_credentials), TAG_END());
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m);
fail_if(!m->sip->sip_authorization); fail_if(!m->sip->sip_authorization);
/* should not unregister the previous contact /* should not unregister the previous contact
@ -307,12 +307,12 @@ static nua_handle_t *make_auth_natted_register(
fail_if(m->sip->sip_contact->m_next); fail_if(m->sip->sip_contact->m_next);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
assert(s2->registration->contact != NULL); assert(s2->registration->contact != NULL);
s2_check_event(nua_r_register, 200); s2_check_event(nua_r_register, 200);
@ -350,61 +350,61 @@ START_TEST(register_1_2_2_2)
mark_point(); mark_point();
m = s2_wait_for_request(SIP_METHOD_OPTIONS); m = s2_sip_wait_for_request(SIP_METHOD_OPTIONS);
fail_if(!m); fail_if(!m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_407_PROXY_AUTH_REQUIRED, SIP_407_PROXY_AUTH_REQUIRED,
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
SIPTAG_PROXY_AUTHENTICATE_STR(s2_auth_digest_str), SIPTAG_PROXY_AUTHENTICATE_STR(s2_auth_digest_str),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
mark_point(); mark_point();
m = s2_wait_for_request(SIP_METHOD_OPTIONS); m = s2_sip_wait_for_request(SIP_METHOD_OPTIONS);
fail_if(!m); fail_if(!m->sip->sip_proxy_authorization); fail_if(!m); fail_if(!m->sip->sip_proxy_authorization);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
su_root_step(s2->root, 20); su_root_step(s2->root, 20); su_root_step(s2base->root, 20); su_root_step(s2base->root, 20);
s2_fast_forward(120, s2->root); /* Default keepalive interval */ s2_nua_fast_forward(120, s2base->root); /* Default keepalive interval */
mark_point(); mark_point();
m = s2_wait_for_request(SIP_METHOD_OPTIONS); m = s2_sip_wait_for_request(SIP_METHOD_OPTIONS);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
su_root_step(s2->root, 20); su_root_step(s2->root, 20); su_root_step(s2base->root, 20); su_root_step(s2base->root, 20);
s2_fast_forward(120, s2->root); /* Default keepalive interval */ s2_nua_fast_forward(120, s2base->root); /* Default keepalive interval */
mark_point(); mark_point();
receive_natted = "received=4.255.255.10"; receive_natted = "received=4.255.255.10";
m = s2_wait_for_request(SIP_METHOD_OPTIONS); m = s2_sip_wait_for_request(SIP_METHOD_OPTIONS);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
s2_check_event(nua_i_outbound, 0); s2_check_event(nua_i_outbound, 0);
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m->sip->sip_authorization); fail_if(!m); fail_if(!m->sip->sip_authorization);
fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next); fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
s2_check_event(nua_r_register, 200); s2_check_event(nua_r_register, 200);
@ -434,33 +434,33 @@ START_TEST(register_1_2_2_3)
receive_natted = "received=4.255.255.10"; receive_natted = "received=4.255.255.10";
s2_fast_forward(3600, s2->root); s2_nua_fast_forward(3600, s2base->root);
mark_point(); mark_point();
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m->sip->sip_authorization); fail_if(!m); fail_if(!m->sip->sip_authorization);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
s2_check_event(nua_r_register, 100); s2_check_event(nua_r_register, 100);
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m->sip->sip_authorization); fail_if(!m); fail_if(!m->sip->sip_authorization);
fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next); fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
fail_unless(s2->registration->contact != NULL); fail_unless(s2->registration->contact != NULL);
fail_if(s2->registration->contact->m_next != NULL); fail_if(s2->registration->contact->m_next != NULL);
@ -484,28 +484,28 @@ START_TEST(register_1_2_3) {
mark_point(); mark_point();
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m);
fail_if(!m->sip->sip_contact || m->sip->sip_contact->m_next); fail_if(!m->sip->sip_contact || m->sip->sip_contact->m_next);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
400, "Bad Contact", 400, "Bad Contact",
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
s2_check_event(nua_r_register, 100); s2_check_event(nua_r_register, 100);
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
fail_unless(s2->registration->contact != NULL); fail_unless(s2->registration->contact != NULL);
fail_if(s2->registration->contact->m_next != NULL); fail_if(s2->registration->contact->m_next != NULL);
@ -530,34 +530,34 @@ START_TEST(register_1_3_1)
nh = nua_handle(nua, NULL, TAG_END()); nh = nua_handle(nua, NULL, TAG_END());
nua_register(nh, NUTAG_PROXY(s2->tcp.contact->m_url), TAG_END()); nua_register(nh, NUTAG_PROXY(s2sip->tcp.contact->m_url), TAG_END());
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m->sip->sip_contact || m->sip->sip_contact->m_next); fail_if(!m); fail_if(!m->sip->sip_contact || m->sip->sip_contact->m_next);
fail_if(!tport_is_tcp(m->tport)); fail_if(!tport_is_tcp(m->tport));
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
assert(s2->registration->contact != NULL); assert(s2->registration->contact != NULL);
s2_check_event(nua_r_register, 100); s2_check_event(nua_r_register, 100);
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m);
fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next); fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
fail_unless(s2->registration->contact != NULL); fail_unless(s2->registration->contact != NULL);
fail_if(s2->registration->contact->m_next != NULL); fail_if(s2->registration->contact->m_next != NULL);
@ -581,7 +581,7 @@ START_TEST(register_1_3_2_1)
mark_point(); mark_point();
s2->registration->nh = nh; s2->registration->nh = nh;
make_auth_natted_register(nh, NUTAG_PROXY(s2->tcp.contact->m_url), TAG_END()); make_auth_natted_register(nh, NUTAG_PROXY(s2sip->tcp.contact->m_url), TAG_END());
fail_if(!tport_is_tcp(s2->registration->tport)); fail_if(!tport_is_tcp(s2->registration->tport));
s2_register_teardown(); s2_register_teardown();
} }
@ -604,38 +604,38 @@ START_TEST(register_1_3_2_2)
mark_point(); mark_point();
s2->registration->nh = nh; s2->registration->nh = nh;
make_auth_natted_register( make_auth_natted_register(
nh, NUTAG_PROXY(s2->tcp.contact->m_url), nh, NUTAG_PROXY(s2sip->tcp.contact->m_url),
NUTAG_OUTBOUND("no-options-keepalive, no-validate"), NUTAG_OUTBOUND("no-options-keepalive, no-validate"),
TAG_END()); TAG_END());
fail_if(!tport_is_tcp(s2->registration->tport)); fail_if(!tport_is_tcp(s2->registration->tport));
tport_shutdown(s2->registration->tport, 2); tport_shutdown(s2->registration->tport, 2);
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m->sip->sip_authorization); fail_if(!m); fail_if(!m->sip->sip_authorization);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
/* The "NAT binding" changed when new TCP connection is established */ /* The "NAT binding" changed when new TCP connection is established */
/* => NUA re-REGISTERs with newly detected contact */ /* => NUA re-REGISTERs with newly detected contact */
s2_check_event(nua_r_register, 100); s2_check_event(nua_r_register, 100);
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m->sip->sip_authorization); fail_if(!m); fail_if(!m->sip->sip_authorization);
fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next); fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
s2_check_event(nua_r_register, 200); s2_check_event(nua_r_register, 200);
@ -667,22 +667,22 @@ START_TEST(register_1_3_3_1)
/* NTA tries with UDP, we drop them */ /* NTA tries with UDP, we drop them */
for (;;) { for (;;) {
m = s2_wait_for_request(SIP_METHOD_REGISTER); fail_if(!m); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER); fail_if(!m);
if (!tport_is_udp(m->tport)) /* Drop UDP */ if (!tport_is_udp(m->tport)) /* Drop UDP */
break; break;
s2_free_message(m); s2_sip_free_message(m);
s2_fast_forward(4, s2->root); s2_nua_fast_forward(4, s2base->root);
} }
tcp = tport_ref(m->tport); tcp = tport_ref(m->tport);
/* Respond to request over TCP */ /* Respond to request over TCP */
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_401_UNAUTHORIZED, SIP_401_UNAUTHORIZED,
SIPTAG_WWW_AUTHENTICATE_STR(s2_auth_digest_str), SIPTAG_WWW_AUTHENTICATE_STR(s2_auth_digest_str),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
s2_check_event(nua_r_register, 401); s2_check_event(nua_r_register, 401);
nua_authenticate(nh, NUTAG_AUTH(s2_auth_credentials), TAG_END()); nua_authenticate(nh, NUTAG_AUTH(s2_auth_credentials), TAG_END());
@ -690,32 +690,32 @@ START_TEST(register_1_3_3_1)
tport_set_params(tcp, TPTAG_PONG2PING(0), TAG_END()); tport_set_params(tcp, TPTAG_PONG2PING(0), TAG_END());
/* Now request over UDP ... registering TCP contact! */ /* Now request over UDP ... registering TCP contact! */
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m->sip->sip_authorization); fail_if(!m); fail_if(!m->sip->sip_authorization);
s2_save_register(m); s2_save_register(m);
fail_unless( fail_unless(
url_has_param(s2->registration->contact->m_url, "transport=tcp")); url_has_param(s2->registration->contact->m_url, "transport=tcp"));
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
/* NUA detects oops... re-registers UDP */ /* NUA detects oops... re-registers UDP */
s2_check_event(nua_r_register, 100); s2_check_event(nua_r_register, 100);
m = s2_wait_for_request(SIP_METHOD_REGISTER); m = s2_sip_wait_for_request(SIP_METHOD_REGISTER);
fail_if(!m); fail_if(!m->sip->sip_authorization); fail_if(!m); fail_if(!m->sip->sip_authorization);
fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next); fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next);
s2_save_register(m); s2_save_register(m);
s2_respond_to(m, NULL, s2_sip_respond_to(m, NULL,
SIP_200_OK, SIP_200_OK,
SIPTAG_CONTACT(s2->registration->contact), SIPTAG_CONTACT(s2->registration->contact),
SIPTAG_VIA(natted_via(m)), SIPTAG_VIA(natted_via(m)),
TAG_END()); TAG_END());
s2_free_message(m); s2_sip_free_message(m);
s2_check_event(nua_r_register, 200); s2_check_event(nua_r_register, 200);
@ -726,10 +726,10 @@ START_TEST(register_1_3_3_1)
{ {
int i; int i;
for (i = 0; i < 5; i++) { for (i = 0; i < 5; i++) {
su_root_step(s2->root, 5); su_root_step(s2base->root, 5);
su_root_step(s2->root, 5); su_root_step(s2base->root, 5);
su_root_step(s2->root, 5); su_root_step(s2base->root, 5);
s2_fast_forward(5, s2->root); s2_nua_fast_forward(5, s2base->root);
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -56,7 +56,6 @@
/* ====================================================================== */ /* ====================================================================== */
static nua_t *nua; static nua_t *nua;
static soa_session_t *soa = NULL;
static struct dialog *dialog = NULL; static struct dialog *dialog = NULL;
#define CRLF "\r\n" #define CRLF "\r\n"
@ -138,7 +137,7 @@ respond_to_subscribe(struct message *subscribe,
ta_list ta; ta_list ta;
ta_start(ta, tag, value); ta_start(ta, tag, value);
s2_respond_to(subscribe, dialog, status, phrase, s2_sip_respond_to(subscribe, dialog, status, phrase,
ta_tags(ta)); ta_tags(ta));
ta_end(ta); ta_end(ta);
@ -156,15 +155,15 @@ notify_to_nua(enum nua_substate expect_substate,
ta_list ta; ta_list ta;
ta_start(ta, tag, value); ta_start(ta, tag, value);
fail_if(s2_request_to(dialog, SIP_METHOD_NOTIFY, NULL, fail_if(s2_sip_request_to(dialog, SIP_METHOD_NOTIFY, NULL,
SIPTAG_CONTENT_TYPE_STR(event_mime_type), SIPTAG_CONTENT_TYPE_STR(event_mime_type),
SIPTAG_PAYLOAD_STR(event_state), SIPTAG_PAYLOAD_STR(event_state),
ta_tags(ta))); ta_tags(ta)));
ta_end(ta); ta_end(ta);
response = s2_wait_for_response(200, SIP_METHOD_NOTIFY); response = s2_sip_wait_for_response(200, SIP_METHOD_NOTIFY);
fail_if(!response); fail_if(!response);
s2_free_message(response); s2_sip_free_message(response);
event = s2_wait_for_event(nua_i_notify, 200); fail_if(!event); event = s2_wait_for_event(nua_i_notify, 200); fail_if(!event);
fail_unless(s2_check_substate(event, expect_substate)); fail_unless(s2_check_substate(event, expect_substate));
@ -186,7 +185,7 @@ subscription_by_nua(nua_handle_t *nh,
char const *substate_str = subscription_state; char const *substate_str = subscription_state;
char const *expires = "600"; char const *expires = "600";
subscribe = s2_wait_for_request(SIP_METHOD_SUBSCRIBE); subscribe = s2_sip_wait_for_request(SIP_METHOD_SUBSCRIBE);
if (event_type) if (event_type)
fail_if(!subscribe->sip->sip_event || fail_if(!subscribe->sip->sip_event ||
strcmp(event_type, subscribe->sip->sip_event->o_type)); strcmp(event_type, subscribe->sip->sip_event->o_type));
@ -200,7 +199,7 @@ subscription_by_nua(nua_handle_t *nh,
ta_start(ta, tag, value); ta_start(ta, tag, value);
if (send_notify_before_response) { if (send_notify_before_response) {
s2_save_uas_dialog(dialog, subscribe->sip); s2_sip_save_uas_dialog(dialog, subscribe->sip);
notify = notify_to_nua(substate, notify = notify_to_nua(substate,
SIPTAG_EVENT(subscribe->sip->sip_event), SIPTAG_EVENT(subscribe->sip->sip_event),
SIPTAG_SUBSCRIPTION_STATE_STR(substate_str), SIPTAG_SUBSCRIPTION_STATE_STR(substate_str),
@ -223,7 +222,7 @@ subscription_by_nua(nua_handle_t *nh,
ta_tags(ta)); ta_tags(ta));
} }
s2_free_message(subscribe); s2_sip_free_message(subscribe);
return notify; return notify;
} }
@ -235,15 +234,15 @@ unsubscribe_by_nua(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...)
struct event *event; struct event *event;
nua_unsubscribe(nh, TAG_END()); nua_unsubscribe(nh, TAG_END());
subscribe = s2_wait_for_request(SIP_METHOD_SUBSCRIBE); subscribe = s2_sip_wait_for_request(SIP_METHOD_SUBSCRIBE);
s2_respond_to(subscribe, dialog, SIP_200_OK, SIPTAG_EXPIRES_STR("0"), TAG_END()); s2_sip_respond_to(subscribe, dialog, SIP_200_OK, SIPTAG_EXPIRES_STR("0"), TAG_END());
event = s2_wait_for_event(nua_r_unsubscribe, 200); fail_if(!event); event = s2_wait_for_event(nua_r_unsubscribe, 200); fail_if(!event);
fail_unless(s2_check_substate(event, nua_substate_active)); fail_unless(s2_check_substate(event, nua_substate_active));
s2_free_event(event); s2_free_event(event);
fail_if(s2_request_to(dialog, SIP_METHOD_NOTIFY, NULL, fail_if(s2_sip_request_to(dialog, SIP_METHOD_NOTIFY, NULL,
SIPTAG_EVENT(subscribe->sip->sip_event), SIPTAG_EVENT(subscribe->sip->sip_event),
SIPTAG_SUBSCRIPTION_STATE_STR("terminated;reason=tiemout"), SIPTAG_SUBSCRIPTION_STATE_STR("terminated;reason=tiemout"),
SIPTAG_CONTENT_TYPE_STR(event_mime_type), SIPTAG_CONTENT_TYPE_STR(event_mime_type),
@ -254,9 +253,9 @@ unsubscribe_by_nua(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...)
fail_unless(s2_check_substate(event, nua_substate_terminated)); fail_unless(s2_check_substate(event, nua_substate_terminated));
s2_free_event(event); s2_free_event(event);
response = s2_wait_for_response(200, SIP_METHOD_NOTIFY); response = s2_sip_wait_for_response(200, SIP_METHOD_NOTIFY);
fail_if(!response); fail_if(!response);
s2_free_message(response); s2_free_message(subscribe); s2_sip_free_message(response); s2_sip_free_message(subscribe);
} }
/* ====================================================================== */ /* ====================================================================== */
@ -269,7 +268,7 @@ START_TEST(subscribe_6_1_1)
s2_case("6.1.1", "Basic subscription", s2_case("6.1.1", "Basic subscription",
"NUA sends SUBSCRIBE, waits for NOTIFY, sends un-SUBSCRIBE"); "NUA sends SUBSCRIBE, waits for NOTIFY, sends un-SUBSCRIBE");
nh = nua_handle(nua, NULL, SIPTAG_TO(s2->local), TAG_END()); nh = nua_handle(nua, NULL, SIPTAG_TO(s2sip->aor), TAG_END());
nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), TAG_END()); nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), TAG_END());
notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END()); notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END());
s2_free_event(notify); s2_free_event(notify);
@ -291,15 +290,15 @@ START_TEST(subscribe_6_1_2)
send_notify_before_response = 1; send_notify_before_response = 1;
nh = nua_handle(nua, NULL, SIPTAG_TO(s2->local), TAG_END()); nh = nua_handle(nua, NULL, SIPTAG_TO(s2sip->aor), TAG_END());
nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), TAG_END()); nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), TAG_END());
notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END()); notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END());
s2_free_event(notify); s2_free_event(notify);
/* Wait for refresh */ /* Wait for refresh */
s2_fast_forward(600, s2->root); s2_nua_fast_forward(600, s2base->root);
subscribe = s2_wait_for_request(SIP_METHOD_SUBSCRIBE); subscribe = s2_sip_wait_for_request(SIP_METHOD_SUBSCRIBE);
s2_respond_to(subscribe, dialog, SIP_200_OK, s2_sip_respond_to(subscribe, dialog, SIP_200_OK,
SIPTAG_EXPIRES_STR("600"), SIPTAG_EXPIRES_STR("600"),
TAG_END()); TAG_END());
@ -307,7 +306,7 @@ START_TEST(subscribe_6_1_2)
fail_unless(s2_check_substate(event, nua_substate_active)); fail_unless(s2_check_substate(event, nua_substate_active));
s2_free_event(event); s2_free_event(event);
fail_if(s2_request_to(dialog, SIP_METHOD_NOTIFY, NULL, fail_if(s2_sip_request_to(dialog, SIP_METHOD_NOTIFY, NULL,
SIPTAG_EVENT(subscribe->sip->sip_event), SIPTAG_EVENT(subscribe->sip->sip_event),
SIPTAG_SUBSCRIPTION_STATE_STR("active;expires=600"), SIPTAG_SUBSCRIPTION_STATE_STR("active;expires=600"),
SIPTAG_CONTENT_TYPE_STR(event_mime_type), SIPTAG_CONTENT_TYPE_STR(event_mime_type),
@ -316,9 +315,9 @@ START_TEST(subscribe_6_1_2)
event = s2_wait_for_event(nua_i_notify, 200); fail_if(!event); event = s2_wait_for_event(nua_i_notify, 200); fail_if(!event);
fail_unless(s2_check_substate(event, nua_substate_active)); fail_unless(s2_check_substate(event, nua_substate_active));
s2_free_event(event); s2_free_event(event);
response = s2_wait_for_response(200, SIP_METHOD_NOTIFY); response = s2_sip_wait_for_response(200, SIP_METHOD_NOTIFY);
fail_if(!response); fail_if(!response);
s2_free_message(response); s2_sip_free_message(response);
unsubscribe_by_nua(nh, TAG_END()); unsubscribe_by_nua(nh, TAG_END());
@ -336,21 +335,21 @@ START_TEST(subscribe_6_1_3)
"NUA sends SUBSCRIBE, waits for NOTIFY, " "NUA sends SUBSCRIBE, waits for NOTIFY, "
"gets NOTIFY terminating the subscription,"); "gets NOTIFY terminating the subscription,");
nh = nua_handle(nua, NULL, SIPTAG_TO(s2->local), TAG_END()); nh = nua_handle(nua, NULL, SIPTAG_TO(s2sip->aor), TAG_END());
nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), TAG_END()); nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), TAG_END());
notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END()); notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END());
s2_free_event(notify); s2_free_event(notify);
fail_if(s2_request_to(dialog, SIP_METHOD_NOTIFY, NULL, fail_if(s2_sip_request_to(dialog, SIP_METHOD_NOTIFY, NULL,
SIPTAG_EVENT_STR(event_type), SIPTAG_EVENT_STR(event_type),
SIPTAG_SUBSCRIPTION_STATE_STR("terminated;reason=noresource"), SIPTAG_SUBSCRIPTION_STATE_STR("terminated;reason=noresource"),
TAG_END())); TAG_END()));
event = s2_wait_for_event(nua_i_notify, 200); fail_if(!event); event = s2_wait_for_event(nua_i_notify, 200); fail_if(!event);
fail_unless(s2_check_substate(event, nua_substate_terminated)); fail_unless(s2_check_substate(event, nua_substate_terminated));
s2_free_event(event); s2_free_event(event);
response = s2_wait_for_response(200, SIP_METHOD_NOTIFY); response = s2_sip_wait_for_response(200, SIP_METHOD_NOTIFY);
fail_if(!response); fail_if(!response);
s2_free_message(response); s2_sip_free_message(response);
nua_handle_destroy(nh); nua_handle_destroy(nh);
} }
@ -366,25 +365,25 @@ START_TEST(subscribe_6_1_4)
"NUA sends SUBSCRIBE, waits for NOTIFY, " "NUA sends SUBSCRIBE, waits for NOTIFY, "
"gets NOTIFY terminating the subscription,"); "gets NOTIFY terminating the subscription,");
nh = nua_handle(nua, NULL, SIPTAG_TO(s2->local), TAG_END()); nh = nua_handle(nua, NULL, SIPTAG_TO(s2sip->aor), TAG_END());
nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), TAG_END()); nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), TAG_END());
notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END()); notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END());
s2_free_event(notify); s2_free_event(notify);
fail_if(s2_request_to(dialog, SIP_METHOD_NOTIFY, NULL, fail_if(s2_sip_request_to(dialog, SIP_METHOD_NOTIFY, NULL,
SIPTAG_EVENT_STR(event_type), SIPTAG_EVENT_STR(event_type),
SIPTAG_SUBSCRIPTION_STATE_STR("terminated;reason=deactivated"), SIPTAG_SUBSCRIPTION_STATE_STR("terminated;reason=deactivated"),
TAG_END())); TAG_END()));
event = s2_wait_for_event(nua_i_notify, 200); fail_if(!event); event = s2_wait_for_event(nua_i_notify, 200); fail_if(!event);
fail_unless(s2_check_substate(event, nua_substate_embryonic)); fail_unless(s2_check_substate(event, nua_substate_embryonic));
s2_free_event(event); s2_free_event(event);
response = s2_wait_for_response(200, SIP_METHOD_NOTIFY); response = s2_sip_wait_for_response(200, SIP_METHOD_NOTIFY);
fail_if(!response); fail_if(!response);
s2_free_message(response); s2_sip_free_message(response);
su_home_unref((void *)dialog), dialog = su_home_new(sizeof *dialog); fail_if(!dialog); su_home_unref((void *)dialog), dialog = su_home_new(sizeof *dialog); fail_if(!dialog);
s2_fast_forward(5, s2->root); s2_nua_fast_forward(5, s2base->root);
/* nua re-establishes the subscription */ /* nua re-establishes the subscription */
notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END()); notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END());
s2_free_event(notify); s2_free_event(notify);
@ -423,7 +422,7 @@ START_TEST(fetch_6_2_1)
s2_case("6.2.1", "Event fetch - NOTIFY after 202", s2_case("6.2.1", "Event fetch - NOTIFY after 202",
"NUA sends SUBSCRIBE with Expires 0, waits for NOTIFY"); "NUA sends SUBSCRIBE with Expires 0, waits for NOTIFY");
nh = nua_handle(nua, NULL, SIPTAG_TO(s2->local), TAG_END()); nh = nua_handle(nua, NULL, SIPTAG_TO(s2sip->aor), TAG_END());
nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), SIPTAG_EXPIRES_STR("0"), TAG_END()); nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), SIPTAG_EXPIRES_STR("0"), TAG_END());
notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END()); notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END());
s2_check_substate(notify, nua_substate_terminated); s2_check_substate(notify, nua_substate_terminated);
@ -442,7 +441,7 @@ START_TEST(fetch_6_2_2)
send_notify_before_response = 1; send_notify_before_response = 1;
nh = nua_handle(nua, NULL, SIPTAG_TO(s2->local), TAG_END()); nh = nua_handle(nua, NULL, SIPTAG_TO(s2sip->aor), TAG_END());
nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), SIPTAG_EXPIRES_STR("0"), TAG_END()); nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), SIPTAG_EXPIRES_STR("0"), TAG_END());
notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END()); notify = subscription_by_nua(nh, nua_substate_embryonic, TAG_END());
s2_check_substate(notify, nua_substate_terminated); s2_check_substate(notify, nua_substate_terminated);
@ -460,18 +459,18 @@ START_TEST(fetch_6_2_3)
s2_case("6.2.3", "Event fetch - no NOTIFY", s2_case("6.2.3", "Event fetch - no NOTIFY",
"NUA sends SUBSCRIBE with Expires 0, waits for NOTIFY, times out"); "NUA sends SUBSCRIBE with Expires 0, waits for NOTIFY, times out");
nh = nua_handle(nua, NULL, SIPTAG_TO(s2->local), TAG_END()); nh = nua_handle(nua, NULL, SIPTAG_TO(s2sip->aor), TAG_END());
nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), SIPTAG_EXPIRES_STR("0"), TAG_END()); nua_subscribe(nh, SIPTAG_EVENT_STR(event_type), SIPTAG_EXPIRES_STR("0"), TAG_END());
subscribe = s2_wait_for_request(SIP_METHOD_SUBSCRIBE); subscribe = s2_sip_wait_for_request(SIP_METHOD_SUBSCRIBE);
s2_respond_to(subscribe, dialog, SIP_202_ACCEPTED, s2_sip_respond_to(subscribe, dialog, SIP_202_ACCEPTED,
SIPTAG_EXPIRES_STR("0"), TAG_END()); SIPTAG_EXPIRES_STR("0"), TAG_END());
s2_free_message(subscribe); s2_sip_free_message(subscribe);
event = s2_wait_for_event(nua_r_subscribe, 202); fail_if(!event); event = s2_wait_for_event(nua_r_subscribe, 202); fail_if(!event);
fail_unless(s2_check_substate(event, nua_substate_embryonic)); fail_unless(s2_check_substate(event, nua_substate_embryonic));
s2_free_event(event); s2_free_event(event);
s2_fast_forward(600, s2->root); s2_nua_fast_forward(600, s2base->root);
event = s2_wait_for_event(nua_i_notify, 408); fail_if(!event); event = s2_wait_for_event(nua_i_notify, 408); fail_if(!event);
fail_unless(s2_check_substate(event, nua_substate_terminated)); fail_unless(s2_check_substate(event, nua_substate_terminated));
@ -513,7 +512,7 @@ subscribe_to_nua(char const *event,
s2_check_event(nua_r_set_params, 200); s2_check_event(nua_r_set_params, 200);
ta_start(ta, tag, value); ta_start(ta, tag, value);
s2_request_to(dialog, SIP_METHOD_SUBSCRIBE, NULL, s2_sip_request_to(dialog, SIP_METHOD_SUBSCRIBE, NULL,
SIPTAG_EVENT_STR(event), SIPTAG_EVENT_STR(event),
ta_tags(ta)); ta_tags(ta));
ta_end(ta); ta_end(ta);
@ -525,10 +524,10 @@ subscribe_to_nua(char const *event,
TAG_END()); TAG_END());
s2_free_event(subscribe); s2_free_event(subscribe);
response = s2_wait_for_response(202, SIP_METHOD_SUBSCRIBE); response = s2_sip_wait_for_response(202, SIP_METHOD_SUBSCRIBE);
s2_update_dialog(dialog, response); s2_sip_update_dialog(dialog, response);
fail_unless(response->sip->sip_expires != NULL); fail_unless(response->sip->sip_expires != NULL);
s2_free_message(response); s2_sip_free_message(response);
return nh; return nh;
} }
@ -544,24 +543,24 @@ START_TEST(notify_6_3_1)
"NUA receives SUBSCRIBE, sends 202 and NOTIFY. " "NUA receives SUBSCRIBE, sends 202 and NOTIFY. "
"First NOTIFY terminates subscription. "); "First NOTIFY terminates subscription. ");
s2_request_to(dialog, SIP_METHOD_SUBSCRIBE, NULL, s2_sip_request_to(dialog, SIP_METHOD_SUBSCRIBE, NULL,
SIPTAG_EVENT_STR("presence"), SIPTAG_EVENT_STR("presence"),
TAG_END()); TAG_END());
/* 489 Bad Event by default */ /* 489 Bad Event by default */
s2_check_response(489, SIP_METHOD_SUBSCRIBE); s2_sip_check_response(489, SIP_METHOD_SUBSCRIBE);
nua_set_params(nua, NUTAG_APPL_METHOD("SUBSCRIBE"), TAG_END()); nua_set_params(nua, NUTAG_APPL_METHOD("SUBSCRIBE"), TAG_END());
s2_check_event(nua_r_set_params, 200); s2_check_event(nua_r_set_params, 200);
s2_request_to(dialog, SIP_METHOD_SUBSCRIBE, NULL, s2_sip_request_to(dialog, SIP_METHOD_SUBSCRIBE, NULL,
SIPTAG_EVENT_STR("presence"), SIPTAG_EVENT_STR("presence"),
TAG_END()); TAG_END());
s2_check_response(489, SIP_METHOD_SUBSCRIBE); s2_sip_check_response(489, SIP_METHOD_SUBSCRIBE);
nua_set_params(nua, SIPTAG_ALLOW_EVENTS_STR("presence"), TAG_END()); nua_set_params(nua, SIPTAG_ALLOW_EVENTS_STR("presence"), TAG_END());
s2_check_event(nua_r_set_params, 200); s2_check_event(nua_r_set_params, 200);
s2_request_to(dialog, SIP_METHOD_SUBSCRIBE, NULL, s2_sip_request_to(dialog, SIP_METHOD_SUBSCRIBE, NULL,
SIPTAG_EVENT_STR("presence"), SIPTAG_EVENT_STR("presence"),
TAG_END()); TAG_END());
subscribe = s2_wait_for_event(nua_i_subscribe, 100); subscribe = s2_wait_for_event(nua_i_subscribe, 100);
@ -571,11 +570,11 @@ START_TEST(notify_6_3_1)
TAG_END()); TAG_END());
s2_free_event(subscribe); s2_free_event(subscribe);
s2_check_response(403, SIP_METHOD_SUBSCRIBE); s2_sip_check_response(403, SIP_METHOD_SUBSCRIBE);
nua_handle_destroy(nh); nua_handle_destroy(nh);
s2_request_to(dialog, SIP_METHOD_SUBSCRIBE, NULL, s2_sip_request_to(dialog, SIP_METHOD_SUBSCRIBE, NULL,
SIPTAG_EVENT_STR("presence"), SIPTAG_EVENT_STR("presence"),
TAG_END()); TAG_END());
subscribe = s2_wait_for_event(nua_i_subscribe, 100); subscribe = s2_wait_for_event(nua_i_subscribe, 100);
@ -585,22 +584,22 @@ START_TEST(notify_6_3_1)
TAG_END()); TAG_END());
s2_free_event(subscribe); s2_free_event(subscribe);
response = s2_wait_for_response(202, SIP_METHOD_SUBSCRIBE); response = s2_sip_wait_for_response(202, SIP_METHOD_SUBSCRIBE);
s2_update_dialog(dialog, response); s2_sip_update_dialog(dialog, response);
fail_unless(response->sip->sip_expires != NULL); fail_unless(response->sip->sip_expires != NULL);
s2_free_message(response); s2_sip_free_message(response);
nua_notify(nh, nua_notify(nh,
NUTAG_SUBSTATE(nua_substate_terminated), NUTAG_SUBSTATE(nua_substate_terminated),
SIPTAG_PAYLOAD_STR(presence_closed), SIPTAG_PAYLOAD_STR(presence_closed),
TAG_END()); TAG_END());
notify = s2_wait_for_request(SIP_METHOD_NOTIFY); notify = s2_sip_wait_for_request(SIP_METHOD_NOTIFY);
fail_unless(notify != NULL); fail_unless(notify != NULL);
sip = notify->sip; sip = notify->sip;
fail_unless(sip->sip_subscription_state != NULL); fail_unless(sip->sip_subscription_state != NULL);
fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate, fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate,
"terminated")); "terminated"));
s2_respond_to(notify, dialog, SIP_200_OK, TAG_END()); s2_sip_respond_to(notify, dialog, SIP_200_OK, TAG_END());
s2_check_event(nua_r_notify, 200); s2_check_event(nua_r_notify, 200);
nua_handle_destroy(nh); nua_handle_destroy(nh);
@ -610,8 +609,7 @@ END_TEST
START_TEST(notify_6_3_2) START_TEST(notify_6_3_2)
{ {
nua_handle_t *nh; nua_handle_t *nh;
struct event *subscribe; struct message *notify;
struct message *notify, *response;
sip_t *sip; sip_t *sip;
s2_case("6.3.2", "NOTIFY server - automatic subscription termination", s2_case("6.3.2", "NOTIFY server - automatic subscription termination",
@ -624,24 +622,24 @@ START_TEST(notify_6_3_2)
NUTAG_SUBSTATE(nua_substate_active), NUTAG_SUBSTATE(nua_substate_active),
SIPTAG_PAYLOAD_STR(presence_closed), SIPTAG_PAYLOAD_STR(presence_closed),
TAG_END()); TAG_END());
notify = s2_wait_for_request(SIP_METHOD_NOTIFY); notify = s2_sip_wait_for_request(SIP_METHOD_NOTIFY);
fail_unless(notify != NULL); fail_unless(notify != NULL);
sip = notify->sip; sip = notify->sip;
fail_unless(sip->sip_subscription_state != NULL); fail_unless(sip->sip_subscription_state != NULL);
fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate, fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate,
"active")); "active"));
s2_respond_to(notify, dialog, SIP_200_OK, TAG_END()); s2_sip_respond_to(notify, dialog, SIP_200_OK, TAG_END());
s2_check_event(nua_r_notify, 200); s2_check_event(nua_r_notify, 200);
s2_fast_forward(300, s2->root); s2_nua_fast_forward(300, s2base->root);
notify = s2_wait_for_request(SIP_METHOD_NOTIFY); notify = s2_sip_wait_for_request(SIP_METHOD_NOTIFY);
fail_unless(notify != NULL); fail_unless(notify != NULL);
sip = notify->sip; sip = notify->sip;
fail_unless(sip->sip_subscription_state != NULL); fail_unless(sip->sip_subscription_state != NULL);
fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate, fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate,
"terminated")); "terminated"));
s2_respond_to(notify, dialog, SIP_200_OK, TAG_END()); s2_sip_respond_to(notify, dialog, SIP_200_OK, TAG_END());
s2_check_event(nua_r_notify, 200); s2_check_event(nua_r_notify, 200);
nua_handle_destroy(nh); nua_handle_destroy(nh);
@ -677,26 +675,26 @@ START_TEST(notify_6_3_3)
NUTAG_SUBSTATE(nua_substate_active), NUTAG_SUBSTATE(nua_substate_active),
SIPTAG_PAYLOAD_STR(presence_closed), SIPTAG_PAYLOAD_STR(presence_closed),
TAG_END()); TAG_END());
notify = s2_wait_for_request(SIP_METHOD_NOTIFY); notify = s2_sip_wait_for_request(SIP_METHOD_NOTIFY);
fail_unless(notify != NULL); fail_unless(notify != NULL);
sip = notify->sip; sip = notify->sip;
fail_unless(sip->sip_subscription_state != NULL); fail_unless(sip->sip_subscription_state != NULL);
fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate, fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate,
"active")); "active"));
s2_respond_to(notify, dialog, SIP_200_OK, TAG_END()); s2_sip_respond_to(notify, dialog, SIP_200_OK, TAG_END());
s2_check_event(nua_r_notify, 200); s2_check_event(nua_r_notify, 200);
nua_notify(nh, nua_notify(nh,
NUTAG_SUBSTATE(nua_substate_active), NUTAG_SUBSTATE(nua_substate_active),
SIPTAG_PAYLOAD_STR(presence_closed), SIPTAG_PAYLOAD_STR(presence_closed),
TAG_END()); TAG_END());
notify = s2_wait_for_request(SIP_METHOD_NOTIFY); notify = s2_sip_wait_for_request(SIP_METHOD_NOTIFY);
fail_unless(notify != NULL); fail_unless(notify != NULL);
sip = notify->sip; sip = notify->sip;
fail_unless(sip->sip_subscription_state != NULL); fail_unless(sip->sip_subscription_state != NULL);
fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate, fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate,
"active")); "active"));
s2_respond_to(notify, dialog, SIP_481_NO_TRANSACTION, TAG_END()); s2_sip_respond_to(notify, dialog, SIP_481_NO_TRANSACTION, TAG_END());
response = s2_wait_for_event(nua_r_notify, 481); response = s2_wait_for_event(nua_r_notify, 481);
fail_unless(s2_event_substate(response) == nua_substate_terminated); fail_unless(s2_event_substate(response) == nua_substate_terminated);
@ -723,13 +721,13 @@ START_TEST(notify_6_3_4)
NUTAG_SUBSTATE(nua_substate_active), NUTAG_SUBSTATE(nua_substate_active),
SIPTAG_PAYLOAD_STR(presence_closed), SIPTAG_PAYLOAD_STR(presence_closed),
TAG_END()); TAG_END());
notify = s2_wait_for_request(SIP_METHOD_NOTIFY); notify = s2_sip_wait_for_request(SIP_METHOD_NOTIFY);
fail_unless(notify != NULL); fail_unless(notify != NULL);
sip = notify->sip; sip = notify->sip;
fail_unless(sip->sip_subscription_state != NULL); fail_unless(sip->sip_subscription_state != NULL);
fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate, fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate,
"active")); "active"));
s2_respond_to(notify, dialog, SIP_200_OK, TAG_END()); s2_sip_respond_to(notify, dialog, SIP_200_OK, TAG_END());
s2_check_event(nua_r_notify, 200); s2_check_event(nua_r_notify, 200);
nua_notify(nh, nua_notify(nh,
@ -740,13 +738,13 @@ START_TEST(notify_6_3_4)
NUTAG_SUBSTATE(nua_substate_active), NUTAG_SUBSTATE(nua_substate_active),
SIPTAG_PAYLOAD_STR(presence_closed), SIPTAG_PAYLOAD_STR(presence_closed),
TAG_END()); TAG_END());
notify = s2_wait_for_request(SIP_METHOD_NOTIFY); notify = s2_sip_wait_for_request(SIP_METHOD_NOTIFY);
fail_unless(notify != NULL); fail_unless(notify != NULL);
sip = notify->sip; sip = notify->sip;
fail_unless(sip->sip_subscription_state != NULL); fail_unless(sip->sip_subscription_state != NULL);
fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate, fail_unless(su_strmatch(sip->sip_subscription_state->ss_substate,
"active")); "active"));
s2_respond_to(notify, dialog, SIP_481_NO_TRANSACTION, TAG_END()); s2_sip_respond_to(notify, dialog, SIP_481_NO_TRANSACTION, TAG_END());
response = s2_wait_for_event(nua_r_notify, 481); response = s2_wait_for_event(nua_r_notify, 481);
fail_unless(s2_event_substate(response) == nua_substate_terminated); fail_unless(s2_event_substate(response) == nua_substate_terminated);
response = s2_wait_for_event(nua_r_notify, 481); response = s2_wait_for_event(nua_r_notify, 481);
@ -783,10 +781,10 @@ START_TEST(empty)
s2_case("0.0.0", "Empty test case", s2_case("0.0.0", "Empty test case",
"Detailed explanation for empty test case."); "Detailed explanation for empty test case.");
tport_set_params(s2->master, TPTAG_LOG(1), TAG_END()); tport_set_params(s2sip->master, TPTAG_LOG(1), TAG_END());
s2_setup_logs(7); s2_setup_logs(7);
s2_setup_logs(0); s2_setup_logs(0);
tport_set_params(s2->master, TPTAG_LOG(0), TAG_END()); tport_set_params(s2sip->master, TPTAG_LOG(0), TAG_END());
} }
END_TEST END_TEST

File diff suppressed because it is too large Load Diff

View File

@ -24,42 +24,20 @@
#ifndef S2TESTER_H #ifndef S2TESTER_H
#define S2TESTER_H #define S2TESTER_H
#define TP_STACK_T struct tester
#define SU_ROOT_MAGIC_T struct tester
#include <sofia-sip/su_wait.h> #include <sofia-sip/su_wait.h>
#include <sofia-sip/sip.h> #include <sofia-sip/sip.h>
#include <sofia-sip/tport.h> #include <sofia-sip/tport.h>
#include <sofia-sip/nua.h> #include <sofia-sip/nua.h>
#include <sofia-sip/su_string.h>
#include "s2base.h"
#include "s2util.h" #include "s2util.h"
#include "s2sip.h"
struct tester struct s2nua
{ {
su_home_t home[1]; su_home_t home[1];
su_root_t *root;
msg_mclass_t const *mclass;
int flags;
char const *hostname;
tport_t *master;
sip_to_t *local;
sip_contact_t *contact;
struct {
sip_contact_t *contact;
tport_t *tport;
} udp, tcp, tls;
struct message {
struct message *next, **prev;
msg_t *msg;
sip_t *sip;
tport_t *tport;
su_time_t when;
} *received;
nua_t *nua; nua_t *nua;
struct event { struct event {
@ -76,33 +54,8 @@ struct tester
sip_contact_t *contact; sip_contact_t *contact;
tport_t *tport; tport_t *tport;
} registration[1]; } registration[1];
unsigned long tid;
/* Settings */
int server_uses_rport;
}; };
struct dialog
{
su_home_t home[1];
sip_from_t *local;
sip_to_t *remote;
sip_call_id_t *call_id;
uint32_t lseq, rseq;
sip_contact_t *target;
sip_route_t *route;
sip_contact_t *contact;
tport_t *tport;
msg_t *invite; /* latest invite sent */
};
extern char const *s2_tester;
extern int s2_start_stop;
extern struct tester *s2;
extern tp_stack_class_t const s2_stack[1];
extern unsigned s2_default_registration_duration; extern unsigned s2_default_registration_duration;
extern char const s2_auth_digest_str[]; extern char const s2_auth_digest_str[];
extern char const s2_auth_credentials[]; extern char const s2_auth_credentials[];
@ -115,9 +68,7 @@ extern char const s2_auth3_credentials[];
extern int s2_nua_thread; extern int s2_nua_thread;
void s2_case(char const *tag, extern struct s2nua *s2;
char const *title,
char const *description);
struct event *s2_remove_event(struct event *); struct event *s2_remove_event(struct event *);
void s2_free_event(struct event *); void s2_free_event(struct event *);
@ -127,54 +78,23 @@ struct event *s2_next_event(void);
struct event *s2_wait_for_event(nua_event_t event, int status); struct event *s2_wait_for_event(nua_event_t event, int status);
int s2_check_event(nua_event_t event, int status); int s2_check_event(nua_event_t event, int status);
int s2_check_callstate(enum nua_callstate state); int s2_check_callstate(enum nua_callstate state);
struct message *s2_remove_message(struct message *m);
void s2_free_message(struct message *m);
void s2_flush_messages(void);
struct message *s2_next_response(void);
struct message *s2_wait_for_response(int status, sip_method_t , char const *);
int s2_check_response(int status, sip_method_t method, char const *name);
struct message *s2_next_request(void);
struct message *s2_wait_for_request(sip_method_t method, char const *name);
struct message *s2_wait_for_request_timeout(sip_method_t, char const *,
int timeout);
int s2_check_request(sip_method_t method, char const *name);
int s2_check_request_timeout(sip_method_t method, char const *, int timeout);
int s2_check_substate(struct event *e, enum nua_substate state); int s2_check_substate(struct event *e, enum nua_substate state);
#define SIP_METHOD_UNKNOWN sip_method_unknown, NULL #define SIP_METHOD_UNKNOWN sip_method_unknown, NULL
void s2_save_uas_dialog(struct dialog *d, sip_t *sip);
struct message *s2_respond_to(struct message *m, struct dialog *d,
int status, char const *phrase,
tag_type_t tag, tag_value_t value, ...);
int s2_request_to(struct dialog *d,
sip_method_t method, char const *name,
tport_t *tport,
tag_type_t tag, tag_value_t value, ...);
int s2_update_dialog(struct dialog *d, struct message *response);
int s2_save_register(struct message *m);
void s2_flush_all(void); void s2_flush_all(void);
void s2_setup_base(char const *label, char const *hostname);
void s2_setup_logs(int level);
void s2_setup_tport(char const * const *protocols,
tag_type_t tag, tag_value_t value, ...);
void s2_teardown(void);
nua_t *s2_nua_setup(char const *label, tag_type_t tag, tag_value_t value, ...); nua_t *s2_nua_setup(char const *label, tag_type_t tag, tag_value_t value, ...);
void s2_teardown_started(char const *label);
void s2_nua_teardown(void); void s2_nua_teardown(void);
void s2_nua_fast_forward(unsigned long seconds,
su_root_t *steproot);
int s2_save_register(struct message *m);
void s2_register_setup(void); void s2_register_setup(void);
void s2_register_teardown(void); void s2_register_teardown(void);
#endif #endif