📄 test_soa.c
字号:
/* 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 + -