⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_nta_api.c

📁 sip协议栈
💻 C
📖 第 1 页 / 共 3 页
字号:
static int api_test_errors(agent_t *ag){  nta_agent_t *nta;  su_root_t *root;  su_home_t home[1];  BEGIN();  memset(home, 0, sizeof home);  home->suh_size = sizeof home;  su_home_init(home);  TEST(nta_agent_create(NULL,			(url_string_t *)"sip:*:*",			NULL,			NULL,			TAG_END()), NULL);  TEST_1(root = su_root_create(NULL));  TEST(nta_agent_create(root,			(url_string_t *)"http://localhost:*/invalid/bind/url",			NULL,			NULL,			TAG_END()), NULL);  TEST(nta_agent_create(root,			(url_string_t *)"sip:*:*;transport=XXX",			NULL,			NULL,			TAG_END()), NULL);  TEST_1(nta = nta_agent_create(root,				(url_string_t *)"sip:*:*",				NULL,				NULL,				TAG_END()));  TEST_VOID(nta_agent_destroy(NULL));  TEST_VOID(nta_agent_destroy(nta));  TEST_1(nta = nta_agent_create(root,				(url_string_t *)"sip:*:*",				agent_callback,				ag,				TAG_END()));  TEST(nta_agent_contact(NULL), NULL);  TEST(nta_agent_via(NULL), NULL);  TEST_S(nta_agent_version(nta), nta_agent_version(NULL));  TEST(nta_agent_magic(NULL), NULL);  TEST(nta_agent_magic(nta), (void *)ag);  TEST(nta_agent_add_tport(NULL, NULL, TAG_END()), -1);  TEST(nta_agent_newtag(home, "tag=%s", NULL), NULL);  TEST_1(nta_agent_newtag(home, "tag=%s", nta));  {    msg_t *msg;    TEST_1(nta_msg_create(NULL, 0) == NULL);    TEST(nta_msg_complete(NULL), -1);    TEST_1(msg = nta_msg_create(nta, 0));    TEST(nta_msg_complete(msg), -1);    TEST(nta_msg_request_complete(msg, NULL, 				  sip_method_unknown, "FOO", NULL), -1);    TEST(nta_is_internal_msg(NULL), 0);    TEST(nta_is_internal_msg(msg), 0);    TEST_1(msg_set_flags(msg, NTA_INTERNAL_MSG));    TEST(nta_is_internal_msg(msg), 1);    TEST_VOID(msg_destroy(msg));  }  TEST(nta_leg_tcreate(NULL, NULL, NULL, TAG_END()), NULL);  TEST_VOID(nta_leg_destroy(NULL));  TEST(nta_leg_magic(NULL, NULL), NULL);  TEST_VOID(nta_leg_bind(NULL, NULL, NULL));  TEST(nta_leg_tag(NULL, "fidsafsa"), NULL);  TEST(nta_leg_rtag(NULL, "fidsafsa"), NULL);  TEST(nta_leg_get_tag(NULL), NULL);  TEST(nta_leg_client_route(NULL, NULL, NULL), -1);  TEST(nta_leg_server_route(NULL, NULL, NULL), -1);  TEST(nta_leg_by_uri(NULL, NULL), NULL);  TEST(nta_leg_by_dialog(NULL,  NULL, NULL, NULL, NULL, NULL, NULL), NULL);  TEST(nta_leg_by_dialog(nta, NULL, NULL, NULL, NULL, NULL, NULL), NULL);  TEST(nta_incoming_create(NULL, NULL, NULL, NULL, TAG_END()), NULL);  TEST(nta_incoming_create(nta, NULL, NULL, NULL, TAG_END()), NULL);  TEST_VOID(nta_incoming_bind(NULL, NULL, NULL));  TEST(nta_incoming_magic(NULL, NULL), NULL);    TEST(nta_incoming_find(NULL, NULL, NULL), NULL);  TEST(nta_incoming_find(nta, NULL, NULL), NULL);  TEST(nta_incoming_tag(NULL, NULL), NULL);  TEST(nta_incoming_gettag(NULL), NULL);  TEST(nta_incoming_status(NULL), 400);  TEST(nta_incoming_method(NULL), sip_method_invalid);  TEST(nta_incoming_method_name(NULL), NULL);  TEST(nta_incoming_url(NULL), NULL);  TEST(nta_incoming_cseq(NULL), 0);  TEST(nta_incoming_set_params(NULL, TAG_END()), -1);  TEST(nta_incoming_getrequest(NULL), NULL);  TEST(nta_incoming_getrequest_ackcancel(NULL), NULL);  TEST(nta_incoming_getresponse(NULL), NULL);  TEST(nta_incoming_complete_response(NULL, NULL, 800, "foo", TAG_END()), -1);  TEST(nta_incoming_treply(NULL, SIP_200_OK, TAG_END()), -1);  TEST(nta_incoming_mreply(NULL, NULL), -1);  TEST_VOID(nta_incoming_destroy(NULL));    TEST(nta_outgoing_tcreate(NULL, outgoing_callback, ag, 			    URL_STRING_MAKE("sip:localhost"),			    SIP_METHOD_MESSAGE,			    URL_STRING_MAKE("sip:localhost"),			    TAG_END()), NULL);  TEST(nta_outgoing_mcreate(NULL, outgoing_callback, ag, 			    URL_STRING_MAKE("sip:localhost"),			    NULL,			    TAG_END()), NULL);  TEST(nta_outgoing_default(NULL, NULL, NULL), NULL);  TEST(nta_outgoing_status(NULL), 500);  TEST(nta_outgoing_method(NULL), sip_method_invalid);  TEST(nta_outgoing_method_name(NULL), NULL);  TEST(nta_outgoing_cseq(NULL), 0);  TEST(nta_outgoing_delay(NULL), UINT_MAX);  TEST(nta_outgoing_request_uri(NULL), NULL);  TEST(nta_outgoing_route_uri(NULL), NULL);  TEST(nta_outgoing_getresponse(NULL), NULL);  TEST(nta_outgoing_getrequest(NULL), NULL);  TEST(nta_outgoing_tagged(NULL, NULL, NULL, NULL, NULL), NULL);  TEST(nta_outgoing_cancel(NULL), -1);  TEST(nta_outgoing_tcancel(NULL, NULL, NULL, TAG_END()), NULL);  TEST_VOID(nta_outgoing_destroy(NULL));  TEST(nta_outgoing_find(NULL, NULL, NULL, NULL), NULL);  TEST(nta_outgoing_find(nta, NULL, NULL, NULL), NULL);  TEST(nta_outgoing_status(NONE), 500);  TEST(nta_outgoing_method(NONE), sip_method_invalid);  TEST(nta_outgoing_method_name(NONE), NULL);  TEST(nta_outgoing_cseq(NONE), 0);  TEST(nta_outgoing_delay(NONE), UINT_MAX);  TEST(nta_outgoing_request_uri(NONE), NULL);  TEST(nta_outgoing_route_uri(NONE), NULL);  TEST(nta_outgoing_getresponse(NONE), NULL);  TEST(nta_outgoing_getrequest(NONE), NULL);  TEST(nta_outgoing_tagged(NONE, NULL, NULL, NULL, NULL), NULL);  TEST(nta_outgoing_cancel(NONE), -1);  TEST(nta_outgoing_tcancel(NONE, NULL, NULL, TAG_END()), NULL);  TEST_VOID(nta_outgoing_destroy(NONE));#if 0nta_reliable_t *nta_reliable_treply(nta_incoming_t *ireq,				    nta_prack_f *callback,				    nta_reliable_magic_t *rmagic,				    int status, char const *phrase, 				    tag_type_t tag, 				    tag_value_t value, ...);nta_reliable_t *nta_reliable_mreply(nta_incoming_t *irq, 				    nta_prack_f *callback,				    nta_reliable_magic_t *rmagic,				    msg_t *msg);void nta_reliable_destroy(nta_reliable_t *);#endif    TEST_VOID(nta_agent_destroy(nta));   TEST_VOID(su_root_destroy(root));  TEST_VOID(su_home_deinit(home));  END();}static int api_test_dialog_matching(agent_t *ag){  nta_agent_t *nta;  su_root_t *root;  su_home_t home[1];  nta_leg_t *leg, *dialog1, *dialog2, *dst, *defdst;  sip_from_t *a1, *a2;  sip_call_id_t *i;  BEGIN();  memset(home, 0, sizeof home);  home->suh_size = sizeof home;  su_home_init(home);  TEST_1(root = su_root_create(NULL));  TEST_1(nta = nta_agent_create(root,				(url_string_t *)"sip:*:*",				NULL,				NULL,				TAG_END()));  TEST_1(dst = nta_leg_tcreate(nta, NULL, NULL, 				NTATAG_NO_DIALOG(1),				URLTAG_URL("sip:joe@localhost"),				TAG_END()));  TEST_1(defdst = nta_leg_tcreate(nta, NULL, NULL, 				  NTATAG_NO_DIALOG(1),				  TAG_END()));  TEST_1(dialog1 = 	 nta_leg_tcreate(nta, NULL, NULL, 			 URLTAG_URL("sip:pc.al.us"),			 SIPTAG_CALL_ID_STR("foobarbaz"),			 /* local */			 SIPTAG_FROM_STR("<sip:me.myself.i@foo.com>;tag=foo"),			 /* remote */			 SIPTAG_TO_STR("<sip:joe.boy@al.us>"),			 TAG_END()));  TEST_1(a1 = sip_from_make(home, "<sip:me.myself.i@foo.com>;tag=foo"));  TEST_1(a2 = sip_from_make(home, "<sip:joe.boy@al.us>;tag=al"));  TEST_1(i = sip_call_id_make(home, "foobarbaz"));  TEST_1(dialog2 = 	 nta_leg_tcreate(nta, NULL, NULL, 			 SIPTAG_CALL_ID(i),			 /* local */			 SIPTAG_FROM(a2),			 /* remote */			 SIPTAG_TO(a1),			 TAG_END()));  TEST_1(!nta_leg_by_dialog(nta, NULL, NULL, 			    a1->a_tag, a1->a_url, a2->a_tag, a2->a_url));  TEST_1(!nta_leg_by_dialog(NULL, NULL, i, 			    a1->a_tag, a1->a_url, a2->a_tag, a2->a_url));  TEST_1(!nta_leg_by_dialog(nta, (void *)"sip:no.such.url", i, 			    a2->a_tag, a2->a_url, a1->a_tag, a1->a_url));  TEST_1(!nta_leg_by_dialog(nta, a2->a_url, i, 			    a2->a_tag, a2->a_url, a1->a_tag, a1->a_url));  TEST(leg = nta_leg_by_dialog(nta, NULL, i, 			       /* local */ a1->a_tag, a1->a_url, 			       /* remote */ a2->a_tag, a2->a_url),       dialog2);  TEST(leg = nta_leg_by_dialog(nta, (void *)"sip:no.such.url", i, 			       /* local */ a1->a_tag, a1->a_url, 			       /* remote */ a2->a_tag, a2->a_url),       dialog2);  TEST(leg = nta_leg_by_dialog(nta, a2->a_url, i, 			       a1->a_tag, a1->a_url, a2->a_tag, a2->a_url),       dialog2);  TEST(leg = nta_leg_by_dialog(nta, NULL, i, 			       a2->a_tag, a2->a_url, a1->a_tag, a1->a_url),       dialog1);  TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, 			       a2->a_tag, a2->a_url, a1->a_tag, a1->a_url),       dialog1);  /* local tag is required because there is tag */  TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, 			       a2->a_tag, a2->a_url, "xyzzy", a1->a_url),       NULL);  /* local URI is ignored because we have tag */  TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, 			       a2->a_tag, a2->a_url, a1->a_tag, a2->a_url),       dialog1);  /* remote tag is ignored because there is no tag */  TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, 			       "xyzzy", a2->a_url, a1->a_tag, a1->a_url),       dialog1);  /* remote url is required */  TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, 			       a2->a_tag, a1->a_url, a1->a_tag, a1->a_url),       NULL);  TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, 			       a2->a_tag, NULL, a1->a_tag, a1->a_url),       dialog1);  /* local url is used if there is no local tag */  TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, 			       a2->a_tag, a2->a_url, NULL, NULL),       NULL);  nta_leg_tag(dialog1, "al");  TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, 			       a2->a_tag, a2->a_url, a1->a_tag, a1->a_url),       dialog1);  TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, 			       a2->a_tag, a2->a_url, "xyzzy", a1->a_url),       NULL);  TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, 			       a2->a_tag, a2->a_url, a1->a_tag, a1->a_url),       dialog1);  TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, 			       a2->a_tag, a2->a_url, NULL, a1->a_url),       NULL);		  nta_leg_destroy(defdst);  nta_leg_destroy(dst);  nta_leg_destroy(dialog1);  nta_leg_destroy(dialog2);	      TEST_VOID(nta_agent_destroy(nta));   TEST_VOID(su_root_destroy(root));  TEST_VOID(su_home_deinit(home));  END();}#if HAVE_ALARM#include <unistd.h>#include <signal.h>static RETSIGTYPE sig_alarm(int s){  fprintf(stderr, "%s: FAIL! test timeout!\n", name);  exit(1);}#endifstaticchar const nta_test_api_usage[] =  "usage: %s OPTIONS\n"  "where OPTIONS are\n"  "   -v | --verbose    be verbose\n"  "   -q | --quiet      be quiet\n"  "   -1                quit on first error\n"  "   -l level          set logging level (0 by default)\n"  "   --attach          print pid, wait for a debugger to be attached\n"#if HAVE_ALARM  "   --no-alarm        don't ask for guard ALARM\n"#endif  ;void usage(void){  fprintf(stderr, nta_test_api_usage, name);  exit(1);}int main(int argc, char *argv[]){  int retval = 0, quit_on_single_failure = 0;  int i, o_attach = 0, o_alarm = 1;  agent_t ag[1] = {{ { SU_HOME_INIT(ag) }, 0, NULL }};  for (i = 1; argv[i]; i++) {    if (strcmp(argv[i], "-v") == 0)      tstflags |= tst_verbatim;    else if (strcmp(argv[i], "-q") == 0)      tstflags &= ~tst_verbatim;    else if (strcmp(argv[i], "-1") == 0)      quit_on_single_failure = 1;    else if (strncmp(argv[i], "-l", 2) == 0) {      int level = 3;      char *rest = NULL;      if (argv[i][2])	level = strtol(argv[i] + 2, &rest, 10);      else if (argv[i + 1])	level = strtol(argv[i + 1], &rest, 10), i++;      else	level = 3, rest = "";      if (rest == NULL || *rest)	usage();            su_log_set_level(nta_log, level);      su_log_set_level(tport_log, level);    }    else if (strcmp(argv[i], "--attach") == 0) {      o_attach = 1;    }    else if (strcmp(argv[i], "--no-alarm") == 0) {      o_alarm = 0;    }    else if (strcmp(argv[i], "-") == 0) {      i++; break;    }    else if (argv[i][0] != '-') {      break;    }    else      usage();  }  if (o_attach) {    char line[10];    printf("nua_test: pid %u\n", getpid());    printf("<Press RETURN to continue>\n");    fgets(line, sizeof line, stdin);  }#if HAVE_ALARM  else if (o_alarm) {    alarm(60);    signal(SIGALRM, sig_alarm);  }#endif  su_init();  if (!(TSTFLAGS & tst_verbatim)) {    su_log_soft_set_level(nta_log, 0);    su_log_soft_set_level(tport_log, 0);  }#define SINGLE_FAILURE_CHECK()						\  do { fflush(stderr); fflush(stdout); \       if (retval && quit_on_single_failure) { su_deinit(); return retval; } \  } while(0)  retval |= api_test_init(ag); fflush(stdout); SINGLE_FAILURE_CHECK();  if (retval == 0) {    retval |= api_test_errors(ag); SINGLE_FAILURE_CHECK();    retval |= api_test_params(ag); SINGLE_FAILURE_CHECK();    retval |= api_test_stats(ag); SINGLE_FAILURE_CHECK();    retval |= api_test_dialog_matching(ag); SINGLE_FAILURE_CHECK();    retval |= api_test_tport(ag); SINGLE_FAILURE_CHECK();    retval |= api_test_dialogs(ag); SINGLE_FAILURE_CHECK();    retval |= api_test_default(ag); SINGLE_FAILURE_CHECK();  }  retval |= api_test_deinit(ag); fflush(stdout);   su_home_deinit(ag->ag_home);  su_deinit();  return retval;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -