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

📄 test_nta.c

📁 Sofia SIP is an open-source SIP User-Agent library, compliant with the IETF RFC3261 specification.
💻 C
📖 第 1 页 / 共 5 页
字号:
{  if (sip && sip->sip_via) {    TEST_S(sip->sip_via->v_protocol, "SIP/2.0/SCTP");  }  return 0;}staticint check_via_with_udp(client_t *ctx, nta_outgoing_t *orq, sip_t const *sip){  if (sip && sip->sip_via) {    TEST_S(sip->sip_via->v_protocol, "SIP/2.0/UDP");  }  return 0;}staticint save_and_check_tcp(client_t *ctx, nta_outgoing_t *orq, sip_t const *sip){  if (ctx->c_status >= 200 && ctx->c_extra) {    tport_t *tport = nta_outgoing_transport(orq);    TEST_1(tport);    *(tport_t **)ctx->c_extra = tport;  }  return check_via_with_tcp(ctx, orq, sip);}/* Test transports */int test_tports(agent_t *ag){  int udp = 0, tcp = 0, sctp = 0, tls = 0;  sip_via_t const *v, *v_udp_only = NULL;  char const *udp_comp = NULL;  char const *tcp_comp = NULL;  tport_t *tcp_tport = NULL;  url_t url[1];  BEGIN();  nta_leg_bind(ag->ag_server_leg, leg_callback_200, ag);  *url = *ag->ag_contact->m_url;  url->url_port = "*";  url->url_params = "transport=tcp";  url->url_params = "transport=udp";  TEST_1(nta_agent_add_tport(ag->ag_agent, (url_string_t *)url, 			     TAG_END()) == 0);  TEST_1(v = nta_agent_via(ag->ag_agent));  for (; v; v = v->v_next) {    if (strcasecmp(v->v_protocol, sip_transport_udp) == 0) {      if (udp)	v_udp_only = v;      udp = 1;      if (udp_comp == NULL)	udp_comp = v->v_comp;    }    else if (strcasecmp(v->v_protocol, sip_transport_tcp) == 0) {      tcp = 1;      if (tcp_comp == NULL)	tcp_comp = v->v_comp;    }    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 = *ag->ag_aliases->m_url;  url->url_user = "bob";  if (udp_comp || tcp_comp)    ag->ag_comp = "sigcomp";  {    /* Test 0.1     * Send a message from default leg to default leg      */    char const p_acid[] = "P-Access-Network-Info: IEEE-802.11g\n";    url_t url[1];    client_t ctx[1] = {{ ag, "Test 0.1", check_via_without_sigcomp }};    *url = *ag->ag_contact->m_url;    url->url_params = NULL;    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),			   SIPTAG_HEADER_STR(p_acid),			   TAG_END());    TEST_1(!client_run(ctx, 200));    TEST_P(ag->ag_latest_leg, ag->ag_default_leg);    TEST_1(ag->ag_request);    msg_destroy(ag->ag_request), ag->ag_request = NULL;    nta_leg_bind(ag->ag_default_leg, leg_callback_200, ag);  }  {    /* Test 0.1.2: test url_headers     *     * Send a message from default leg to default leg.     */    url_t url[1];    sip_t *sip;    client_t ctx[1] = {{ ag, "Test 0.1.2", check_via_without_sigcomp }};        *url = *ag->ag_contact->m_url;    /* Test that method parameter is stripped and headers in query are used */    url->url_params = "method=MESSAGE;user=IP";    url->url_headers = "organization=United%20Testers";    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(ag->ag_request);    TEST_1(sip = sip_object(ag->ag_request));    TEST_1(sip->sip_organization);    TEST_S(sip->sip_organization->g_string, "United Testers");    TEST_S(sip->sip_request->rq_url->url_params, "user=IP");        nta_leg_bind(ag->ag_default_leg, leg_callback_200, ag);  }  /* Test 0.1.3   * Send a message from Bob to Alice using SIGCOMP and TCP   */  if (tcp_comp) {    url_t url[1];    sip_payload_t *pl;    size_t size = 1024;    client_t ctx[1] = {{ ag, "Test 0.1.3", check_via_with_sigcomp }};    *url = *ag->ag_aliases->m_url;    url->url_user = "alice";    if (url->url_params)      url->url_params = su_sprintf(NULL, "%s;transport=tcp", url->url_params);    else      url->url_params = "transport=tcp";    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,			   NTATAG_COMP("sigcomp"),			   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_1(ag->ag_client_compartment);    nta_compartment_decref(&ag->ag_client_compartment);    TEST_P(ag->ag_latest_leg, ag->ag_server_leg);  }  /* Test 0.2   * Send a message from Bob to Alice   * This time specify a TCP URI, and include a large payload    * of 512 kB   */  if (tcp) {    client_t ctx[1] = {{ ag, "Test 0.2", save_and_check_tcp, }};    url_t url[1];    sip_payload_t *pl;    usize_t size = 512 * 1024;    ctx->c_extra = &tcp_tport;    *url = *ag->ag_aliases->m_url;    url->url_user = "alice";    url->url_params = "transport=tcp";    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,			   NULL,			   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),			   NTATAG_DEFAULT_PROXY(ag->ag_obp),			   TAG_END());    su_free(ag->ag_home, pl);    TEST_1(!client_run(ctx, 200));    TEST_1(tcp_tport);    TEST_P(ag->ag_latest_leg, ag->ag_server_leg);  }  if (tcp_tport) {    /* Test 0.2.1 - always use transport connection from NTATAG_TPORT()     *     * Test bug reported by geaaru      * - NTATAG_TPORT() is not used if NTATAG_DEFAULT_PROXY() is given     */    client_t ctx[1] = {{ ag, "Test 0.2.1", save_and_check_tcp }};    url_t url[1];    sip_payload_t *pl;    tport_t *used_tport = NULL;        ctx->c_extra = &used_tport;        *url = *ag->ag_aliases->m_url;    url->url_user = "alice";    TEST(tport_shutdown(tcp_tport, 1), 0); /* Not going to send anymore */    TEST_1(pl = test_payload(ag->ag_home, 512));    ag->ag_expect_leg = ag->ag_server_leg;    ctx->c_orq =       nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx,			   NULL,			   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),			   NTATAG_DEFAULT_PROXY(ag->ag_obp),			   NTATAG_TPORT(tcp_tport),			   TAG_END());    su_free(ag->ag_home, pl);    TEST_1(!client_run(ctx, 503));    TEST_P(ag->ag_latest_leg, ag->ag_server_leg);    TEST_1(used_tport == tcp_tport);    tport_unref(tcp_tport), tcp_tport = NULL;    if (v_udp_only)		/* Prepare for next test */      TEST_1(tcp_tport = tport_ref(tport_parent(used_tport)));    tport_unref(used_tport);  }  if (tcp_tport) {    /* test 0.2.2 - select transport protocol using NTATAG_TPORT()     *     * Use primary NTATAG_TPORT() to select transport     */    client_t ctx[1] = {{ ag, "Test 0.2.2", save_and_check_tcp }};    url_t url[1];    sip_payload_t *pl;    tport_t *used_tport = NULL;        ctx->c_extra = &used_tport;    TEST_1(tport_is_primary(tcp_tport));    TEST_1(pl = test_payload(ag->ag_home, 512));    *url = *ag->ag_aliases->m_url;    url->url_user = "alice";    url->url_host = v_udp_only->v_host;    url->url_port = v_udp_only->v_port;    url->url_params = NULL;	/* No sigcomp */    ag->ag_expect_leg = ag->ag_server_leg;    ctx->c_orq =       nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx,			   (url_string_t *)url,			   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),			   NTATAG_TPORT(tcp_tport),			   TAG_END());    su_free(ag->ag_home, pl);    TEST_1(!client_run(ctx, 503));    TEST_P(ag->ag_latest_leg, ag->ag_server_leg);    TEST_1(used_tport);    TEST_1(tport_is_tcp(used_tport));    tport_unref(used_tport);    tport_unref(tcp_tport), tcp_tport = NULL;  }  /* Test 0.3   * Send a message from Bob to Alice   * This time include a large payload of 512 kB, let NTA choose transport.   */  if (tcp) {    client_t ctx[1] = {{ ag, "Test 0.3" }};    url_t url[1];    sip_payload_t *pl;    usize_t size = 512 * 1024;    *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;    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.4.1:   * Send a message from Bob to Alice   * This time include a payload of 2 kB, let NTA choose transport.   */  {    client_t ctx[1] = {{ ag, "Test 0.4.1", check_via_with_tcp }};    url_t url[1];    sip_payload_t *pl;    usize_t size = 2 * 1024;    *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;    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);    su_free(ag->ag_home, ag->ag_in_via), ag->ag_in_via = NULL;  }  /* Test 0.4.2:   * Send a message from Bob to Alices UDP-only address   * This time include a payload of 2 kB, let NTA choose transport.   */  if (v_udp_only) {    client_t ctx[1] = {{ ag, "Test 0.4.2", check_via_with_udp }};    url_t url[1];    sip_payload_t *pl;    usize_t size = 2 * 1024;    *url = *ag->ag_aliases->m_url;    url->url_user = "alice";    url->url_host = v_udp_only->v_host;    url->url_port = v_udp_only->v_port;    url->url_params = NULL;	/* No sigcomp */    TEST_1(pl = test_payload(ag->ag_home, size));    ag->ag_expect_leg = ag->ag_default_leg;    su_free(ag->ag_home, ag->ag_in_via), ag->ag_in_via = 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, 200));    TEST_P(ag->ag_latest_leg, ag->ag_default_leg);    TEST_1(ag->ag_in_via);    TEST_1(strcasecmp(ag->ag_in_via->v_protocol, "SIP/2.0/UDP") == 0);    su_free(ag->ag_home, ag->ag_in_via), ag->ag_in_via = NULL;  }  /* Test 0.5:   * Send a message from Bob to Alice   * This time include a payload of 2 kB, try to use UDP.   */  if (udp) {    client_t ctx[1] = {{ ag, "Test 0.5", check_via_with_udp }};    url_t url[1];    sip_payload_t *pl;    usize_t size = 2 * 1024;    *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;    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),			   TPTAG_MTU(0xffffffff),			   TAG_END());    su_free(ag->ag_home, pl);    TEST_1(!client_run(ctx, 200));    TEST_P(ag->ag_latest_leg, ag->ag_server_leg);  }  if (udp) {    /* Test 0.6     * Send a message from default leg to server leg      * using a prefilled Via header     */    client_t ctx[1] = {{ ag, "Test 0.6", check_magic_branch }};    sip_via_t via[1];    sip_via_init(via);    via->v_protocol = sip_transport_udp;        via->v_host = ag->ag_contact->m_url->url_host;    via->v_port = ag->ag_contact->m_url->url_port;        sip_via_add_param(ag->ag_home, via, "branch=MagicalBranch");    nta_agent_set_params(ag->ag_agent, 			 NTATAG_ALIASES(ag->ag_aliases),			 NTATAG_USER_VIA(1),			 TAG_END());    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),

⌨️ 快捷键说明

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