mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-27 16:09:20 +00:00
Fix 0002202: ICE fails again.
This commit is contained in:
parent
da924cdece
commit
f53864f9c0
4 changed files with 72 additions and 63 deletions
|
|
@ -3795,6 +3795,7 @@ int linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call,
|
|||
}
|
||||
|
||||
linphone_call_update_remote_session_id_and_ver(call);
|
||||
linphone_call_stop_ice_for_inactive_streams(call->localdesc, call->ice_session);
|
||||
sal_call_accept(call->op);
|
||||
linphone_core_notify_display_status(lc,_("Connected."));
|
||||
lc->current_call=call;
|
||||
|
|
|
|||
|
|
@ -716,8 +716,21 @@ void linphone_core_update_ice_state_in_call_stats(LinphoneCall *call)
|
|||
linphone_ice_state_to_string(call->stats[LINPHONE_CALL_STATS_AUDIO].ice_state), linphone_ice_state_to_string(call->stats[LINPHONE_CALL_STATS_VIDEO].ice_state));
|
||||
}
|
||||
|
||||
void _update_local_media_description_from_ice(SalMediaDescription *desc, IceSession *session)
|
||||
{
|
||||
void linphone_call_stop_ice_for_inactive_streams(SalMediaDescription *desc, IceSession *session) {
|
||||
int i;
|
||||
|
||||
if (session == NULL) return;
|
||||
if (ice_session_state(session) == IS_Completed) return;
|
||||
|
||||
for (i = 0; i < SAL_MEDIA_DESCRIPTION_MAX_STREAMS; i++) {
|
||||
IceCheckList *cl = ice_session_check_list(session, i);
|
||||
if (!sal_stream_description_active(&desc->streams[i]) && cl) {
|
||||
ice_session_remove_check_list(session, cl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _update_local_media_description_from_ice(SalMediaDescription *desc, IceSession *session) {
|
||||
const char *rtp_addr, *rtcp_addr;
|
||||
IceSessionState session_state = ice_session_state(session);
|
||||
int nb_candidates;
|
||||
|
|
|
|||
|
|
@ -396,6 +396,7 @@ void linphone_core_adapt_to_network(LinphoneCore *lc, int ping_time_ms, Linphone
|
|||
int linphone_core_gather_ice_candidates(LinphoneCore *lc, LinphoneCall *call);
|
||||
void linphone_core_update_ice_state_in_call_stats(LinphoneCall *call);
|
||||
void linphone_call_stats_fill(LinphoneCallStats *stats, MediaStream *ms, OrtpEvent *ev);
|
||||
void linphone_call_stop_ice_for_inactive_streams(SalMediaDescription *desc, IceSession *session);
|
||||
void _update_local_media_description_from_ice(SalMediaDescription *desc, IceSession *session);
|
||||
void linphone_call_update_local_media_description_from_ice_or_upnp(LinphoneCall *call);
|
||||
void linphone_call_update_ice_from_remote_media_description(LinphoneCall *call, const SalMediaDescription *md);
|
||||
|
|
|
|||
|
|
@ -1870,80 +1870,73 @@ static void call_with_ice_video_to_novideo(void) {
|
|||
linphone_core_manager_destroy(pauline);
|
||||
}
|
||||
|
||||
static void call_with_ice_video_added(void) {
|
||||
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
|
||||
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
|
||||
LinphoneVideoPolicy vpol={0};
|
||||
static void _call_with_ice_video(LinphoneVideoPolicy caller_policy, LinphoneVideoPolicy callee_policy,
|
||||
bool_t video_added_by_caller, bool_t video_added_by_callee, bool_t video_removed_by_caller, bool_t video_removed_by_callee) {
|
||||
LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc");
|
||||
LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc");
|
||||
bool_t call_ok;
|
||||
|
||||
linphone_core_set_video_policy(pauline->lc,&vpol);
|
||||
linphone_core_set_video_policy(marie->lc,&vpol);
|
||||
linphone_core_set_video_policy(pauline->lc, &caller_policy);
|
||||
linphone_core_set_video_policy(marie->lc, &callee_policy);
|
||||
linphone_core_set_firewall_policy(marie->lc, LinphonePolicyUseIce);
|
||||
linphone_core_set_firewall_policy(pauline->lc, LinphonePolicyUseIce);
|
||||
|
||||
linphone_core_set_firewall_policy(marie->lc,LinphonePolicyUseIce);
|
||||
linphone_core_set_audio_port(marie->lc, -1);
|
||||
linphone_core_set_video_port(marie->lc, -1);
|
||||
linphone_core_set_audio_port(pauline->lc, -1);
|
||||
linphone_core_set_video_port(pauline->lc, -1);
|
||||
|
||||
linphone_core_set_firewall_policy(pauline->lc,LinphonePolicyUseIce);
|
||||
CU_ASSERT_TRUE(call_ok = call(pauline, marie));
|
||||
if (!call_ok) goto end;
|
||||
CU_ASSERT_TRUE(check_ice(pauline, marie, LinphoneIceStateHostConnection));
|
||||
CU_ASSERT_EQUAL(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc))), callee_policy.automatically_accept);
|
||||
|
||||
if (1){
|
||||
linphone_core_set_audio_port(marie->lc,-1);
|
||||
linphone_core_set_video_port(marie->lc,-1);
|
||||
linphone_core_set_audio_port(pauline->lc,-1);
|
||||
linphone_core_set_video_port(pauline->lc,-1);
|
||||
/* Wait for ICE reINVITEs to complete. */
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 2)
|
||||
&& wait_for(pauline->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 2));
|
||||
|
||||
if (video_added_by_caller) {
|
||||
CU_ASSERT_TRUE(add_video(pauline, marie));
|
||||
} else if (video_added_by_callee) {
|
||||
CU_ASSERT_TRUE(add_video(marie, pauline));
|
||||
}
|
||||
if (video_added_by_caller || video_added_by_callee) {
|
||||
CU_ASSERT_TRUE(check_ice(pauline, marie, LinphoneIceStateHostConnection));
|
||||
CU_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc))));
|
||||
CU_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(marie->lc))));
|
||||
}
|
||||
|
||||
if (video_removed_by_caller) {
|
||||
CU_ASSERT_TRUE(remove_video(pauline, marie));
|
||||
} else if (video_removed_by_callee) {
|
||||
CU_ASSERT_TRUE(remove_video(marie, pauline));
|
||||
}
|
||||
if (video_removed_by_caller || video_removed_by_callee) {
|
||||
CU_ASSERT_TRUE(check_ice(pauline, marie, LinphoneIceStateHostConnection));
|
||||
CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc))));
|
||||
CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(marie->lc))));
|
||||
}
|
||||
|
||||
CU_ASSERT_TRUE(call_ok=call(pauline,marie));
|
||||
if (!call_ok) goto end;
|
||||
CU_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection));
|
||||
/*wait for ICE reINVITEs to complete*/
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)
|
||||
&&
|
||||
wait_for(pauline->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||
CU_ASSERT_TRUE(add_video(pauline,marie));
|
||||
CU_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection));
|
||||
end:
|
||||
linphone_core_manager_destroy(marie);
|
||||
linphone_core_manager_destroy(pauline);
|
||||
}
|
||||
|
||||
static void call_with_ice_video_added2(void) {
|
||||
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
|
||||
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
|
||||
LinphoneVideoPolicy vpol={TRUE,TRUE};
|
||||
bool_t call_ok;
|
||||
|
||||
linphone_core_enable_video_capture(marie->lc, TRUE);
|
||||
linphone_core_enable_video_display(marie->lc, TRUE);
|
||||
|
||||
linphone_core_enable_video_capture(pauline->lc, TRUE);
|
||||
linphone_core_enable_video_display(pauline->lc, TRUE);
|
||||
|
||||
linphone_core_set_video_policy(pauline->lc,&vpol);
|
||||
vpol.automatically_accept=FALSE;
|
||||
vpol.automatically_initiate=FALSE;
|
||||
linphone_core_set_video_policy(marie->lc,&vpol);
|
||||
static void call_with_ice_video_added(void) {
|
||||
LinphoneVideoPolicy vpol = { FALSE, FALSE };
|
||||
_call_with_ice_video(vpol, vpol, TRUE, FALSE, TRUE, FALSE);
|
||||
}
|
||||
|
||||
linphone_core_set_firewall_policy(marie->lc,LinphonePolicyUseIce);
|
||||
linphone_core_set_firewall_policy(pauline->lc,LinphonePolicyUseIce);
|
||||
static void call_with_ice_video_added_2(void) {
|
||||
LinphoneVideoPolicy caller_policy = { TRUE, TRUE };
|
||||
LinphoneVideoPolicy callee_policy = { FALSE, FALSE };
|
||||
_call_with_ice_video(caller_policy, callee_policy, TRUE, FALSE, FALSE, TRUE);
|
||||
}
|
||||
|
||||
if (1){
|
||||
linphone_core_set_audio_port(marie->lc,-1);
|
||||
linphone_core_set_video_port(marie->lc,-1);
|
||||
linphone_core_set_audio_port(pauline->lc,-1);
|
||||
linphone_core_set_video_port(pauline->lc,-1);
|
||||
}
|
||||
|
||||
CU_ASSERT_TRUE(call_ok=call(pauline,marie));
|
||||
if (!call_ok) goto end;
|
||||
CU_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection));
|
||||
CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc))));
|
||||
/*wait for ICE reINVITEs to complete*/
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)
|
||||
&&
|
||||
wait_for(pauline->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||
CU_ASSERT_TRUE(add_video(pauline,marie));
|
||||
CU_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection));
|
||||
end:
|
||||
linphone_core_manager_destroy(marie);
|
||||
linphone_core_manager_destroy(pauline);
|
||||
static void call_with_ice_video_added_3(void) {
|
||||
LinphoneVideoPolicy caller_policy = { TRUE, TRUE };
|
||||
LinphoneVideoPolicy callee_policy = { FALSE, FALSE };
|
||||
_call_with_ice_video(caller_policy, callee_policy, FALSE, TRUE, TRUE, FALSE);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -4070,7 +4063,8 @@ test_t call_tests[] = {
|
|||
{ "Call with multiple early media", multiple_early_media },
|
||||
{ "Call with ICE from video to non-video", call_with_ice_video_to_novideo},
|
||||
{ "Call with ICE and video added", call_with_ice_video_added },
|
||||
{ "Call with ICE and video added 2", call_with_ice_video_added2 },
|
||||
{ "Call with ICE and video added 2", call_with_ice_video_added_2 },
|
||||
{ "Call with ICE and video added 3", call_with_ice_video_added_3 },
|
||||
{ "Video call with ICE accepted using call params",video_call_ice_params},
|
||||
{ "Video call recording", video_call_recording_test },
|
||||
{ "Snapshot", video_call_snapshot },
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue