📄 test_nta.c
字号:
SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), SIPTAG_CONTACT(ag->ag_m_alice), SIPTAG_VIA(via), TAG_END()); TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_server_leg); nta_agent_set_params(ag->ag_agent, NTATAG_USER_VIA(0), TAG_END()); } /* Test 0.7 * Send a message from Bob to Alice using SCTP */ if (sctp) { url_t url[1]; sip_payload_t *pl; usize_t size = 16 * 1024; client_t ctx[1] = {{ ag, "Test 0.7", check_via_with_sctp }}; *url = *ag->ag_aliases->m_url; url->url_user = "alice";#if 0 if (url->url_params) url->url_params = su_sprintf(NULL, "%s;transport=sctp", url->url_params); else#endif url->url_params = "transport=sctp"; TEST_1(pl = test_payload(ag->ag_home, size)); ag->ag_expect_leg = ag->ag_server_leg; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_bob), SIPTAG_TO(ag->ag_alice), SIPTAG_CONTACT(ag->ag_m_bob), SIPTAG_PAYLOAD(pl), TAG_END()); su_free(ag->ag_home, pl); TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_server_leg); } /* Test 0.8: Send a too large message */ if (tcp) { url_t url[1]; sip_payload_t *pl; usize_t size = 128 * 1024; client_t ctx[1] = {{ ag, "Test 0.8" }}; nta_agent_set_params(ag->ag_agent, NTATAG_MAXSIZE(65536), TAG_END()); *url = *ag->ag_aliases->m_url; url->url_user = "alice"; TEST_1(pl = test_payload(ag->ag_home, size)); ag->ag_expect_leg = ag->ag_server_leg; ag->ag_latest_leg = NULL; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_bob), SIPTAG_TO(ag->ag_alice), SIPTAG_CONTACT(ag->ag_m_bob), SIPTAG_PAYLOAD(pl), TAG_END()); su_free(ag->ag_home, pl); TEST_1(!client_run(ctx, 413)); TEST_P(ag->ag_latest_leg, NULL); nta_agent_set_params(ag->ag_agent, NTATAG_MAXSIZE(2 * 1024 * 1024), TAG_END()); } /* Test 0.9: Timeout */ { url_t url[1]; client_t ctx[1] = {{ ag, "Test 0.9" }}; printf("%s: starting MESSAGE timeout test, completing in 4 seconds\n", name); nta_agent_set_params(ag->ag_agent, NTATAG_TIMEOUT_408(1), NTATAG_SIP_T1(25), NTATAG_SIP_T1X64(64 * 25), NTATAG_SIP_T2(8 * 25), NTATAG_SIP_T4(10 * 25), TAG_END()); *url = *ag->ag_aliases->m_url; url->url_user = "timeout"; url->url_port = ag->ag_sink_port; ag->ag_expect_leg = ag->ag_server_leg; ag->ag_latest_leg = NULL; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_bob), SIPTAG_TO(ag->ag_alice), SIPTAG_CONTACT(ag->ag_m_bob), TAG_END()); TEST_1(!client_run(ctx, 408)); TEST_P(ag->ag_latest_leg, NULL); nta_agent_set_params(ag->ag_agent, NTATAG_SIP_T1(500), NTATAG_SIP_T1X64(64 * 500), NTATAG_SIP_T2(NTA_SIP_T2), NTATAG_SIP_T4(NTA_SIP_T4), TAG_END()); } END();}int leg_callback_destroy(agent_t *ag, nta_leg_t *leg, nta_incoming_t *irq, sip_t const *sip){ if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } ag->ag_latest_leg = leg; nta_incoming_destroy(irq); return 0;}int leg_callback_save(agent_t *ag, nta_leg_t *leg, nta_incoming_t *irq, sip_t const *sip){ if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } ag->ag_latest_leg = leg; ag->ag_irq = irq; ag->ag_running = 0; return 0;}int test_destroy_incoming(agent_t *ag){ BEGIN(); url_t url[1]; *url = *ag->ag_contact->m_url; { client_t ctx[1] = {{ ag, "Test 3.1" }}; /* Test 3.1 * Check that when a incoming request is destroyed in callback, * a 500 response is sent */ ag->ag_expect_leg = ag->ag_default_leg; nta_leg_bind(ag->ag_default_leg, leg_callback_destroy, ag); ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), TAG_END()); TEST_1(!client_run(ctx, 500)); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); } { /* Test 3.2 * Check that when an incoming request is destroyed, a 500 response is sent */ client_t ctx[1] = {{ ag, "Test 3.2" }}; nta_leg_bind(ag->ag_default_leg, leg_callback_save, ag); ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), TAG_END()); TEST_1(ctx->c_orq); nta_test_run(ag); TEST(ctx->c_status, 0); TEST_1(ag->ag_irq); TEST_1(ctx->c_orq); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); nta_incoming_destroy(ag->ag_irq), ag->ag_irq = NULL; TEST_1(!client_run(ctx, 500)); } END();}int test_resolv(agent_t *ag, char const *resolv_conf){ int udp = 0, tcp = 0, sctp = 0, tls = 0; sip_via_t const *v; url_t *url; if (!resolv_conf) return 0; BEGIN(); nta_leg_bind(ag->ag_default_leg, leg_callback_200, ag); nta_agent_set_params(ag->ag_agent, NTATAG_SIP_T1(8 * 25), NTATAG_SIP_T1X64(64 * 25), NTATAG_SIP_T4(10 * 25), TAG_END()); TEST_1(v = nta_agent_via(ag->ag_agent)); for (; v; v = v->v_next) { if (strcasecmp(v->v_protocol, sip_transport_udp) == 0) udp = 1; else if (strcasecmp(v->v_protocol, sip_transport_tcp) == 0) tcp = 1; else if (strcasecmp(v->v_protocol, sip_transport_sctp) == 0) sctp = 1; else if (strcasecmp(v->v_protocol, sip_transport_tls) == 0) tls = 1; } url = url_hdup(ag->ag_home, (void *)"sip:example.org"); TEST_1(url); { /* Test 1.1 * Send a message to sip:example.org */ client_t ctx[1] = {{ ag, "Test 1.1" }}; ag->ag_expect_leg = ag->ag_default_leg; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); } { /* Test 1.2 * Send a message to sip:srv.example.org */ client_t ctx[1] = {{ ag, "Test 1.2" }}; url->url_host = "srv.example.org"; ag->ag_expect_leg = ag->ag_default_leg; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); } { /* Test 1.3 * Send a message to sip:ipv.example.org */ client_t ctx[1] = {{ ag, "Test 1.3" }}; url->url_host = "ipv.example.org"; ag->ag_expect_leg = ag->ag_default_leg; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); } { /* Test 1.4.1 * Send a message to sip:down.example.org */ client_t ctx[1] = {{ ag, "Test 1.4.1" }}; url->url_host = "down.example.org"; ag->ag_expect_leg = ag->ag_default_leg; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); } { /* Test 1.4.2 * Send a message to sip:na503.example.org */ client_t ctx[1] = {{ ag, "Test 1.4.2" }}; url->url_host = "na503.example.org"; ag->ag_expect_leg = ag->ag_default_leg; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(!client_run(ctx, 503)); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); } { /* Test 1.4.3 * Send a message to sip:nona.example.org */ client_t ctx[1] = {{ ag, "Test 1.4.3" }}; url->url_host = "nona.example.org"; ag->ag_expect_leg = ag->ag_default_leg; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); } { /* Test 1.4.4 * Send a message to sip:nosrv.example.org * After failing to find _sip._udp.nosrv.example.org, * second SRV with _sip._udp.srv.example.org succeeds */ client_t ctx[1] = {{ ag, "Test 1.4.4" }}; url->url_host = "nosrv.example.org"; ag->ag_expect_leg = ag->ag_default_leg; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); } { /* Test 1.5.1 * Send a message to sip:srv.example.org;transport=tcp * Test outgoing_make_srv_query() */ client_t ctx[1] = {{ ag, "Test 1.5.1: outgoing_make_srv_query()" }}; url->url_host = "srv.example.org"; url->url_params = "transport=tcp"; ag->ag_expect_leg = ag->ag_default_leg; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); url->url_params = NULL; } { /* Test 1.5.2 * Send a message to sip:srv.example.org;transport=udp * Test outgoing_make_srv_query() */ client_t ctx[1] = {{ ag, "Test 1.5.2: outgoing_make_srv_query()" }}; url->url_host = "srv.example.org"; url->url_params = "transport=udp"; ag->ag_expect_leg = ag->ag_default_leg; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); url->url_params = NULL; } { /* Test 1.5.3 * Send a message to sip:srv2.example.org;transport=udp * Test outgoing_query_srv_a() */ client_t ctx[1] = {{ ag, "Test 1.5: outgoing_query_srv_a()" }}; url->url_host = "srv2.example.org"; url->url_params = "transport=udp"; ag->ag_expect_leg = ag->ag_default_leg; ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, (url_string_t *)url, SIPTAG_SUBJECT_STR(ctx->c_name), SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_default_leg); url->url_params = NULL; } { /* Test 1.6.1 * Send a message to sip:srv.example.org:$port * Test outgoing_make_a_aaaa_query() */ client_t ctx[1] = {{ ag, "Test 1.6.1: outgoing_make_a_aaaa_query()" }}; url->url_host = "srv.example.org";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -