提交 522b3c48 authored 作者: Michael Jerris's avatar Michael Jerris

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
上级 76f57d02
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_LIBS@
check_nua_CFLAGS = $(CFLAGS) -I$(top_srcdir)/s2check
nua_libs = libnua.la \
../iptsec/libiptsec.la \
../ipt/libipt.la \
......@@ -84,6 +82,6 @@ EXTRA_DIST = nua.docs $(BUILT_SOURCES)
include $(top_srcdir)/rules/sofia.am
INCLUDES = ${INTERNAL_INCLUDES}
INCLUDES = ${INTERNAL_INCLUDES} -I$(top_srcdir)/s2check
TAG_DLL_FLAGS = LIST=nua_tag_list
......@@ -71,7 +71,7 @@ static void etsi_setup(void)
NUTAG_OUTBOUND("no-options-keepalive, no-validate"),
TAG_END());
soa = soa_create(NULL, s2->root, NULL);
soa = soa_create(NULL, s2base->root, NULL);
fail_if(!soa);
......@@ -148,7 +148,7 @@ respond_with_sdp(struct message *request,
fail_if(soa_get_local_sdp(soa, NULL, &body, &bodylen) != 1);
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_PAYLOAD_STR(body),
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));
return s2_wait_for_request(SIP_METHOD_INVITE);
return s2_sip_wait_for_request(SIP_METHOD_INVITE);
}
static void
......@@ -182,10 +182,10 @@ bye_by_nua(struct dialog *dialog, nua_handle_t *nh,
nua_bye(nh, ta_tags(ta));
ta_end(ta);
bye = s2_wait_for_request(SIP_METHOD_BYE);
bye = s2_sip_wait_for_request(SIP_METHOD_BYE);
fail_if(!bye);
s2_respond_to(bye, dialog, SIP_200_OK, TAG_END());
s2_free_message(bye);
s2_sip_respond_to(bye, dialog, SIP_200_OK, TAG_END());
s2_sip_free_message(bye);
fail_unless(s2_check_event(nua_r_bye, 200));
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 "
"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());
......@@ -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_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());
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);
s2_respond_to(bye, d2, SIP_200_OK, TAG_END());
s2_free_message(bye);
s2_sip_respond_to(bye, d2, SIP_200_OK, TAG_END());
s2_sip_free_message(bye);
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 "
"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());
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_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());
fail_unless(s2_check_request(SIP_METHOD_ACK));
s2_sip_respond_to(invite, d1, 404, "Not found after 5 seconds", TAG_END());
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());
fail_unless(s2_check_request(SIP_METHOD_ACK));
s2_sip_respond_to(invite, d1, 404, "Not found after 10 seconds", TAG_END());
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());
fail_unless(s2_check_request(SIP_METHOD_ACK));
s2_sip_respond_to(invite, d1, 404, "Not found after 31 seconds", TAG_END());
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 */
nua_set_params(s2->nua, TAG_END());
s2_check_event(nua_r_set_params, 0);
s2_respond_to(invite, d1, 404, "Not found after 32 seconds", TAG_END());
s2_free_message(invite);
fail_if(s2_check_request_timeout(SIP_METHOD_ACK, 500));
s2_sip_respond_to(invite, d1, 404, "Not found after 32 seconds", TAG_END());
s2_sip_free_message(invite);
fail_if(s2_sip_check_request_timeout(SIP_METHOD_ACK, 3));
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) "
"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());
......@@ -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_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());
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());
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());
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 */
nua_set_params(s2->nua, TAG_END());
s2_check_event(nua_r_set_params, 0);
respond_with_sdp(invite, d1, SIP_200_OK, TAG_END());
s2_free_message(invite);
fail_if(s2_check_request_timeout(SIP_METHOD_ACK, 500));
respond_with_sdp(invite, d1, SIP_200_OK,
SIPTAG_SUBJECT_STR("Stray 200 OK"),
TAG_END());
s2_sip_free_message(invite);
mark_point();
fail_if(s2_sip_check_request_timeout(SIP_METHOD_ACK, 3));
bye_by_nua(d1, nh, TAG_END());
......
......@@ -33,6 +33,7 @@
#include "config.h"
#include "test_s2.h"
#include "check_nua.h"
#include <stdlib.h>
......@@ -43,8 +44,6 @@
#include <fnmatch.h>
#endif
#include "test_s2.h"
static void usage(int exitcode)
{
fprintf(exitcode ? stderr : stdout,
......@@ -62,6 +61,8 @@ int main(int argc, char *argv[])
s2_tester = "check_nua";
s2_suite("N2");
if (getenv("CHECK_NUA_VERBOSE"))
s2_start_stop = strtoul(getenv("CHECK_NUA_VERBOSE"), NULL, 10);
......
......@@ -24,42 +24,20 @@
#ifndef 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/sip.h>
#include <sofia-sip/tport.h>
#include <sofia-sip/nua.h>
#include <sofia-sip/su_string.h>
#include "s2base.h"
#include "s2util.h"
#include "s2sip.h"
struct tester
struct s2nua
{
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;
struct event {
......@@ -76,33 +54,8 @@ struct tester
sip_contact_t *contact;
tport_t *tport;
} 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 char const s2_auth_digest_str[];
extern char const s2_auth_credentials[];
......@@ -115,9 +68,7 @@ extern char const s2_auth3_credentials[];
extern int s2_nua_thread;
void s2_case(char const *tag,
char const *title,
char const *description);
extern struct s2nua *s2;
struct event *s2_remove_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);
int s2_check_event(nua_event_t event, int status);
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);
#define SIP_METHOD_UNKNOWN sip_method_unknown, NULL
void s2_save_uas_dialog(struct dialog *d, sip_t *sip);
void s2_flush_all(void);
struct message *s2_respond_to(struct message *m, struct dialog *d,
int status, char const *phrase,
tag_type_t tag, tag_value_t value, ...);
nua_t *s2_nua_setup(char const *label, 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, ...);
void s2_nua_teardown(void);
int s2_update_dialog(struct dialog *d, struct message *response);
void s2_nua_fast_forward(unsigned long seconds,
su_root_t *steproot);
int s2_save_register(struct message *m);
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, ...);
void s2_teardown_started(char const *label);
void s2_nua_teardown(void);
void s2_register_setup(void);
void s2_register_teardown(void);
#endif
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论