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

📄 test_soa.c

📁 Sofia SIP is an open-source SIP User-Agent library, compliant with the IETF RFC3261 specification.
💻 C
📖 第 1 页 / 共 4 页
字号:
  /* Add new media - without common codecs */  TEST_1(soa_set_params(a,			SOATAG_RTP_MISMATCH(0),			SOATAG_USER_SDP_STR(    "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 96 3 127\r\n"    "a=rtpmap:96 G729/8000\n"    "a=rtpmap:127 CN/8000\n"    "m=video 5010 RTP/AVP 31\r\n"    "m=audio 6008 RTP/SAVP 3\n"    ),			TAG_END()));  TEST_1(soa_set_params(b,			SOATAG_RTP_MISMATCH(0),			SOATAG_USER_SDP_STR(    "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 96 3 97 111\r\n"    "a=rtpmap:96 G7231/8000\n"    "a=rtpmap:97 G729/8000\n"    "a=rtpmap:111 telephone-event/8000\n"    "a=fmtp:111 0-15\n"    "m=audio 6004 RTP/SAVP 96\n"    "a=rtpmap:96 G729/8000\n"    "m=video 5006 RTP/AVP 34\n"    ),			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);  TEST_1(m = a_sdp->sdp_media); TEST_1(!m->m_rejected);  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(!m->m_next);  n = soa_set_remote_sdp(b, 0, offer, offerlen); TEST(n, 1);  n = soa_generate_answer(b, test_completed); TEST(n, 0);  /* Answer from B rejects video */  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, &offer, &offerlen); 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(soa_is_video_active(a), SOA_ACTIVE_REJECTED);  TEST(soa_is_remote_video_active(a), SOA_ACTIVE_REJECTED);  TEST_1(m = a_sdp->sdp_media); TEST_1(!m->m_rejected);  TEST_1(m = m->m_next); TEST_1(m->m_rejected);  TEST_1(m = m->m_next); TEST_1(m->m_rejected);  TEST_1(!m->m_next);  TEST_1(m = b_sdp->sdp_media); TEST_1(!m->m_rejected);  TEST_1(m = m->m_next); TEST_1(m->m_rejected);  /* Rejected but tell what we support */  TEST_1(rm = m->m_rtpmaps); TEST(rm->rm_pt, 34);  TEST_S(rm->rm_encoding, "H263");  TEST_1(m = m->m_next); TEST_1(m->m_rejected);  TEST_1(!m->m_next);  /* ---------------------------------------------------------------------- */  /* A adds H.263 to video */  TEST_1(soa_set_params(a,			SOATAG_USER_SDP_STR(    "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 96 3 127\r\n"    "a=rtpmap:96 G729/8000\n"    "a=rtpmap:127 CN/8000\n"    "m=video 5010 RTP/AVP 31 34\r\n"    "m=audio 6008 RTP/SAVP 3\n"    ),			TAG_END()));  /* B adds GSM to SRTP */  TEST_1(soa_set_params(b,			SOATAG_USER_SDP_STR(    "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 96 3 97 111\r\n"    "a=rtpmap:96 G7231/8000\n"    "a=rtpmap:97 G729/8000\n"    "a=rtpmap:111 telephone-event/8000\n"    "a=fmtp:111 0-15\n"    "m=audio 6004 RTP/SAVP 96 3\n"    "a=rtpmap:96 G729/8000\n"    "m=video 5006 RTP/AVP 34\n"    ),			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);  TEST_1(m = a_sdp->sdp_media); TEST_1(!m->m_rejected);  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(!m->m_next);  n = soa_set_remote_sdp(b, 0, offer, offerlen); TEST(n, 1);  n = soa_generate_answer(b, test_completed); TEST(n, 0);  /* Answer from B now accepts video */  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, &offer, &offerlen); 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(soa_is_video_active(a), SOA_ACTIVE_SENDRECV);  TEST(soa_is_remote_video_active(a), SOA_ACTIVE_SENDRECV);  TEST_1(m = a_sdp->sdp_media); TEST_1(!m->m_rejected);  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(rm = m->m_rtpmaps); TEST(rm->rm_pt, 34);  TEST_S(rm->rm_encoding, "H263");  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(!m->m_next);  TEST_1(m = b_sdp->sdp_media); TEST_1(!m->m_rejected);  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(rm = m->m_rtpmaps); TEST(rm->rm_pt, 34);  TEST_S(rm->rm_encoding, "H263");  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(!m->m_next);  /* ---------------------------------------------------------------------- */  /* A drops GSM support */  TEST_1(soa_set_params(a,			SOATAG_USER_SDP_STR(    "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 96 127\r\n"    "a=rtpmap:96 G729/8000\n"    "a=rtpmap:127 CN/8000\n"    "m=video 5010 RTP/AVP 31 34\r\n"    "m=audio 6008 RTP/SAVP 3\n"    ),			TAG_END()));  /* B adds GSM to SRTP, changes IP address */  TEST_1(soa_set_params(b,			SOATAG_USER_SDP_STR(    "v=0\r\n"    "o=left 219498671 2 IN IP4 127.0.0.2\r\n"    "c=IN IP4 127.0.0.3\r\n"    "m=audio 5004 RTP/AVP 96 3 97 111\r\n"    "a=rtpmap:96 G7231/8000\n"    "a=rtpmap:97 G729/8000\n"    "a=rtpmap:111 telephone-event/8000\n"    "a=fmtp:111 0-15\n"    "m=audio 6004 RTP/SAVP 96 3\n"    "a=rtpmap:96 G729/8000\n"    "m=video 5006 RTP/AVP 34\n"    ),			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);  TEST_1(m = a_sdp->sdp_media); TEST_1(!m->m_rejected);  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(!m->m_next);  n = soa_set_remote_sdp(b, 0, offer, offerlen); TEST(n, 1);  n = soa_generate_answer(b, test_completed); TEST(n, 0);  /* Answer from B now accepts video */  n = soa_get_local_sdp(b, &b_sdp, &answer, &answerlen); TEST(n, 1);  TEST_1(answer != NULL && answer != NONE);  /* Check that updated c= line is propagated */  TEST_1(b_sdp->sdp_connection);  TEST_S(b_sdp->sdp_connection->c_address, "127.0.0.3");  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, &offer, &offerlen); 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(soa_is_video_active(a), SOA_ACTIVE_SENDRECV);  TEST(soa_is_remote_video_active(a), SOA_ACTIVE_SENDRECV);  TEST_1(m = a_sdp->sdp_media); TEST_1(!m->m_rejected);  TEST_1(rm = m->m_rtpmaps); TEST(rm->rm_pt, 96);  TEST_S(rm->rm_encoding, "G729");  TEST_1(rm = rm->rm_next); TEST(rm->rm_pt, 127);  TEST_S(rm->rm_encoding, "CN");  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(rm = m->m_rtpmaps); TEST(rm->rm_pt, 34);  TEST_S(rm->rm_encoding, "H263");  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(!m->m_next);  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, "G729");  TEST_1(rm = rm->rm_next); TEST(rm->rm_pt, 111);  TEST_S(rm->rm_encoding, "telephone-event");  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(rm = m->m_rtpmaps); TEST(rm->rm_pt, 34);  TEST_S(rm->rm_encoding, "H263");  TEST_1(m = m->m_next); TEST_1(!m->m_rejected);  TEST_1(!m->m_next);  /* ---------------------------------------------------------------------- */  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_replace(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=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_caps[] =     "m=audio 5004 RTP/AVP 0 8\n"    "a=rtpmap:96 G7231/8000\n"    "a=rtpmap:97 G729/8000\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";  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_SENDRECV);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDRECV);  /* ---------------------------------------------------------------------- */  /* Re-O/A: replace media stream */  /* Accept media without common codecs */  TEST_1(soa_set_params(a, SOATAG_RTP_MISMATCH(0),			SOATAG_ORDERED_USER(1),			SOATAG_USER_SDP_STR(    "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 16384 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"    ),						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);  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_1(m = a_sdp->sdp_media); TEST_1(!m->m_rejected);  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(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_media_removal(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=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_caps[] =    "v=0\n"    "m=audio 5004 RTP/AVP 0 8\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);  TEST_1(soa_set_params(b, SOATAG_RTP_MISMATCH(0),			SOATAG_ORDERED_USER(1),			TAG_END()));  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_SENDRECV);  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDRECV);  /* ---------------------------------------------------------------------- */  /* Re-O/A: remove media stream */  TEST(soa_set_user_sdp(b, 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(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));  /* ---------------------------------------------------------------------- */  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);

⌨️ 快捷键说明

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