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

📄 test_soa.c

📁 sip协议栈
💻 C
📖 第 1 页 / 共 3 页
字号:
  TEST_1(a = soa_clone(ctx->a, ctx->root, ctx));  TEST_1(b = soa_clone(ctx->b, ctx->root, ctx));  n = soa_get_local_sdp(a, NULL, &offer, &offerlen); TEST(n, 0);  n = soa_set_user_sdp(a, 0, "m=audio 5004 RTP/AVP 0 8", -1); TEST(n, 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_set_params(b,		     SOATAG_LOCAL_SDP_STR("m=audio 5004 RTP/AVP 8"),		     TAG_END());    n = soa_generate_answer(b, test_completed); TEST(n, 0);  TEST_1(soa_is_complete(b));  TEST(soa_activate(b, NULL), 0);  n = soa_get_local_sdp(b, NULL, &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(a));  TEST(soa_activate(a, NULL), 0);  TEST(soa_is_audio_active(a), SOA_ACTIVE_SENDRECV);  TEST(soa_is_video_active(a), SOA_ACTIVE_DISABLED);  TEST(soa_is_image_active(a), SOA_ACTIVE_DISABLED);  TEST(soa_is_chat_active(a), SOA_ACTIVE_DISABLED);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDRECV);  TEST(soa_is_remote_video_active(a), SOA_ACTIVE_DISABLED);  TEST(soa_is_remote_image_active(a), SOA_ACTIVE_DISABLED);  TEST(soa_is_remote_chat_active(a), SOA_ACTIVE_DISABLED);  /* 'A' will put call on hold */  offer = NONE;  TEST(soa_set_params(a, SOATAG_HOLD("*"), TAG_END()), 1);  TEST(soa_generate_offer(a, 1, test_completed), 0);  TEST(soa_get_local_sdp(a, NULL, &offer, &offerlen), 1);  TEST_1(offer != NULL && offer != NONE);  TEST_1(strstr(offer, "a=sendonly"));  TEST(soa_set_remote_sdp(b, 0, offer, offerlen), 1);  TEST(soa_generate_answer(b, test_completed), 0);  TEST_1(soa_is_complete(b));  TEST(soa_activate(b, NULL), 0);  TEST(soa_get_local_sdp(b, NULL, &answer, &answerlen), 1);  TEST_1(answer != NULL && answer != NONE);  TEST_1(strstr(answer, "a=recvonly"));  TEST(soa_set_remote_sdp(a, 0, answer, -1), 1);  TEST(soa_process_answer(a, test_completed), 0);  TEST(soa_activate(a, NULL), 0);  TEST(soa_is_audio_active(a), SOA_ACTIVE_SENDONLY);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDONLY);  /* 'A' will release hold. */   TEST(soa_set_params(a, SOATAG_HOLD(NULL), TAG_END()), 1);  TEST(soa_generate_offer(a, 1, test_completed), 0);  TEST(soa_get_local_sdp(a, NULL, &offer, &offerlen), 1);  TEST_1(offer != NULL && offer != NONE);  TEST_1(!strstr(offer, "a=sendonly"));  TEST(soa_set_remote_sdp(b, 0, offer, offerlen), 1);  TEST(soa_generate_answer(b, test_completed), 0);  TEST_1(soa_is_complete(b));  TEST(soa_activate(b, NULL), 0);  TEST(soa_get_local_sdp(b, NULL, &answer, &answerlen), 1);  TEST_1(answer != NULL && answer != NONE);  TEST_1(!strstr(answer, "a=recvonly"));  TEST(soa_set_remote_sdp(a, 0, answer, -1), 1);  TEST(soa_process_answer(a, test_completed), 0);  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);  /* 'A' will put B on hold but this time with c=IN IP4 0.0.0.0 */  TEST(soa_set_params(a, SOATAG_HOLD("*"), TAG_END()), 1);  TEST(soa_generate_offer(a, 1, test_completed), 0);  {    sdp_session_t const *o_sdp;    sdp_session_t *sdp;    sdp_printer_t *p;    sdp_connection_t *c;    TEST(soa_get_local_sdp(a, &o_sdp, NULL, NULL), 1);    TEST_1(o_sdp != NULL && o_sdp != NONE);    TEST_1(sdp = sdp_session_dup(home, o_sdp));    /* Remove mode, change c=, encode offer */    if (sdp->sdp_media->m_connections)      c = sdp->sdp_media->m_connections;    else      c = sdp->sdp_connection;    TEST_1(c);    c->c_address = "0.0.0.0";        TEST_1(p = sdp_print(home, sdp, NULL, 0, sdp_f_realloc));    TEST_1(sdp_message(p));    offer = sdp_message(p); offerlen = strlen(offer);  }  TEST(soa_set_remote_sdp(b, 0, offer, -1), 1);  TEST(soa_generate_answer(b, test_completed), 0);  TEST_1(soa_is_complete(b));  TEST(soa_activate(b, NULL), 0);  TEST(soa_get_local_sdp(b, NULL, &answer, &answerlen), 1);  TEST_1(answer != NULL && answer != NONE);  TEST_1(strstr(answer, "a=recvonly"));  TEST(soa_set_remote_sdp(a, 0, answer, -1), 1);  TEST(soa_process_answer(a, test_completed), 0);  TEST(soa_activate(a, NULL), 0);  TEST(soa_is_audio_active(a), SOA_ACTIVE_SENDONLY);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDONLY);  TEST(soa_is_audio_active(b), SOA_ACTIVE_RECVONLY);  TEST(soa_is_remote_audio_active(b), SOA_ACTIVE_RECVONLY);  /* 'A' will propose adding video. */   /* 'B' will reject. */   TEST(soa_set_params(a,		      SOATAG_HOLD(NULL),  /* 'A' will release hold. */ 		      SOATAG_USER_SDP_STR("m=audio 5004 RTP/AVP 0 8\r\n"					  "m=video 5006 RTP/AVP 34\r\n"),		      TAG_END()), 2);  TEST(soa_generate_offer(a, 1, test_completed), 0);  TEST(soa_get_local_sdp(a, NULL, &offer, &offerlen), 1);  TEST_1(offer != NULL && offer != NONE);  TEST_1(!strstr(offer, "a=sendonly"));  TEST_1(strstr(offer, "m=video"));  TEST(soa_set_remote_sdp(b, 0, offer, offerlen), 1);  TEST(soa_generate_answer(b, test_completed), 0);  TEST_1(soa_is_complete(b));  TEST(soa_activate(b, NULL), 0);  TEST(soa_get_local_sdp(b, NULL, &answer, &answerlen), 1);  TEST_1(answer != NULL && answer != NONE);  TEST_1(!strstr(answer, "a=recvonly"));  TEST_1(strstr(answer, "m=video"));  TEST(soa_set_remote_sdp(a, 0, answer, -1), 1);  TEST(soa_process_answer(a, test_completed), 0);  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(soa_is_video_active(a), SOA_ACTIVE_REJECTED);  {    /* Test tags */    sdp_session_t const *l = NULL, *u = NULL, *r = NULL;    sdp_media_t const *m;    TEST(soa_get_params(b, 			SOATAG_LOCAL_SDP_REF(l),			SOATAG_USER_SDP_REF(u),			SOATAG_REMOTE_SDP_REF(r),			TAG_END()), 3);    TEST_1(l); TEST_1(u); TEST_1(r);    TEST_1(m = l->sdp_media); TEST(m->m_type, sdp_media_audio);    TEST_1(!m->m_rejected);    TEST_1(m = m->m_next); TEST(m->m_type, sdp_media_video);    TEST_1(m->m_rejected);  }  /* 'B' will now propose adding video. */  /* 'A' will accept. */  TEST(soa_set_params(b, 		      SOATAG_USER_SDP_STR("m=audio 5004 RTP/AVP 0 8\r\n"					  "m=video 5006 RTP/AVP 34\r\n"),		      TAG_END()), 1);  TEST(soa_generate_offer(b, 1, test_completed), 0);  TEST(soa_get_local_sdp(b, NULL, &offer, &offerlen), 1);  TEST_1(offer != NULL && offer != NONE);  TEST_1(!strstr(offer, "b=sendonly"));  TEST_1(strstr(offer, "m=video"));  TEST(soa_set_remote_sdp(a, 0, offer, offerlen), 1);  TEST(soa_generate_answer(a, test_completed), 0);  TEST_1(soa_is_complete(a));  TEST(soa_activate(a, NULL), 0);  TEST(soa_get_local_sdp(a, NULL, &answer, &answerlen), 1);  TEST_1(answer != NULL && answer != NONE);  TEST_1(!strstr(answer, "b=recvonly"));  TEST_1(strstr(answer, "m=video"));  TEST(soa_set_remote_sdp(b, 0, answer, -1), 1);  TEST(soa_process_answer(b, test_completed), 0);  TEST(soa_activate(b, NULL), 0);  TEST(soa_is_audio_active(a), SOA_ACTIVE_SENDRECV);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDRECV);  TEST(soa_is_video_active(a), SOA_ACTIVE_SENDRECV);    TEST_VOID(soa_terminate(a, NULL));  TEST(soa_is_audio_active(a), SOA_ACTIVE_DISABLED);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_DISABLED);  TEST_VOID(soa_terminate(b, NULL));    TEST_VOID(soa_destroy(a));  TEST_VOID(soa_destroy(b));  su_home_deinit(home);  END();}int test_codec_selection(struct context *ctx){  BEGIN();  int n;    soa_session_t *a, *b;  char const *offer = NONE, *answer = NONE;  int offerlen = -1, answerlen = -1;  sdp_session_t const *a_sdp, *b_sdp;  sdp_media_t const *m;  sdp_rtpmap_t const *rm;  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 5004 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_1(m = b_sdp->sdp_media); TEST_1(m->m_rejected);  TEST_1(rm = m->m_rtpmaps); TEST(rm->rm_pt, 96);  TEST_S(rm->rm_encoding, "G7231");  /* Not using payload type 97 from offer */  TEST_1(rm = rm->rm_next); TEST(rm->rm_pt, 98);  TEST_S(rm->rm_encoding, "G729");  TEST_1(!rm->rm_next);  /* ---------------------------------------------------------------------- */  /* Re-O/A: A generates new SDP */  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(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(answer != NULL && answer != NONE);  n = soa_set_remote_sdp(a, 0, answer, -1); TEST(n, 0);  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);  /* Re-O/A: no-one regenerates new SDP */  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(offer != NULL && offer != NONE);  n = soa_set_remote_sdp(b, 0, offer, offerlen); 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, 0);  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);  /* ---------------------------------------------------------------------- */  /* Re-O/A: accept media without common codecs */  /* Accept media without common codecs */  TEST_1(soa_set_params(a, SOATAG_RTP_MISMATCH(1), TAG_END()));  TEST_1(soa_set_params(b, SOATAG_RTP_MISMATCH(1), TAG_END()));  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(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(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_SENDRECV);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDRECV);  TEST_1(m = b_sdp->sdp_media); TEST_1(!m->m_rejected);  TEST_1(rm = m->m_rtpmaps); TEST(rm->rm_pt, 96);  TEST_S(rm->rm_encoding, "G7231");  /* Not using payload type 97 from offer */  TEST_1(rm = rm->rm_next); TEST(rm->rm_pt, 98);  TEST_S(rm->rm_encoding, "G729");  TEST_1(!rm->rm_next);

⌨️ 快捷键说明

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