mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-13 20:50:41 +00:00
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:
parent
76f57d02bb
commit
522b3c4858
@ -1 +1 @@
|
|||||||
Tue Mar 3 15:59:49 CST 2009
|
Tue Mar 3 16:00:35 CST 2009
|
||||||
|
@ -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
|
||||||
|
@ -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());
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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
@ -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
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user