📄 test_nta_api.c
字号:
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 + -