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

📄 check_register.c

📁 Sofia SIP is an open-source SIP User-Agent library, compliant with the IETF RFC3261 specification.
💻 C
📖 第 1 页 / 共 2 页
字号:
  fail_if(s2->registration->contact->m_next != NULL);  s2_register_teardown();} END_TESTSTART_TEST(register_1_2_2_3){  nua_handle_t *nh = nua_handle(nua, NULL, TAG_END());  struct message *m;  s2_case("1.2.2.3", "Register behind NAT",	  "Authenticate, outbound activated, "	  "detect NAT binding change when re-REGISTERing");  mark_point();  make_auth_natted_register(nh,			    NUTAG_OUTBOUND("no-options-keepalive"),			    TAG_END());  s2->registration->nh = nh;  receive_natted = "received=4.255.255.10";  s2_fast_forward(3600);  mark_point();  m = s2_wait_for_request(SIP_METHOD_REGISTER);  fail_if(!m); fail_if(!m->sip->sip_authorization);  s2_save_register(m);  s2_respond_to(m, NULL,		SIP_200_OK,		SIPTAG_CONTACT(s2->registration->contact),		SIPTAG_VIA(natted_via(m)),		TAG_END());  s2_free_message(m);  s2_check_event(nua_r_register, 100);  m = s2_wait_for_request(SIP_METHOD_REGISTER);  fail_if(!m); fail_if(!m->sip->sip_authorization);  fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next);  s2_save_register(m);  s2_respond_to(m, NULL,		SIP_200_OK,		SIPTAG_CONTACT(s2->registration->contact),		SIPTAG_VIA(natted_via(m)),		TAG_END());  s2_free_message(m);  fail_unless(s2->registration->contact != NULL);  fail_if(s2->registration->contact->m_next != NULL);  s2_check_event(nua_r_register, 200);  s2_register_teardown();} END_TESTSTART_TEST(register_1_2_3) {  nua_handle_t *nh;  struct message *m;  s2_case("1.2.3", "Register behind NAT",	  "Outbound activated by error response");  nh = nua_handle(nua, NULL, TAG_END());  nua_register(nh, TAG_END());  mark_point();  m = s2_wait_for_request(SIP_METHOD_REGISTER);  fail_if(!m);  fail_if(!m->sip->sip_contact || m->sip->sip_contact->m_next);  s2_respond_to(m, NULL,		400, "Bad Contact",		SIPTAG_VIA(natted_via(m)),		TAG_END());  s2_free_message(m);  s2_check_event(nua_r_register, 100);  m = s2_wait_for_request(SIP_METHOD_REGISTER);  fail_if(!m);  s2_save_register(m);  s2_respond_to(m, NULL,		SIP_200_OK,		SIPTAG_CONTACT(s2->registration->contact),		SIPTAG_VIA(natted_via(m)),		TAG_END());  s2_free_message(m);  fail_unless(s2->registration->contact != NULL);  fail_if(s2->registration->contact->m_next != NULL);  s2_check_event(nua_r_register, 200);  s2->registration->nh = nh;  s2_register_teardown();} END_TEST/* ---------------------------------------------------------------------- */START_TEST(register_1_3_1){  nua_handle_t *nh;  struct message *m;  s2_case("1.3.1", "Register over TCP via NAT",	  "REGISTER via TCP, detect NTA, re-REGISTER");  nh = nua_handle(nua, NULL, TAG_END());  nua_register(nh, NUTAG_PROXY(s2->tcp.contact->m_url), TAG_END());  m = s2_wait_for_request(SIP_METHOD_REGISTER);  fail_if(!m); fail_if(!m->sip->sip_contact || m->sip->sip_contact->m_next);  fail_if(!tport_is_tcp(m->tport));  s2_save_register(m);  s2_respond_to(m, NULL,		SIP_200_OK,		SIPTAG_CONTACT(s2->registration->contact),		SIPTAG_VIA(natted_via(m)),		TAG_END());  s2_free_message(m);  assert(s2->registration->contact != NULL);  s2_check_event(nua_r_register, 100);  m = s2_wait_for_request(SIP_METHOD_REGISTER);  fail_if(!m);  fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next);  s2_save_register(m);  s2_respond_to(m, NULL,		SIP_200_OK,		SIPTAG_CONTACT(s2->registration->contact),		SIPTAG_VIA(natted_via(m)),		TAG_END());  s2_free_message(m);  fail_unless(s2->registration->contact != NULL);  fail_if(s2->registration->contact->m_next != NULL);  fail_unless(    url_has_param(s2->registration->contact->m_url, "transport=tcp"));  s2_check_event(nua_r_register, 200);  s2->registration->nh = nh;  s2_register_teardown();} END_TESTSTART_TEST(register_1_3_2_1){  nua_handle_t *nh = nua_handle(nua, NULL, TAG_END());  s2_case("1.3.2.1", "Register behind NAT",	  "Authenticate, outbound activated");  mark_point();  s2->registration->nh = nh;  make_auth_natted_register(nh, NUTAG_PROXY(s2->tcp.contact->m_url), TAG_END());  fail_if(!tport_is_tcp(s2->registration->tport));  s2_register_teardown();}END_TESTSTART_TEST(register_1_3_2_2){  nua_handle_t *nh = nua_handle(nua, NULL, TAG_END());  struct message *m;  s2_case("1.3.2.2", "Register behind NAT with TCP",	  "Detect NAT over TCP using rport. "	  "Authenticate, detect NAT, "	  "close TCP at server, wait for re-REGISTERs.");  nua_set_params(nua, NTATAG_TCP_RPORT(1), TAG_END());  s2_check_event(nua_r_set_params, 200);  mark_point();  s2->registration->nh = nh;  make_auth_natted_register(    nh, NUTAG_PROXY(s2->tcp.contact->m_url),    NUTAG_OUTBOUND("no-options-keepalive, no-validate"),    TAG_END());  fail_if(!tport_is_tcp(s2->registration->tport));  tport_shutdown(s2->registration->tport, 2);  m = s2_wait_for_request(SIP_METHOD_REGISTER);  fail_if(!m); fail_if(!m->sip->sip_authorization);  s2_save_register(m);  s2_respond_to(m, NULL,		SIP_200_OK,		SIPTAG_CONTACT(s2->registration->contact),		SIPTAG_VIA(natted_via(m)),		TAG_END());  s2_free_message(m);  /* The "NAT binding" changed when new TCP connection is established */  /* => NUA re-REGISTERs with newly detected contact */  s2_check_event(nua_r_register, 100);  m = s2_wait_for_request(SIP_METHOD_REGISTER);  fail_if(!m); fail_if(!m->sip->sip_authorization);  fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next);  s2_save_register(m);  s2_respond_to(m, NULL,		SIP_200_OK,		SIPTAG_CONTACT(s2->registration->contact),		SIPTAG_VIA(natted_via(m)),		TAG_END());  s2_free_message(m);  s2_check_event(nua_r_register, 200);  fail_unless(s2->registration->contact != NULL);  fail_if(s2->registration->contact->m_next != NULL);  s2_register_teardown();}END_TESTSTART_TEST(register_1_3_3_1){  nua_handle_t *nh = nua_handle(nua, NULL, TAG_END());  struct message *m;  tport_t *tcp;  s2_case("1.3.3.1", "Register behind NAT with UDP and TCP",	  "Register with UDP, UDP time-outing, then w/ TCP using rport. ");  nua_set_params(nua, NTATAG_TCP_RPORT(1), TAG_END());  s2_check_event(nua_r_set_params, 200);  mark_point();  s2->registration->nh = nh;  nua_register(nh,	       NUTAG_OUTBOUND("no-options-keepalive, no-validate"),	       TAG_END());  /* NTA tries with UDP, we drop them */  for (;;) {    m = s2_wait_for_request(SIP_METHOD_REGISTER); fail_if(!m);    if (!tport_is_udp(m->tport)) /* Drop UDP */      break;    s2_free_message(m);    s2_fast_forward(4);  }  tcp = tport_ref(m->tport);  /* Respond to request over TCP */  s2_respond_to(m, NULL,		SIP_401_UNAUTHORIZED,		SIPTAG_WWW_AUTHENTICATE_STR(s2_auth_digest_str),		SIPTAG_VIA(natted_via(m)),		TAG_END());  s2_free_message(m);  s2_check_event(nua_r_register, 401);  nua_authenticate(nh, NUTAG_AUTH(s2_auth_credentials), TAG_END());  /* Turn off pong */  tport_set_params(tcp, TPTAG_PONG2PING(0), TAG_END());  /* Now request over UDP ... registering TCP contact! */  m = s2_wait_for_request(SIP_METHOD_REGISTER);  fail_if(!m); fail_if(!m->sip->sip_authorization);  s2_save_register(m);  fail_unless(    url_has_param(s2->registration->contact->m_url, "transport=tcp"));  s2_respond_to(m, NULL,		SIP_200_OK,		SIPTAG_CONTACT(s2->registration->contact),		SIPTAG_VIA(natted_via(m)),		TAG_END());  s2_free_message(m);  /* NUA detects oops... re-registers UDP */  s2_check_event(nua_r_register, 100);  m = s2_wait_for_request(SIP_METHOD_REGISTER);  fail_if(!m); fail_if(!m->sip->sip_authorization);  fail_if(!m->sip->sip_contact || !m->sip->sip_contact->m_next);  s2_save_register(m);  s2_respond_to(m, NULL,		SIP_200_OK,		SIPTAG_CONTACT(s2->registration->contact),		SIPTAG_VIA(natted_via(m)),		TAG_END());  s2_free_message(m);  s2_check_event(nua_r_register, 200);  fail_unless(s2->registration->contact != NULL);  fail_if(s2->registration->contact->m_next != NULL);  /* Wait until ping-pong failure closes the TCP connection */  {    int i;    for (i = 0; i < 5; i++) {      su_root_step(s2->root, 5);      su_root_step(s2->root, 5);      su_root_step(s2->root, 5);      s2_fast_forward(5);    }  }  s2_register_teardown();}END_TEST/* ---------------------------------------------------------------------- */TCase *register_tcase(void){  TCase *tc = tcase_create("1 - REGISTER");  /* Each testcase is run in different process */  tcase_add_checked_fixture(tc, register_setup, register_teardown);  {    tcase_add_test(tc, register_1_0_1);    tcase_add_test(tc, register_1_1_1);    tcase_add_test(tc, register_1_1_2);    tcase_add_test(tc, register_1_2_1);    tcase_add_test(tc, register_1_2_2_1);    tcase_add_test(tc, register_1_2_2_2);    tcase_add_test(tc, register_1_2_2_3);    tcase_add_test(tc, register_1_2_3);    tcase_add_test(tc, register_1_3_1);    tcase_add_test(tc, register_1_3_2_1);    tcase_add_test(tc, register_1_3_2_2);  }  tcase_set_timeout(tc, 5);  return tc;}TCase *pingpong_tcase(void){  TCase *tc = tcase_create("1 - REGISTER with PingPong");  /* Each testcase is run in different process */  tcase_add_checked_fixture(tc, register_pingpong_setup, register_teardown);  {    tcase_add_test(tc, register_1_3_3_1);  }  tcase_set_timeout(tc, 5);  return tc;}void check_register_cases(Suite *suite){  suite_add_tcase(suite, register_tcase());  suite_add_tcase(suite, pingpong_tcase());}

⌨️ 快捷键说明

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