From 9a99b97a40f2a1d9fc647cfcb7a251e51cbec3c0 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 21 Sep 2015 17:14:03 +0200 Subject: [PATCH] Fix remaining stream_index == 0 ? audio stream : video stream issue + test to check call with video mline before audio in sdp --- .gitignore | 1 + coreapi/linphonecall.c | 2 +- tester/complex_sip_call.c | 42 +++++- ...l_with_video_mline_before_audio_in_sdp.xml | 125 ++++++++++++++++++ 4 files changed, 164 insertions(+), 6 deletions(-) create mode 100644 tester/sipp/call_with_video_mline_before_audio_in_sdp.xml diff --git a/.gitignore b/.gitignore index 77767ee34..55975848a 100644 --- a/.gitignore +++ b/.gitignore @@ -94,3 +94,4 @@ tester/ZIDCache*.xml tester/stereo-record.wav .dirstamp git-clang-format.diff +tester/sipp/*.log diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 7e5377efc..3b482be9b 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -2044,7 +2044,7 @@ static void port_config_set_random_choosed(LinphoneCall *call, int stream_index, } static void _linphone_call_prepare_ice_for_stream(LinphoneCall *call, int stream_index, bool_t create_checklist){ - MediaStream *ms=stream_index == 0 ? (MediaStream*)call->audiostream : (MediaStream*)call->videostream; + MediaStream *ms = stream_index == call->main_audio_stream_index ? (MediaStream*)call->audiostream : stream_index == call->main_video_stream_index ? (MediaStream*)call->videostream : (MediaStream*)call->textstream; if ((linphone_core_get_firewall_policy(call->core) == LinphonePolicyUseIce) && (call->ice_session != NULL)){ IceCheckList *cl; rtp_session_set_pktinfo(ms->sessions.rtp_session, TRUE); diff --git a/tester/complex_sip_call.c b/tester/complex_sip_call.c index 40bfe7999..ee5858df0 100644 --- a/tester/complex_sip_call.c +++ b/tester/complex_sip_call.c @@ -33,7 +33,7 @@ static FILE *sip_start(const char *senario, const char* dest_username, LinphoneA else dest = ms_strdup_printf("%s",linphone_address_get_domain(dest_addres)); - command = ms_strdup_printf("sipp -sf %s -s %s %s -trace_err -trace_msg -m 1 -d 1000 ",senario,dest_username,dest); + command = ms_strdup_printf("sipp -sf %s -s %s %s -trace_err -trace_msg -rtp_echo -m 1 -d 1000",senario,dest_username,dest); ms_message("Starting sipp commad [%s]",command); file = popen(command, "r"); @@ -81,9 +81,7 @@ static void sip_update_within_icoming_reinvite_with_no_sdp(void) { */ scen = bc_tester_res("sipp/sip_update_within_icoming_reinvite_with_no_sdp.xml"); - sipp_out = sip_start(scen - , linphone_address_get_username(mgr->identity) - , mgr->identity); + sipp_out = sip_start(scen, linphone_address_get_username(mgr->identity), mgr->identity); if (sipp_out) { BC_ASSERT_TRUE(wait_for(mgr->lc, mgr->lc, &mgr->stat.number_of_LinphoneCallIncomingReceived, 1)); @@ -96,8 +94,42 @@ static void sip_update_within_icoming_reinvite_with_no_sdp(void) { } +static void call_with_video_mline_before_audio_in_sdp() { + LinphoneCoreManager *mgr; + char *identity_char; + char *scen; + FILE * sipp_out; + LinphoneCall *call = NULL; + + /*currently we use direct connection because sipp do not properly set ACK request uri*/ + mgr= linphone_core_manager_new2( "empty_rc", FALSE); + mgr->identity= linphone_core_get_primary_contact_parsed(mgr->lc); + linphone_address_set_username(mgr->identity,"marie"); + identity_char=linphone_address_as_string(mgr->identity); + linphone_core_set_primary_contact(mgr->lc,identity_char); + + linphone_core_iterate(mgr->lc); + + scen = bc_tester_res("sipp/call_with_video_mline_before_audio_in_sdp.xml"); + + sipp_out = sip_start(scen, linphone_address_get_username(mgr->identity), mgr->identity); + + if (sipp_out) { + BC_ASSERT_TRUE(wait_for(mgr->lc, mgr->lc, &mgr->stat.number_of_LinphoneCallIncomingReceived, 1)); + call = linphone_core_get_current_call(mgr->lc); + linphone_core_accept_call(mgr->lc, call); + BC_ASSERT_TRUE(wait_for(mgr->lc, mgr->lc, &mgr->stat.number_of_LinphoneCallStreamsRunning, 1)); + BC_ASSERT_EQUAL(call->main_audio_stream_index, 1, int, "%d"); + BC_ASSERT_EQUAL(call->main_video_stream_index, 0, int, "%d"); + BC_ASSERT_TRUE(wait_for(mgr->lc, mgr->lc, &mgr->stat.number_of_LinphoneCallEnd, 1)); + pclose(sipp_out); + } + linphone_core_manager_destroy(mgr); +} + static test_t tests[] = { - { "SIP UPDATE within incoming reinvite witjout sdp", sip_update_within_icoming_reinvite_with_no_sdp}, + { "SIP UPDATE within incoming reinvite without sdp", sip_update_within_icoming_reinvite_with_no_sdp }, + { "Call with video mline before audio in sdp", call_with_video_mline_before_audio_in_sdp }, }; test_suite_t complex_sip_call_test_suite = { diff --git a/tester/sipp/call_with_video_mline_before_audio_in_sdp.xml b/tester/sipp/call_with_video_mline_before_audio_in_sdp.xml new file mode 100644 index 000000000..bfb150cee --- /dev/null +++ b/tester/sipp/call_with_video_mline_before_audio_in_sdp.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ;tag=[pid]SIPpTag00[call_number] + To: sut + Call-ID: [call_id] + CSeq: 1 INVITE + Contact: sip:sipp@[local_ip]:[local_port] + Max-Forwards: 70 + Subject: Performance Test + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip] + s=- + c=IN IP[media_ip_type] [media_ip] + t=0 0 + m=video [media_port+2] RTP/AVP 96 + a=rtpmap:96 VP8/90000 + m=audio [media_port] RTP/AVP 96 97 0 8 101 98 + a=rtpmap:96 speex/16000 + a=fmtp:96 vbr=on + a=rtpmap:97 speex/8000 + a=fmtp:97 vbr=on + a=rtpmap:101 telephone-event/16000 + a=rtpmap:98 telephone-event/8000 + + ]]> + + + + + + + + + + + + + + + + + + + + + ;tag=[pid]SIPpTag00[call_number] + To: sut [peer_tag_param] + Call-ID: [call_id] + CSeq: 1 ACK + Contact: sip:sipp@[local_ip]:[local_port] + Max-Forwards: 70 + Subject: Performance Test + Content-Length: 0 + + ]]> + + + + + + + + + ;tag=[pid]SIPpTag00[call_number] + To: sut [peer_tag_param] + Call-ID: [call_id] + CSeq: 2 BYE + Contact: sip:sipp@[local_ip]:[local_port] + Max-Forwards: 70 + Subject: Performance Test + Content-Length: 0 + + ]]> + + + + + + + + + + + + +