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

📄 test_nta.c

📁 sip协议栈
💻 C
📖 第 1 页 / 共 5 页
字号:
    sip_from_init(from);    sip_to_init(to);    sip_contact_init(m);    TEST_1(ag->ag_contact = nta_agent_contact(ag->ag_agent));    *m->m_url = *ag->ag_contact->m_url;    m->m_url->url_user = "bob";    TEST_1(ag->ag_m_bob = sip_contact_dup(ag->ag_home, m));    to->a_display = "Bob";    *to->a_url = *ag->ag_contact->m_url;    to->a_url->url_user = "bob";    to->a_url->url_port = NULL;    TEST_1(ag->ag_bob = sip_to_dup(ag->ag_home, to));    *m->m_url = *ag->ag_contact->m_url;    m->m_url->url_user = "alice";    TEST_1(ag->ag_m_alice = sip_contact_dup(ag->ag_home, m));    from->a_display = "Alice";    *from->a_url = *ag->ag_contact->m_url;    from->a_url->url_user = "alice";    from->a_url->url_port = NULL;    TEST_1(ag->ag_alice = sip_from_dup(ag->ag_home, from));  }  {    char const data[] =       "v=0\r\n"      "o=- 425432 423412 IN IP4 127.0.0.1\r\n"      "s= \r\n"      "c=IN IP4 127.0.0.1\r\n"      "m=5004 audio 8 0\r\n";    ag->ag_content_type = sip_content_type_make(ag->ag_home, "application/sdp");    ag->ag_payload = sip_payload_make(ag->ag_home, data);  }  {    sip_contact_t *m;    ag->ag_aliases =       sip_contact_make(ag->ag_home, "sip:127.0.0.1, sip:localhost, sip:[::1]");    TEST_1(ag->ag_aliases);    TEST_1(ag->ag_aliases->m_next);    TEST_1(ag->ag_aliases->m_next->m_next);    TEST(ag->ag_aliases->m_next->m_next->m_next, NULL);    for (m = ag->ag_aliases; m; m = m->m_next)      m->m_url->url_port = ag->ag_contact->m_url->url_port;    TEST_1(m = sip_contact_dup(ag->ag_home, ag->ag_contact));    m->m_next = ag->ag_aliases;    ag->ag_aliases = m;    TEST(nta_agent_set_params(ag->ag_agent, 			      NTATAG_ALIASES(ag->ag_aliases),			      NTATAG_REL100(1),			      NTATAG_UA(1), 			      NTATAG_USE_NAPTR(1),			      NTATAG_USE_SRV(1),			      TAG_END()),	 5);    TEST(nta_agent_set_params(ag->ag_agent, 			      NTATAG_ALIASES(ag->ag_aliases),			      NTATAG_DEFAULT_PROXY("sip:127.0.0.1"),			      TAG_END()), 2);    TEST(nta_agent_set_params(ag->ag_agent, 			      NTATAG_ALIASES(ag->ag_aliases),			      NTATAG_DEFAULT_PROXY(NULL),			      TAG_END()), 2);    TEST(nta_agent_set_params(ag->ag_agent, 			      NTATAG_DEFAULT_PROXY("tel:+35878008000"),			      TAG_END()), -1);  }    {    url_t url[1];    /* Create the server leg */    *url = *ag->ag_aliases->m_url;    url->url_user = "%";    TEST_1(ag->ag_server_leg = nta_leg_tcreate(ag->ag_agent, 					       leg_callback_200,					       ag,					       NTATAG_NO_DIALOG(1),					       URLTAG_URL(url),					       TAG_END()));  }  END();}  int test_deinit(agent_t *ag){  BEGIN();  if (ag->ag_request) msg_destroy(ag->ag_request), ag->ag_request = NULL;  su_free(ag->ag_home, ag->ag_in_via), ag->ag_in_via = NULL;  nta_leg_destroy(ag->ag_alice_leg);  nta_leg_destroy(ag->ag_bob_leg);  nta_leg_destroy(ag->ag_default_leg);  nta_leg_destroy(ag->ag_server_leg);  nta_agent_destroy(ag->ag_agent);  su_root_destroy(ag->ag_root);  su_free(ag->ag_home, (void *)ag->ag_sink_port), ag->ag_sink_port = NULL;  free(ag->ag_mclass), ag->ag_mclass = NULL;  END();}  static unsigned char const code[] =   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";#include <sofia-sip/su_uniqueid.h>sip_payload_t *test_payload(su_home_t *home, int size){  sip_payload_t *pl = sip_payload_create(home, NULL, size);  if (pl) {    int i;    char *data = (char *)pl->pl_data;        for (i = 0; i < size; i++) {      if ((i & 63) != 63)	data[i] = code[su_randint(0, 63)];      else	data[i] = '\n';    }  }  return pl;}/* 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;  url_t url[1];  BEGIN();  *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];    *url = *ag->ag_contact->m_url;    url->url_params = NULL;    ag->ag_expect_leg = ag->ag_default_leg;    su_free(ag->ag_home, (void *)ag->ag_out_via), ag->ag_out_via = NULL;    TEST_1(ag->ag_orq = 	  nta_outgoing_tcreate(ag->ag_default_leg, 			       outgoing_callback, ag,			       ag->ag_obp,			       SIP_METHOD_MESSAGE,			       (url_string_t *)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()));    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);    TEST_1(ag->ag_out_via->v_comp == NULL);    nta_leg_bind(ag->ag_default_leg, leg_callback_200, ag);  }  /* Test 0.1.1   * Send a message from Bob to Alice using SIGCOMP and TCP   */  if (tcp_comp) {    url_t url[1];    sip_payload_t *pl;    unsigned size = 1024;    *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;    su_free(ag->ag_home, (void *)ag->ag_out_via), ag->ag_out_via = NULL;    TEST_1(ag->ag_orq = 	   nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ag,				ag->ag_obp,				SIP_METHOD_MESSAGE,				(url_string_t *)url,				NTATAG_COMP("sigcomp"),				SIPTAG_SUBJECT_STR("Test 0.1.1"),				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);    nta_test_run(ag);    TEST(ag->ag_status, 200);    TEST_1(ag->ag_client_compartment);    nta_compartment_decref(&ag->ag_client_compartment);    TEST(ag->ag_orq, NULL);    TEST(ag->ag_latest_leg, ag->ag_server_leg);    TEST_S(ag->ag_out_via->v_comp, "sigcomp");  }  /* 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) {    url_t url[1];    sip_payload_t *pl;    unsigned size = 512 * 1024;    *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;    TEST_1(ag->ag_orq =           nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ag,			       NULL,			       SIP_METHOD_MESSAGE,			       (url_string_t *)url,			       SIPTAG_SUBJECT_STR("Test 0.2"),			       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);    nta_test_run(ag);    TEST(ag->ag_status, 200);    TEST(ag->ag_orq, NULL);    TEST(ag->ag_latest_leg, ag->ag_server_leg);  }  /* 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) {    url_t url[1];    sip_payload_t *pl;    unsigned 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;    TEST_1(ag->ag_orq =           nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ag,			       ag->ag_obp,			       SIP_METHOD_MESSAGE,			       (url_string_t *)url,			       SIPTAG_SUBJECT_STR("Test 0.3"),			       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);    nta_test_run(ag);    TEST(ag->ag_status, 200);    TEST(ag->ag_orq, NULL);    TEST(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.   */  {    url_t url[1];    sip_payload_t *pl;    unsigned size = 2 * 1024;    *url = *ag->ag_aliases->m_url;    url->url_user = "alice";    TEST_1(pl = test_payload(ag->ag_home, size));    su_free(ag->ag_home, (void *)ag->ag_out_via), ag->ag_out_via = NULL;    ag->ag_expect_leg = ag->ag_server_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 *)url,			       SIPTAG_SUBJECT_STR("Test 0.4.1"),			       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);    nta_test_run(ag);    TEST(ag->ag_status, 200);    TEST(ag->ag_orq, NULL);    TEST(ag->ag_latest_leg, ag->ag_server_leg);    TEST_1(ag->ag_out_via);    TEST_1(strcasecmp(ag->ag_out_via->v_protocol, "SIP/2.0/TCP") == 0 ||	   strcasecmp(ag->ag_out_via->v_protocol, "SIP/2.0/SCTP") == 0);    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) {    url_t url[1];    sip_payload_t *pl;    unsigned 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;    TEST_1(ag->ag_orq =           nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ag,			       ag->ag_obp,			       SIP_METHOD_MESSAGE,			       (url_string_t *)url,			       SIPTAG_SUBJECT_STR("Test 0.4.2"),			       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);    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_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) {    url_t url[1];    sip_payload_t *pl;    unsigned size = 2 * 1024;    *url = *ag->ag_aliases->m_url;    url->url_user = "alice";    TEST_1(pl = test_payload(ag->ag_home, size));    su_free(ag->ag_home, (void *)ag->ag_out_via), ag->ag_out_via = NULL;    ag->ag_expect_leg = ag->ag_server_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 *)url,			       SIPTAG_SUBJECT_STR("Test 0.5"),			       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);    nta_test_run(ag);    TEST(ag->ag_status, 200);    TEST(ag->ag_orq, NULL);    TEST(ag->ag_latest_leg, ag->ag_server_leg);    TEST_1(ag->ag_out_via);    TEST_S(ag->ag_out_via->v_protocol, "SIP/2.0/UDP");  }  if (udp) {    /* Send a message from default leg to server leg      * using a prefilled Via header     */    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;    TEST_1(ag->ag_orq = 	  nta_outgoing_tcreate(ag->ag_default_leg, 			       magic_callback, ag,			       ag->ag_obp,			       SIP_METHOD_MESSAGE,			       (url_string_t *)url,			       SIPTAG_SUBJECT_STR("Test 0.6"),			       SIPTAG_FROM(ag->ag_alice),			       SIPTAG_TO(ag->ag_bob),			       SIPTAG_CONTACT(ag->ag_m_alice),

⌨️ 快捷键说明

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