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

📄 test_soa.c

📁 Sofia SIP is an open-source SIP User-Agent library, compliant with the IETF RFC3261 specification.
💻 C
📖 第 1 页 / 共 4 页
字号:
  TEST(soa_is_audio_active(a), SOA_ACTIVE_SENDRECV);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDRECV);  /* ---------------------------------------------------------------------- */  /* Re-O/A: offerer remove media stream from user sdp */  TEST(soa_set_user_sdp(a, 0, "v=0", -1), 1);  n = soa_generate_offer(a, 1, test_completed); TEST(n, 0);  n = soa_get_local_sdp(a, &a_sdp, &offer, &offerlen); TEST(n, 1);  TEST_1(m = a_sdp->sdp_media); TEST_1(m->m_rejected);  TEST_1(offer != NULL && offer != NONE);  n = soa_set_remote_sdp(b, 0, offer, offerlen); TEST(n, 1);  n = soa_generate_answer(b, test_completed); TEST(n, 0);  n = soa_get_local_sdp(b, &b_sdp, &answer, &answerlen); TEST(n, 1);  TEST_1(m = b_sdp->sdp_media); TEST_1(m->m_rejected);  TEST_1(answer != NULL && answer != NONE);  n = soa_set_remote_sdp(a, 0, answer, -1); TEST(n, 1);  n = soa_process_answer(a, test_completed); TEST(n, 0);  n = soa_get_local_sdp(a, &a_sdp, NULL, NULL); TEST(n, 1);  TEST_1(m = a_sdp->sdp_media); TEST_1(m->m_rejected);  TEST_1(soa_is_complete(b));  TEST(soa_activate(b, NULL), 0);  TEST_1(soa_is_complete(a));  TEST(soa_activate(a, NULL), 0);  TEST(soa_is_audio_active(a), SOA_ACTIVE_REJECTED);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_REJECTED);  TEST_VOID(soa_terminate(a, NULL));  TEST_VOID(soa_terminate(b, NULL));  TEST_VOID(soa_destroy(a));  TEST_VOID(soa_destroy(b));  END();}int test_media_reject(struct context *ctx){  BEGIN();  int n;    soa_session_t *a, *b;  char const *offer = NONE, *answer = NONE;  isize_t offerlen = (isize_t)-1, answerlen = (isize_t)-1;  sdp_session_t const *b_sdp;  char const a_caps[] =     "v=0\r\n"    "o=left 219498671 2 IN IP4 127.0.0.2\r\n"    "c=IN IP4 127.0.0.2\r\n"    "m=audio 5008 RTP/AVP 0 8 97\r\n"    "a=rtpmap:97 GSM/8000\n"    ;  char const b_caps[] =     "m=audio 0 RTP/AVP 96 97\n"    "a=rtpmap:96 G7231/8000\n"    "a=rtpmap:97 G729/8000\n";  TEST_1(a = soa_create("static", ctx->root, ctx));  TEST_1(b = soa_create("static", ctx->root, ctx));  TEST(soa_set_user_sdp(a, 0, a_caps, strlen(a_caps)), 1);  TEST(soa_set_user_sdp(b, 0, b_caps, strlen(b_caps)), 1);  n = soa_generate_offer(a, 1, test_completed); TEST(n, 0);  n = soa_get_local_sdp(a, NULL, &offer, &offerlen); TEST(n, 1);  TEST_1(offer != NULL && offer != NONE);  n = soa_set_remote_sdp(b, 0, offer, offerlen); TEST(n, 1);  n = soa_get_local_sdp(b, NULL, &answer, &answerlen); TEST(n, 0);  n = soa_generate_answer(b, test_completed); TEST(n, 0);  n = soa_get_local_sdp(b, &b_sdp, &answer, &answerlen); TEST(n, 1);  TEST_1(answer != NULL && answer != NONE);  n = soa_set_remote_sdp(a, 0, answer, -1); TEST(n, 1);  n = soa_process_answer(a, test_completed); TEST(n, 0);  TEST_1(soa_is_complete(b));  TEST(soa_activate(b, NULL), 0);  TEST_1(soa_is_complete(a));  TEST(soa_activate(a, NULL), 0);  TEST(soa_is_audio_active(a), SOA_ACTIVE_REJECTED);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_REJECTED);  TEST_VOID(soa_terminate(a, NULL));  TEST_VOID(soa_terminate(b, NULL));    TEST_VOID(soa_destroy(a));  TEST_VOID(soa_destroy(b));  END();}int test_media_replace2(struct context *ctx){  BEGIN();  int n;    soa_session_t *a, *b;  char const *offer = NONE, *answer = NONE;  isize_t offerlen = (isize_t)-1, answerlen = (isize_t)-1;  sdp_session_t const *a_sdp, *b_sdp;  sdp_media_t const *m;  char const a_caps[] =     "v=0\r\n"    "o=a 432432423423 2 IN IP4 127.0.0.2\r\n"    "c=IN IP4 127.0.0.2\r\n"    "m=image 5556 UDPTL t38\r\n"    "a=T38FaxVersion:0\r\n"    "a=T38MaxBitRate:9600\r\n"    "a=T38FaxFillBitRemoval:0\r\n"    "a=T38FaxTranscodingMMR:0\r\n"    "a=T38FaxTranscodingJBIG:0\r\n"    "a=T38FaxRateManagement:transferredTCF\r\n"    "a=T38FaxMaxDatagram:400\r\n"    "m=audio 5004 RTP/AVP 0 8\n"    "a=rtpmap:96 G7231/8000\n"    "a=rtpmap:97 G729/8000\n";  char const a_caps2[] =     "v=0\r\n"    "o=a 432432423423 2 IN IP4 127.0.0.2\r\n"    "c=IN IP4 127.0.0.2\r\n"    "m=image 0 UDPTL t38\r\n"    "m=image 5004 UDPTL t38\r\n"    "a=T38FaxVersion:0\r\n"    "a=T38MaxBitRate:9600\r\n"    "a=T38FaxFillBitRemoval:0\r\n"    "a=T38FaxTranscodingMMR:0\r\n"    "a=T38FaxTranscodingJBIG:0\r\n"    "a=T38FaxRateManagement:transferredTCF\r\n"    "a=T38FaxMaxDatagram:400\r\n";  char const b_caps[] =     "v=0\r\n"    "o=left 219498671 2 IN IP4 127.0.0.2\r\n"    "c=IN IP4 127.0.0.2\r\n"    "m=audio 5008 RTP/AVP 0 8\r\n"    ;  char const b_caps2[] =     "v=0\r\n"    "o=left 219498671 2 IN IP4 127.0.0.2\r\n"    "c=IN IP4 127.0.0.2\r\n"    "m=image 5008 UDPTL t38\r\n"    ;  TEST_1(a = soa_create("static", ctx->root, ctx));  TEST_1(b = soa_create("static", ctx->root, ctx));  TEST_1(soa_set_params(a, SOATAG_ORDERED_USER(1),			SOATAG_REUSE_REJECTED(1),			TAG_END()) > 0);  TEST_1(soa_set_params(b, SOATAG_ORDERED_USER(1),			SOATAG_REUSE_REJECTED(1),			TAG_END()) > 0);  TEST(soa_set_user_sdp(a, 0, a_caps, strlen(a_caps)), 1);  TEST(soa_set_user_sdp(b, 0, b_caps, strlen(b_caps)), 1);  n = soa_generate_offer(a, 1, test_completed); TEST(n, 0);  n = soa_get_local_sdp(a, NULL, &offer, &offerlen); TEST(n, 1);  TEST_1(offer != NULL && offer != NONE);  n = soa_set_remote_sdp(b, 0, offer, offerlen); TEST(n, 1);  n = soa_get_local_sdp(b, NULL, &answer, &answerlen); TEST(n, 0);  n = soa_generate_answer(b, test_completed); TEST(n, 0);  n = soa_get_local_sdp(b, &b_sdp, &answer, &answerlen); TEST(n, 1);  TEST_1(answer != NULL && answer != NONE);  n = soa_set_remote_sdp(a, 0, answer, -1); TEST(n, 1);  n = soa_process_answer(a, test_completed); TEST(n, 0);  n = soa_get_local_sdp(a, &a_sdp, NULL, NULL); TEST(n, 1);  TEST_1(soa_is_complete(b));  TEST(soa_activate(b, NULL), 0);  TEST_1(soa_is_complete(a));  TEST(soa_activate(a, NULL), 0);  TEST(soa_is_audio_active(a), SOA_ACTIVE_SENDRECV);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDRECV);  TEST_1(a_sdp->sdp_media);  TEST_1(a_sdp->sdp_media->m_type == sdp_media_image);  TEST_1(a_sdp->sdp_media->m_next);  TEST_1(a_sdp->sdp_media->m_next->m_type == sdp_media_audio);  /* ---------------------------------------------------------------------- */  /* Re-O/A: replace media stream */  /* Do not accept media without common codecs */  TEST_1(soa_set_params(b, SOATAG_RTP_MISMATCH(0),			SOATAG_USER_SDP_STR(b_caps2),			TAG_END()) > 0);  n = soa_generate_offer(b, 1, test_completed); TEST(n, 0);  n = soa_get_local_sdp(b, &b_sdp, &offer, &offerlen); TEST(n, 1);  TEST_1(offer != NULL && offer != NONE);  n = soa_set_remote_sdp(a, 0, offer, offerlen); TEST(n, 1);  TEST_1(soa_set_params(a, SOATAG_RTP_MISMATCH(0),			SOATAG_USER_SDP_STR(a_caps2),			TAG_END()) > 0);  n = soa_generate_answer(a, test_completed); TEST(n, 0);  n = soa_get_local_sdp(a, &a_sdp, &answer, &answerlen); TEST(n, 1);  TEST_1(answer != NULL && answer != NONE);  n = soa_set_remote_sdp(b, 0, answer, -1); TEST(n, 1);  n = soa_process_answer(b, test_completed); TEST(n, 0);  n = soa_get_local_sdp(b, &b_sdp, NULL, NULL); TEST(n, 1);  TEST_1(soa_is_complete(a));  TEST(soa_activate(a, NULL), 0);  TEST_1(soa_is_complete(b));  TEST(soa_activate(b, NULL), 0);  TEST_1(m = a_sdp->sdp_media); TEST_1(m->m_rejected);  TEST_1(m = m->m_next);  TEST(m->m_type, sdp_media_image);  TEST(m->m_proto, sdp_proto_udptl);  TEST_1(m->m_format);   TEST_S(m->m_format->l_text, "t38");   TEST_1(m = b_sdp->sdp_media); TEST_1(m->m_rejected);  TEST_1(m = m->m_next);  TEST(m->m_type, sdp_media_image);  TEST(m->m_proto, sdp_proto_udptl);  TEST_1(m->m_format);   TEST_S(m->m_format->l_text, "t38");   TEST(soa_is_audio_active(a), SOA_ACTIVE_DISABLED);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_DISABLED);  TEST_VOID(soa_terminate(a, NULL));  TEST_VOID(soa_terminate(b, NULL));    TEST_VOID(soa_destroy(a));  TEST_VOID(soa_destroy(b));  END();}int test_asynch_offer_answer(struct context *ctx){  BEGIN();#if 0				/* This has never been implemented */  int n;    char const *caps = NONE, *offer = NONE, *answer = NONE;  isize_t capslen = -1, offerlen = -1, answerlen = -1;  char const a[] =     "v=0\r\n"    "o=left 219498671 2 IN IP4 127.0.0.2\r\n"    "c=IN IP4 127.0.0.2\r\n"    "m=audio 5004 RTP/AVP 0 8\r\n";  char const b[] =     "v=0\n"    "o=right 93298573265 321974 IN IP4 127.0.0.3\n"    "c=IN IP4 127.0.0.3\n"    "m=audio 5006 RTP/AVP 96\n"    "m=rtpmap:96 GSM/8000\n";  n = soa_set_capability_sdp(ctx->asynch.a, 0, 			     "m=audio 5004 RTP/AVP 0 8", -1);   TEST(n, 1);  n = soa_set_capability_sdp(ctx->asynch.a, 0, a, strlen(a)); TEST(n, 1);  n = soa_get_capability_sdp(ctx->asynch.a, 0, &caps, &capslen); TEST(n, 1);  TEST_1(caps != NULL && caps != NONE);  TEST_1(capslen > 0);  n = soa_set_capability_sdp(ctx->asynch.b, 0, b, strlen(b)); TEST(n, 1);  n = soa_generate_offer(ctx->asynch.a, 1, test_completed); TEST(n, 1);  su_root_run(ctx->root); TEST(ctx->completed, ctx->asynch.a);   ctx->completed = NULL;  n = soa_get_local_sdp(ctx->asynch.a, 0, &offer, &offerlen); TEST(n, 1);  n = soa_set_remote_sdp(ctx->asynch.b, 0, offer, offerlen); TEST(n, 1);  n = soa_generate_answer(ctx->asynch.b, test_completed); TEST(n, 1);  su_root_run(ctx->root); TEST(ctx->completed, ctx->asynch.b);   ctx->completed = NULL;  TEST_1(soa_is_complete(ctx->asynch.b));  TEST(soa_activate(ctx->asynch.b, NULL), 0);  n = soa_get_local_sdp(ctx->asynch.b, 0, &answer, &answerlen); TEST(n, 1);  n = soa_set_remote_sdp(ctx->asynch.a, 0, answer, answerlen); TEST(n, 1);  n = soa_process_answer(ctx->asynch.a, test_completed); TEST(n, 1);  su_root_run(ctx->root); TEST(ctx->completed, ctx->asynch.a);   ctx->completed = NULL;  TEST_1(soa_is_complete(ctx->asynch.a));  TEST(soa_activate(ctx->asynch.a, NULL), 0);  TEST(soa_is_audio_active(ctx->asynch.a), SOA_ACTIVE_SENDRECV);  TEST(soa_is_video_active(ctx->asynch.a), SOA_ACTIVE_DISABLED);  TEST(soa_is_image_active(ctx->asynch.a), SOA_ACTIVE_DISABLED);  TEST(soa_is_chat_active(ctx->asynch.a), SOA_ACTIVE_DISABLED);  TEST(soa_is_remote_audio_active(ctx->asynch.a), SOA_ACTIVE_SENDRECV);  TEST(soa_is_remote_video_active(ctx->asynch.a), SOA_ACTIVE_DISABLED);  TEST(soa_is_remote_image_active(ctx->asynch.a), SOA_ACTIVE_DISABLED);  TEST(soa_is_remote_chat_active(ctx->asynch.a), SOA_ACTIVE_DISABLED);  TEST(soa_deactivate(ctx->asynch.a, NULL), 0);  TEST(soa_deactivate(ctx->asynch.b, NULL), 0);  TEST_VOID(soa_terminate(ctx->asynch.a, NULL));  TEST(soa_is_audio_active(ctx->asynch.a), SOA_ACTIVE_DISABLED);  TEST(soa_is_remote_audio_active(ctx->asynch.a), SOA_ACTIVE_DISABLED);  TEST_VOID(soa_terminate(ctx->asynch.b, NULL));#endif    END();}int test_deinit(struct context *ctx){  BEGIN();  su_root_destroy(ctx->root), ctx->root = NULL;  soa_destroy(ctx->a);  soa_destroy(ctx->b);    END();}#if HAVE_ALARMstatic RETSIGTYPE sig_alarm(int s){  fprintf(stderr, "%s: FAIL! test timeout!\n", name);  exit(1);}#endifvoid usage(int exitcode){  fprintf(stderr, 	  "usage: %s [-v|-q] [-a] [-l level] [-p outbound-proxy-uri]\n", 	  name);  exit(exitcode);}int main(int argc, char *argv[]){  int retval = 0, quit_on_single_failure = 0;  int i, o_attach = 0, o_alarm = 1;  struct context ctx[1] = {{{ SU_HOME_INIT(ctx) }}};  for (i = 1; argv[i]; i++) {    if (strcmp(argv[i], "-v") == 0)      tstflags |= tst_verbatim;    else if (strcmp(argv[i], "-a") == 0)      tstflags |= tst_abort;    else if (strcmp(argv[i], "-q") == 0)      tstflags &= ~tst_verbatim;    else if (strcmp(argv[i], "-1") == 0)      quit_on_single_failure = 1;    else if (strncmp(argv[i], "-l", 2) == 0) {      int level = 3;      char *rest = NULL;      if (argv[i][2])	level = strtol(argv[i] + 2, &rest, 10);      else if (argv[i + 1])	level = strtol(argv[i + 1], &rest, 10), i++;      else	level = 3, rest = "";      if (rest == NULL || *rest)	usage(1);            su_log_set_level(soa_log, level);    }    else if (strcmp(argv[i], "--attach") == 0) {      o_attach = 1;    }    else if (strcmp(argv[i], "--no-alarm") == 0) {      o_alarm = 0;    }    else if (strcmp(argv[i], "-") == 0) {      i++; break;    }    else if (argv[i][0] != '-') {      break;    }    else      usage(1);  }#if HAVE_OPEN_C  tstflags |= tst_verbatim;#endif  if (o_attach) {    char line[10];    printf("%s: pid %u\n", name, getpid());    printf("<Press RETURN to continue>\n");    fgets(line, sizeof line, stdin);  }#if HAVE_ALARM  else if (o_alarm) {    alarm(60);    signal(SIGALRM, sig_alarm);  }#endif  su_init();  if (!(TSTFLAGS & tst_verbatim)) {    su_log_soft_set_level(soa_log, 0);  }#define SINGLE_FAILURE_CHECK()						\  do { fflush(stdout);							\    if (retval && quit_on_single_failure) { su_deinit(); return retval; } \  } while(0)  retval |= test_api_errors(ctx); SINGLE_FAILURE_CHECK();  retval |= test_soa_tags(ctx); SINGLE_FAILURE_CHECK();  retval |= test_init(ctx, argv + i); SINGLE_FAILURE_CHECK();  if (retval == 0) {    retval |= test_media_replace2(ctx); SINGLE_FAILURE_CHECK();    retval |= test_params(ctx); SINGLE_FAILURE_CHECK();    retval |= test_static_offer_answer(ctx); SINGLE_FAILURE_CHECK();    retval |= test_codec_selection(ctx); SINGLE_FAILURE_CHECK();    retval |= test_media_replace(ctx); SINGLE_FAILURE_CHECK();    retval |= test_media_removal(ctx); SINGLE_FAILURE_CHECK();    retval |= test_media_reject(ctx); SINGLE_FAILURE_CHECK();    retval |= test_asynch_offer_answer(ctx); SINGLE_FAILURE_CHECK();  }  retval |= test_deinit(ctx); SINGLE_FAILURE_CHECK();  su_deinit();#if HAVE_OPEN_C  sleep(5);#endif  return retval;}

⌨️ 快捷键说明

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