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

📄 test_nua.c

📁 Internet Phone, Chat, Conferencing
💻 C
📖 第 1 页 / 共 5 页
字号:
  bye(b, b_call, b_call->nh, TAG_END());  run_ab_until(ctx, -1, until_terminated, -1, until_terminated);  /* B transitions:   READY --(T2)--> TERMINATING: nua_bye()   TERMINATING --(T3)--> TERMINATED: nua_r_bye, nua_i_state  */  TEST_1(e = b_call->events.head);  TEST_E(e->data->e_event, nua_r_bye);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */  TEST_1(!e->next);  free_events_in_list(ctx, b_call);  TEST_1(!nua_handle_has_active_call(b_call->nh));  /* A transitions:     READY -(T1)-> TERMINATED: nua_i_bye, nua_i_state  */  TEST_1(e = a_call->events.head); TEST_E(e->data->e_event, nua_i_bye);  TEST(e->data->e_status, 200);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */  TEST_1(!e->next);  free_events_in_list(ctx, a_call);  TEST_1(!nua_handle_has_active_call(a_call->nh));  nua_handle_destroy(a_call->nh), a_call->nh = NULL;  nua_handle_destroy(b_call->nh), b_call->nh = NULL;  if (print_headings)    printf("TEST NUA-3.1: PASSED\n");  END();}/* ======================================================================== *//* Tests NUA-4: Call rejections *//* A      reject-1      B |                    | |-------INVITE------>| |<----100 Trying-----| |                    | |<--------486--------| |---------ACK------->|*/int reject_1(CONDITION_PARAMS){  if (!(check_handle(ep, call, nh, SIP_500_INTERNAL_SERVER_ERROR)))    return 0;  save_event_in_list(ctx, event, ep, call);  switch (callstate(tags)) {  case nua_callstate_received:    respond(ep, call, nh, SIP_486_BUSY_HERE, TAG_END());    return 0;  case nua_callstate_terminated:    if (call)      nua_handle_destroy(call->nh), call->nh = NULL;    return 1;  default:    return 0;  }}int test_reject_a(struct context *ctx){  BEGIN();  struct endpoint *a = &ctx->a, *b = &ctx->b;  struct call *a_call = a->call, *b_call = b->call;  struct event *e;  if (print_headings)    printf("TEST NUA-4.1: reject before ringing\n");  /*   A      reject-1      B   |			|   |-------INVITE------>|   |<----100 Trying-----|   |			|   |<--------486--------|   |---------ACK------->|  */  a_call->sdp = "m=audio 5008 RTP/AVP 8";  b_call->sdp = "m=audio 5010 RTP/AVP 0 8";  TEST_1(a_call->nh = nua_handle(a->nua, a_call, SIPTAG_TO(b->to), TAG_END()));  invite(a, a_call, a_call->nh,	 TAG_IF(!ctx->p, NUTAG_URL(b->contact->m_url)),	 SIPTAG_SUBJECT_STR("reject-1"),	 SOATAG_USER_SDP_STR(a_call->sdp),	 TAG_END());  run_ab_until(ctx, -1, until_terminated, -1, reject_1);  /*   Client transitions in reject-1:   INIT -(C1)-> CALLING -(C6a)-> TERMINATED  */  TEST_1(e = a_call->events.head); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_calling); /* CALLING */  TEST_1(is_offer_sent(e->data->e_tags));  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_invite);  TEST(e->data->e_status, 486);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */  TEST_1(!e->next);  /*   Server transitions in reject-1:   INIT -(S1)-> RECEIVED -(S6a)-> TERMINATED  */  TEST_1(e = b_call->events.head); TEST_E(e->data->e_event, nua_i_invite);  TEST(e->data->e_status, 100);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_received); /* RECEIVED */  TEST_1(is_offer_recv(e->data->e_tags));  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */  TEST_1(!e->next);  free_events_in_list(ctx, a_call);  nua_handle_destroy(a_call->nh), a_call->nh = NULL;  free_events_in_list(ctx, b_call);  nua_handle_destroy(b_call->nh), b_call->nh = NULL;  if (print_headings)    printf("TEST NUA-4.1: PASSED\n");  END();}/* A      reject-2      B |                    | |-------INVITE------>| |<----100 Trying-----| |                    | |<----180 Ringing----| |                    | |<--------602--------| |---------ACK------->|*/int reject_2(CONDITION_PARAMS){  if (!(check_handle(ep, call, nh, SIP_500_INTERNAL_SERVER_ERROR)))    return 0;  save_event_in_list(ctx, event, ep, call);  switch (callstate(tags)) {  case nua_callstate_received:    respond(ep, call, nh, SIP_180_RINGING, TAG_END());    return 0;  case nua_callstate_early:    respond(ep, call, nh, 602, "Rejected 2", TAG_END());    return 0;  case nua_callstate_terminated:    if (call)      nua_handle_destroy(call->nh), call->nh = NULL;    return 1;  default:    return 0;  }}int test_reject_b(struct context *ctx){  BEGIN();  struct endpoint *a = &ctx->a, *b = &ctx->b;  struct call *a_call = a->call, *b_call = b->call;  struct event *e;  /* ------------------------------------------------------------------------ */  /*   A      reject-2      B   |			|   |-------INVITE------>|   |<----100 Trying-----|   |			|   |<----180 Ringing----|   |			|   |<--------602--------|   |---------ACK------->|  */  if (print_headings)    printf("TEST NUA-4.2: reject after ringing\n");  a_call->sdp = "m=audio 5008 RTP/AVP 8";  b_call->sdp = "m=audio 5010 RTP/AVP 0 8";  /* Make call reject-2 */  TEST_1(a_call->nh = nua_handle(a->nua, a_call, SIPTAG_TO(b->to), TAG_END()));  invite(a, a_call, a_call->nh,	 TAG_IF(!ctx->p, NUTAG_URL(b->contact->m_url)),	 SIPTAG_SUBJECT_STR("reject-2"),	 SOATAG_USER_SDP_STR(a_call->sdp),	 TAG_END());  run_ab_until(ctx, -1, until_terminated, -1, reject_2);  /*   Client transitions in reject-2:   INIT -(C1)-> CALLING -(C2)-> PROCEEDING -(C6b)-> TERMINATED  */  TEST_1(e = a_call->events.head); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_calling); /* CALLING */  TEST_1(is_offer_sent(e->data->e_tags));  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_invite);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_proceeding); /* PROCEEDING */  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_invite);  TEST(e->data->e_status, 602);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */  TEST_1(!e->next);  /*   Server transitions in reject-2:   INIT -(S1)-> RECEIVED -(S2)-> EARLY -(S6a)-> TERMINATED  */  TEST_1(e = b_call->events.head); TEST_E(e->data->e_event, nua_i_invite);  TEST(e->data->e_status, 100);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_received); /* RECEIVED */  TEST_1(is_offer_recv(e->data->e_tags));  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_early); /* EARLY */  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */  TEST_1(!e->next);  free_events_in_list(ctx, a_call);  nua_handle_destroy(a_call->nh), a_call->nh = NULL;  free_events_in_list(ctx, b_call);  nua_handle_destroy(b_call->nh), b_call->nh = NULL;  if (print_headings)    printf("TEST NUA-4.2: PASSED\n");  END();}/* ------------------------------------------------------------------------ */int reject_302(CONDITION_PARAMS);int reject_604(CONDITION_PARAMS);/* A     reject-302     B |                    | |-------INVITE------>| |<----100 Trying-----| |                    | |<-----302 Other-----| |--------ACK-------->| |                    | |-------INVITE------>| |<----100 Trying-----| |                    | |<----180 Ringing----| |                    | |<---604 Nowhere-----| |--------ACK-------->|*/int reject_302(CONDITION_PARAMS){  if (!(check_handle(ep, call, nh, SIP_500_INTERNAL_SERVER_ERROR)))    return 0;  save_event_in_list(ctx, event, ep, call);  switch (callstate(tags)) {  case nua_callstate_received:    {      sip_contact_t m[1];      *m = *ep->contact;      m->m_url->url_user = "302";      respond(ep, call, nh, SIP_302_MOVED_TEMPORARILY,	      SIPTAG_CONTACT(m), TAG_END());    }    return 0;  case nua_callstate_terminated:    if (call)      nua_handle_destroy(call->nh), call->nh = NULL;    ep->next_condition = reject_604;    return 0;  default:    return 0;  }}int reject_604(CONDITION_PARAMS){  if (!(check_handle(ep, call, nh, SIP_500_INTERNAL_SERVER_ERROR)))    return 0;  save_event_in_list(ctx, event, ep, call);  switch (callstate(tags)) {  case nua_callstate_received:    respond(ep, call, nh, SIP_180_RINGING, TAG_END());    return 0;  case nua_callstate_early:    respond(ep, call, nh, SIP_604_DOES_NOT_EXIST_ANYWHERE, TAG_END());    return 0;  case nua_callstate_terminated:    if (call)      nua_handle_destroy(call->nh), call->nh = NULL;    return 1;  default:    return 0;  }}int test_reject_302(struct context *ctx){  BEGIN();  struct endpoint *a = &ctx->a, *b = &ctx->b;  struct call *a_call = a->call, *b_call = b->call;  struct event *e;  /* Make call reject-3 */  if (print_headings)    printf("TEST NUA-4.3: redirect then reject\n");  a_call->sdp = "m=audio 5008 RTP/AVP 8";  b_call->sdp = "m=audio 5010 RTP/AVP 0 8";  TEST_1(a_call->nh = nua_handle(a->nua, a_call, SIPTAG_TO(b->to), TAG_END()));  invite(a, a_call, a_call->nh,	 TAG_IF(!ctx->p, NUTAG_URL(b->contact->m_url)),	 SIPTAG_SUBJECT_STR("reject-3"),	 SOATAG_USER_SDP_STR(a_call->sdp),	 TAG_END());  run_ab_until(ctx, -1, until_terminated, -1, reject_302);  /*   A      reject-3      B   |			|   |-------INVITE------>|   |<----100 Trying-----|   |			|   |<-----302 Other-----|   |--------ACK-------->|   |			|   |-------INVITE------>|   |<----100 Trying-----|   |			|   |<----180 Ringing----|   |			|   |<---604 Nowhere-----|   |--------ACK-------->|  */  /*   Client transitions in reject-3:   INIT -(C1)-> PROCEEDING -(C6a)-> TERMINATED/INIT   INIT -(C1)-> CALLING -(C2)-> PROCEEDING -(C6b)-> TERMINATED  */  TEST_1(e = a_call->events.head); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_calling); /* CALLING */  TEST_1(is_offer_sent(e->data->e_tags));  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_invite);  TEST(e->data->e_status, 100);  TEST(sip_object(e->data->e_msg)->sip_status->st_status, 302);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_calling); /* CALLING */  TEST_1(is_offer_sent(e->data->e_tags));  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_invite);  TEST(e->data->e_status, 180);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_proceeding); /* PROCEEDING */  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_invite);  TEST(e->data->e_status, 604);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */  TEST_1(!e->next);  /*   Server transitions:   INIT -(S1)-> RECEIVED -(S6a)-> TERMINATED/INIT   INIT -(S1)-> RECEIVED -(S2)-> EARLY -(S6b)-> TERMINATED  */  TEST_1(e = b_call->events.head); TEST_E(e->data->e_event, nua_i_invite);  TEST(e->data->e_status, 100);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_received); /* RECEIVED */  TEST_1(is_offer_recv(e->data->e_tags));  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_invite);  TEST(e->data->e_status, 100);  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_received); /* RECEIVED */  TEST_1(is_offer_recv(e->data->e_tags));  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_early); /* EARLY */  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);  TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */  TEST_1(!e->next);  free_events_in_list(ctx, a_call);  nua_handle_destroy(a_call->nh), a_call->nh = NULL;  free_events_in_list(ctx, b_call);  nua_handle_destroy(b_call->nh), b_call->nh = NULL;  if (print_headings)    printf("TEST NUA-4.3: PASSED\n");  END();}/* ------------------------------------------------------------------------ *//* Reject call with 407, then 401 */int reject_407(CONDITION_PARAMS);int reject_401(CONDITION_PARAMS);int authenticate_call(CONDITION_PARAMS);int reject_403(CONDITION_PARAMS);/* A     reject-401     B |                    | |-------INVITE------>| |<----100 Trying-----| |<--------407--------| |---------ACK------->| |                    | |-------INVITE------>| |<----100 Trying-----| |                    | |<----180 Ringing----| |                    | |<--------401--------| |---------ACK------->| |                    | |-------INVITE------>| |<----100 Trying-----| |<-------403---------| |--------ACK-------->|*/int reject_407(CONDITION_PARAMS){  if (!(check_handle(ep, call, nh, SIP_500_INTERNAL_SERVER_ERROR)))    return 0;  save_event_in_list(ctx, event, ep, call);  switch (callstate(tags)) {  case nua_callstate_received:    respond(ep, call, nh, SIP_407_PROXY_AUTH_REQUIRED,	    SIPTAG_PROXY_AUTHENTICATE_STR("Digest realm=\"test_nua\", "					  "nonce=\"nsdhfuds\", algorithm=MD5, "					  "qop=\"auth-int\""),	    TAG_END());    return 0;  case nua_callstate_terminated:    if (call)      nua_handle_destroy(call->nh), call->nh = NULL;    ep->next_condition = reject_401;    return 0;  default:    return 0;  }}int reject_401(CONDITION_PARAMS){  if (!(check_hand

⌨️ 快捷键说明

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