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

📄 test_nta_api.c

📁 sip协议栈
💻 C
📖 第 1 页 / 共 3 页
字号:
int api_test_params(agent_t *ag){  BEGIN();  nta_agent_t *nta;  sip_contact_t const *aliases = (void *)-1;  msg_mclass_t *mclass = (void *)-1;  unsigned sip_t1 = -1;  unsigned sip_t2 = -1;  unsigned sip_t4    = -1;  unsigned debug_drop_prob = -1;  int ua              = -1;  int user_via        = -1;  int extra_100       = -1;  int pass_100        = -1;  int timeout_408     = -1;  int pass_408        = -1;  int merge_482       = -1;  int cancel_2543     = -1;  int cancel_487      = -1;  int rel100          = -1;  int use_timestamp   = -1;  int use_naptr       = -1;  int use_srv         = -1;  unsigned preload = (unsigned)-1;  char const *s = NONE;  TEST_1(nta = nta_agent_create(ag->ag_root, (url_string_t *)"sip:*:*",				NULL, NULL, TAG_END()));  TEST(nta_agent_get_params(nta,			    NTATAG_MCLASS_REF(mclass),			    NTATAG_ALIASES_REF(aliases),			    NTATAG_SIP_T1_REF(sip_t1),			    NTATAG_SIP_T2_REF(sip_t2),			    NTATAG_SIP_T4_REF(sip_t4),			    NTATAG_DEBUG_DROP_PROB_REF(debug_drop_prob),			    NTATAG_UA_REF(ua),			    NTATAG_USER_VIA_REF(user_via),			    NTATAG_EXTRA_100_REF(extra_100),			    NTATAG_PASS_100_REF(pass_100),			    NTATAG_TIMEOUT_408_REF(timeout_408),			    NTATAG_PASS_408_REF(pass_408),			    NTATAG_MERGE_482_REF(merge_482),			    NTATAG_CANCEL_2543_REF(cancel_2543),			    NTATAG_CANCEL_487_REF(cancel_487),			    NTATAG_REL100_REF(rel100),			    NTATAG_USE_TIMESTAMP_REF(use_timestamp),			    NTATAG_USE_NAPTR_REF(use_naptr),			    NTATAG_USE_SRV_REF(use_srv),			    TAG_END()),        /* Number of parameters */ 19);    TEST(mclass, sip_default_mclass());  TEST(aliases, NULL);  TEST(sip_t1, NTA_SIP_T1);  TEST(sip_t2, NTA_SIP_T2);  TEST(sip_t4, NTA_SIP_T4);  TEST(debug_drop_prob, 0);  TEST(ua,              0);  TEST(user_via,        0);  TEST(extra_100,       0);  TEST(pass_100,        0);  TEST(timeout_408,     1);  TEST(pass_408,        0);  TEST(merge_482,       0);  TEST(cancel_2543,     0);  TEST(cancel_487,      1);  TEST(rel100,          0);  TEST(use_timestamp,   0);  TEST(use_naptr,       1);  TEST(use_srv,         1);  TEST(nta_agent_set_params(NULL,       		      NTATAG_PRELOAD(2048),      		      TAG_END()), -1);  TEST(nta_agent_get_params(NULL,       		      NTATAG_PRELOAD_REF(preload),      		      TAG_END()), -1);  TEST(nta_agent_set_params(nta,       		      NTATAG_PRELOAD(2048),      		      TAG_END()), 1);  TEST(nta_agent_get_params(nta,       		      NTATAG_PRELOAD_REF(preload),      		      TAG_END()), 1);  TEST(preload, 2048);  TEST(nta_agent_set_params(nta, 			    NTATAG_SIGCOMP_OPTIONS("sip"),			    TAG_END()), 1);  TEST(nta_agent_set_params(nta, 			    NTATAG_SIGCOMP_OPTIONS(","),			    TAG_END()), -1);  TEST(nta_agent_set_params(nta, 			    NTATAG_SIGCOMP_OPTIONS("sip;dms=16384"),			    TAG_END()), 1);  s = NONE;  TEST(nta_agent_get_params(nta, 			    NTATAG_SIGCOMP_OPTIONS_REF(s),			    TAG_END()), 1);  TEST_S(s, "sip;dms=16384");  TEST_VOID(nta_agent_destroy(nta));  END();}int api_test_stats(agent_t *ag){  BEGIN();  nta_agent_t *nta;  uint32_t irq_hash = -1, orq_hash = -1, leg_hash = -1;  uint32_t recv_msg = -1, sent_msg = -1;  uint32_t recv_request = -1, recv_response = -1;  uint32_t bad_message = -1, bad_request = -1, bad_response = -1;  uint32_t drop_request = -1, drop_response = -1;  uint32_t client_tr = -1, server_tr = -1, dialog_tr = -1;  uint32_t acked_tr = -1, canceled_tr = -1;  uint32_t trless_request = -1, trless_to_tr = -1, trless_response = -1;  uint32_t trless_200 = -1, merged_request = -1;  uint32_t sent_request = -1, sent_response = -1;  uint32_t retry_request = -1, retry_response = -1, recv_retry = -1;  uint32_t tout_request = -1, tout_response = -1;  TEST_1(nta = nta_agent_create(ag->ag_root, (url_string_t *)"sip:*:*",				NULL, NULL, TAG_END()));  TEST(nta_agent_get_stats(NULL,      		     NTATAG_S_TOUT_REQUEST_REF(tout_request),      		     NTATAG_S_TOUT_RESPONSE_REF(tout_response),      		     TAG_END()), -1);  TEST(nta_agent_get_stats(nta,      		     NTATAG_S_IRQ_HASH_REF(irq_hash),      		     NTATAG_S_ORQ_HASH_REF(orq_hash),      		     NTATAG_S_LEG_HASH_REF(leg_hash),      		     NTATAG_S_RECV_MSG_REF(recv_msg),      		     NTATAG_S_SENT_MSG_REF(sent_msg),      		     NTATAG_S_RECV_REQUEST_REF(recv_request),      		     NTATAG_S_RECV_RESPONSE_REF(recv_response),      		     NTATAG_S_BAD_MESSAGE_REF(bad_message),      		     NTATAG_S_BAD_REQUEST_REF(bad_request),      		     NTATAG_S_BAD_RESPONSE_REF(bad_response),      		     NTATAG_S_DROP_REQUEST_REF(drop_request),      		     NTATAG_S_DROP_RESPONSE_REF(drop_response),      		     NTATAG_S_CLIENT_TR_REF(client_tr),      		     NTATAG_S_SERVER_TR_REF(server_tr),      		     NTATAG_S_DIALOG_TR_REF(dialog_tr),      		     NTATAG_S_ACKED_TR_REF(acked_tr),      		     NTATAG_S_CANCELED_TR_REF(canceled_tr),      		     NTATAG_S_TRLESS_REQUEST_REF(trless_request),      		     NTATAG_S_TRLESS_TO_TR_REF(trless_to_tr),      		     NTATAG_S_TRLESS_RESPONSE_REF(trless_response),      		     NTATAG_S_TRLESS_200_REF(trless_200),      		     NTATAG_S_MERGED_REQUEST_REF(merged_request),      		     NTATAG_S_SENT_REQUEST_REF(sent_request),      		     NTATAG_S_SENT_RESPONSE_REF(sent_response),      		     NTATAG_S_RETRY_REQUEST_REF(retry_request),      		     NTATAG_S_RETRY_RESPONSE_REF(retry_response),      		     NTATAG_S_RECV_RETRY_REF(recv_retry),      		     NTATAG_S_TOUT_REQUEST_REF(tout_request),      		     NTATAG_S_TOUT_RESPONSE_REF(tout_response),      		     TAG_END()), 29);  TEST_1(irq_hash == HTABLE_MIN_SIZE);  TEST_1(orq_hash == HTABLE_MIN_SIZE);  TEST_1(leg_hash == HTABLE_MIN_SIZE);  TEST_1(recv_msg == 0);  TEST_1(sent_msg == 0);  TEST_1(recv_request == 0);  TEST_1(recv_response == 0);  TEST_1(bad_message == 0);  TEST_1(bad_request == 0);  TEST_1(bad_response == 0);  TEST_1(drop_request == 0);  TEST_1(drop_response == 0);  TEST_1(client_tr == 0);  TEST_1(server_tr == 0);  TEST_1(dialog_tr == 0);  TEST_1(acked_tr == 0);  TEST_1(canceled_tr == 0);  TEST_1(trless_request == 0);  TEST_1(trless_to_tr == 0);  TEST_1(trless_response == 0);  TEST_1(trless_200 == 0);  TEST_1(merged_request == 0);  TEST_1(sent_request == 0);  TEST_1(sent_response == 0);  TEST_1(retry_request == 0);  TEST_1(retry_response == 0);  TEST_1(recv_retry == 0);  TEST_1(tout_request == 0);  TEST_1(tout_response == 0);  TEST_VOID(nta_agent_destroy(nta));  END();}/* Test handling transports */int api_test_tport(agent_t *ag){  sip_via_t const *v;  url_t url[1];  BEGIN();  nta_agent_t *agent;  sip_contact_t const *m;  *url = *ag->ag_contact->m_url;  url->url_port = "*";  url->url_params = "transport=tcp";  TEST_1(agent = nta_agent_create(ag->ag_root, NONE, NULL, NULL, TAG_END()));  TEST_1(!nta_agent_via(agent));  TEST_1(!nta_agent_public_via(agent));  TEST_1(!nta_agent_contact(agent));  TEST_1(nta_agent_add_tport(agent, (url_string_t *)url, TAG_END()) == 0);  TEST_1(v = nta_agent_via(agent)); TEST_1(!v->v_next);  TEST(strcasecmp(v->v_protocol, sip_transport_tcp), 0);  TEST_1(m = nta_agent_contact(agent));  TEST_S(m->m_url->url_params, "transport=tcp");  TEST_1(nta_agent_add_tport(agent, (url_string_t *)url, 			     TPTAG_SERVER(0), TAG_END()) == 0);  TEST_1(v = nta_agent_public_via(agent)); TEST_1(!v->v_next);  TEST(strcasecmp(v->v_protocol, sip_transport_tcp), 0);  TEST_1(host_has_domain_invalid(v->v_host));  TEST_1(m = nta_agent_contact(agent));  TEST_S(m->m_url->url_params, "transport=tcp");  url->url_params = "transport=udp";  TEST_1(nta_agent_add_tport(agent, (url_string_t *)url, TAG_END()) == 0);  TEST_1(v = nta_agent_via(agent)); TEST_1(v = v->v_next);  TEST(strcasecmp(v->v_protocol, sip_transport_udp), 0);  TEST_VOID(nta_agent_destroy(agent));  TEST_1(agent = nta_agent_create(ag->ag_root, NONE, NULL, NULL, TAG_END()));  TEST_1(nta_agent_add_tport(agent, (url_string_t *)url, TAG_END()) == 0);  TEST_1(v = nta_agent_via(agent)); TEST_1(!v->v_next);  TEST(strcasecmp(v->v_protocol, sip_transport_udp), 0);  TEST_1(m = nta_agent_contact(agent));  TEST_S(m->m_url->url_params, "transport=udp");  TEST_VOID(nta_agent_destroy(agent));  url->url_params = "transport=tcp,udp";  TEST_1(agent = nta_agent_create(ag->ag_root, NONE, NULL, NULL, TAG_END()));  TEST_1(nta_agent_add_tport(agent, (url_string_t *)url, TAG_END()) == 0);  TEST_1(v = nta_agent_via(agent));   TEST(strcasecmp(v->v_protocol, sip_transport_tcp), 0);  TEST_1(v = v->v_next);    TEST(strcasecmp(v->v_protocol, sip_transport_udp), 0);  TEST_1(m = nta_agent_contact(agent));  TEST_1(!m->m_url->url_params);  TEST_VOID(nta_agent_destroy(agent));  url->url_params = NULL;  TEST_1(agent = nta_agent_create(ag->ag_root, NONE, NULL, NULL, TAG_END()));  TEST_1(nta_agent_add_tport(agent, (url_string_t *)url, TAG_END()) == 0);  TEST_1(v = nta_agent_via(agent));   TEST(strcasecmp(v->v_protocol, sip_transport_udp), 0);  TEST_1(v = v->v_next);  TEST(strcasecmp(v->v_protocol, sip_transport_tcp), 0);  TEST_1(m = nta_agent_contact(agent));  TEST_1(!m->m_url->url_params);  TEST_VOID(nta_agent_destroy(agent));  END();}static int api_test_dialogs(agent_t *ag){  BEGIN();#if 0  {    /* Test 0.1     * Send a message from default leg to default leg      */    char const p_acid[] = "P-Access-Network-Info: IEEE-802.11g\n";    msg_t *msg;    ag->ag_expect_leg = ag->ag_default_leg;    TEST_1(ag->ag_orq = 	  nta_outgoing_tcreate(ag->ag_default_leg, 			       outgoing_callback, ag,			       ag->ag_obp,			       SIP_METHOD_MESSAGE,			       (url_string_t *)ag->ag_contact->m_url,			       SIPTAG_SUBJECT_STR("Test 0.1"),			       SIPTAG_FROM(ag->ag_alice),			       SIPTAG_TO(ag->ag_bob),			       SIPTAG_CONTACT(ag->ag_m_alice),			       SIPTAG_HEADER_STR(p_acid),			       TAG_END()));    TEST(nta_outgoing_getresponse(ag->ag_orq), NULL);    TEST_1(msg = nta_outgoing_getrequest(ag->ag_orq));    TEST(nta_outgoing_method(ag->ag_orq), sip_method_message);    TEST_S(nta_outgoing_method_name(ag->ag_orq), "MESSAGE");    msg_destroy(msg);    TEST(nta_outgoing_delay(ag->ag_orq), UINT_MAX);    nta_test_run(ag);    TEST(ag->ag_status, 200);    TEST(ag->ag_orq, NULL);    TEST(ag->ag_latest_leg, ag->ag_default_leg);    TEST_1(ag->ag_request);    nta_leg_bind(ag->ag_default_leg, leg_callback_200, ag);  }#endif  END();}int outgoing_default(agent_t *ag,		     nta_outgoing_t *orq,		     sip_t const *sip){  BEGIN();  msg_t *msg;  int status = sip->sip_status->st_status;  ag->ag_status = status;  if (status < 200)    return 0;  /* Test API functions */  TEST(nta_outgoing_status(orq), status);  TEST_1(!nta_outgoing_request_uri(orq));  TEST_1(!nta_outgoing_route_uri(orq));  TEST(nta_outgoing_method(orq), sip_method_invalid);  TEST_S(nta_outgoing_method_name(orq), "*");  TEST(nta_outgoing_cseq(orq), 0);  TEST_1(nta_outgoing_delay(orq) == UINT_MAX);    TEST_1(msg = nta_outgoing_getresponse(orq));  if (ag->ag_response == NULL)    ag->ag_response = msg;  else    msg_destroy(msg);  TEST_1(!nta_outgoing_getrequest(orq));  END();}/* Test default incoming and outgoing */static int api_test_default(agent_t *ag){  BEGIN();  nta_agent_t *nta;  nta_incoming_t *irq;  nta_outgoing_t *orq;  sip_via_t via[1];  TEST_1(nta = ag->ag_agent);  TEST_1(irq = nta_incoming_default(nta));  TEST_VOID(nta_incoming_bind(irq, incoming_callback_1, ag));  TEST(nta_incoming_magic(irq, incoming_callback_1), ag);  TEST(nta_incoming_magic(irq, incoming_callback_2), 0);    TEST(nta_incoming_tag(irq, NULL), NULL);  TEST(nta_incoming_gettag(irq), NULL);  TEST(nta_incoming_status(irq), 0);  TEST(nta_incoming_method(irq), sip_method_invalid);  TEST_S(nta_incoming_method_name(irq), "*");  TEST(nta_incoming_url(irq), NULL);  TEST(nta_incoming_cseq(irq), 0);    TEST(nta_incoming_set_params(irq, TAG_END()), 0);    TEST(nta_incoming_getrequest(irq), NULL);  TEST(nta_incoming_getrequest_ackcancel(irq), NULL);  TEST(nta_incoming_getresponse(irq), NULL);    TEST(nta_incoming_complete_response(irq, NULL, SIP_200_OK, TAG_END()), -1);  TEST(nta_incoming_treply(irq, SIP_200_OK, TAG_END()), -1);  TEST(nta_incoming_mreply(irq, NULL), -1);    TEST_VOID(nta_incoming_destroy(irq));    TEST_1(orq = nta_outgoing_default(nta, outgoing_default, ag));  TEST(nta_outgoing_status(orq), 0);  TEST(nta_outgoing_method(orq), sip_method_invalid);  TEST_S(nta_outgoing_method_name(orq), "*");  TEST(nta_outgoing_cseq(orq), 0);  TEST(nta_outgoing_delay(orq), UINT_MAX);  TEST(nta_outgoing_request_uri(orq), NULL);  TEST(nta_outgoing_route_uri(orq), NULL);  TEST(nta_outgoing_getresponse(orq), NULL);  TEST(nta_outgoing_getrequest(orq), NULL);  TEST(nta_outgoing_tagged(orq, NULL, NULL, NULL, NULL), NULL);  TEST(nta_outgoing_cancel(orq), -1);  TEST(nta_outgoing_tcancel(orq, NULL, NULL, TAG_END()), NULL);  TEST_VOID(nta_outgoing_destroy(orq));    TEST_1(irq = nta_incoming_default(nta));  TEST_1(orq = nta_outgoing_default(nta, outgoing_default, ag));  via[0] = nta_agent_via(nta)[0];  via->v_next = NULL;  TEST_1(nta_incoming_treply	 (irq, 	  SIP_200_OK,	  SIPTAG_VIA(via),	  SIPTAG_CALL_ID_STR("oishciucnkrcoihciunskcisj"),	  SIPTAG_CSEQ_STR("1 MESSAGE"),	  SIPTAG_FROM_STR("Arska <sip:arska@example.com>;tag=aiojcidscd0i"),	  SIPTAG_TO_STR("Jaska <sip:jaska@example.net>;tag=iajf8wru"),	  TAG_END()) == 0);  for (ag->ag_status = 0; ag->ag_status < 200; ) {    su_root_step(ag->ag_root, 200);  }  TEST(nta_outgoing_status(orq), 0);  TEST_VOID(nta_outgoing_destroy(orq));  TEST_VOID(nta_incoming_destroy(irq));    END();}/** Test API for errors */

⌨️ 快捷键说明

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