mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-20 20:48:07 +00:00
Fix bug #2337: ICE reINVITE triggers streams redraw.
This commit is contained in:
parent
4e3ea86c90
commit
c6bc74a657
3 changed files with 39 additions and 16 deletions
|
|
@ -36,12 +36,17 @@ static void register_failure(SalOp *op);
|
|||
|
||||
static int media_parameters_changed(LinphoneCall *call, SalMediaDescription *oldmd, SalMediaDescription *newmd) {
|
||||
int result=0;
|
||||
char *tmp=NULL;
|
||||
int otherdesc_changed;
|
||||
char *tmp1=NULL;
|
||||
char *tmp2=NULL;
|
||||
if (call->params->in_conference != call->current_params->in_conference) return SAL_MEDIA_DESCRIPTION_FORCE_STREAM_RECONSTRUCTION;
|
||||
if (call->up_bw != linphone_core_get_upload_bandwidth(call->core)) return SAL_MEDIA_DESCRIPTION_FORCE_STREAM_RECONSTRUCTION;
|
||||
if (call->localdesc_changed) ms_message("Local description has changed: %s", tmp = sal_media_description_print_differences(call->localdesc_changed));
|
||||
result = call->localdesc_changed | sal_media_description_equals(oldmd, newmd);
|
||||
if (tmp) ms_free(tmp);
|
||||
if (call->localdesc_changed) ms_message("Local description has changed: %s", tmp1 = sal_media_description_print_differences(call->localdesc_changed));
|
||||
otherdesc_changed = sal_media_description_equals(oldmd, newmd);
|
||||
if (otherdesc_changed) ms_message("Other description has changed: %s", tmp2 = sal_media_description_print_differences(otherdesc_changed));
|
||||
result = call->localdesc_changed | otherdesc_changed;
|
||||
if (tmp1) ms_free(tmp1);
|
||||
if (tmp2) ms_free(tmp2);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -511,6 +511,8 @@ int offer_answer_initiate_outgoing(const SalMediaDescription *local_offer,
|
|||
result->nb_streams=local_offer->nb_streams;
|
||||
result->bandwidth=remote_answer->bandwidth;
|
||||
strcpy(result->addr,remote_answer->addr);
|
||||
strcpy(result->ice_pwd, local_offer->ice_pwd);
|
||||
strcpy(result->ice_ufrag, local_offer->ice_ufrag);
|
||||
memcpy(&result->rtcp_xr, &local_offer->rtcp_xr, sizeof(result->rtcp_xr));
|
||||
if ((local_offer->rtcp_xr.enabled == TRUE) && (remote_answer->rtcp_xr.enabled == FALSE)) {
|
||||
result->rtcp_xr.enabled = FALSE;
|
||||
|
|
|
|||
|
|
@ -1065,6 +1065,19 @@ static bool_t check_ice(LinphoneCoreManager* caller, LinphoneCoreManager* callee
|
|||
return video_enabled ? (realtime_text_enabled ? text_success && audio_success && video_success : audio_success && video_success) : realtime_text_enabled ? text_success && audio_success : audio_success;
|
||||
}
|
||||
|
||||
static void check_nb_media_starts(LinphoneCoreManager *caller, LinphoneCoreManager *callee, unsigned int caller_nb_media_starts, unsigned int callee_nb_media_starts) {
|
||||
LinphoneCall *c1 = linphone_core_get_current_call(caller->lc);
|
||||
LinphoneCall *c2 = linphone_core_get_current_call(callee->lc);
|
||||
BC_ASSERT_PTR_NOT_NULL(c1);
|
||||
BC_ASSERT_PTR_NOT_NULL(c2);
|
||||
if (c1) {
|
||||
BC_ASSERT_EQUAL(c1->nb_media_starts, caller_nb_media_starts, unsigned int, "%u");
|
||||
}
|
||||
if (c2) {
|
||||
BC_ASSERT_EQUAL(c2->nb_media_starts, callee_nb_media_starts, unsigned int, "%u");
|
||||
}
|
||||
}
|
||||
|
||||
static void _call_with_ice_base(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t caller_with_ice, bool_t callee_with_ice, bool_t random_ports) {
|
||||
if (callee_with_ice){
|
||||
linphone_core_set_firewall_policy(marie->lc,LinphonePolicyUseIce);
|
||||
|
|
@ -1087,23 +1100,12 @@ static void _call_with_ice_base(LinphoneCoreManager* pauline,LinphoneCoreManager
|
|||
return;
|
||||
|
||||
if (callee_with_ice && caller_with_ice) {
|
||||
LinphoneCall *c1, *c2;
|
||||
|
||||
/*wait for the ICE reINVITE to complete*/
|
||||
BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||
BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||
|
||||
BC_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection));
|
||||
c1 = linphone_core_get_current_call(pauline->lc);
|
||||
c2 = linphone_core_get_current_call(marie->lc);
|
||||
BC_ASSERT_PTR_NOT_NULL(c1);
|
||||
BC_ASSERT_PTR_NOT_NULL(c2);
|
||||
if (c1) {
|
||||
BC_ASSERT_EQUAL(c1->nb_media_starts, 1, unsigned int, "%u");
|
||||
}
|
||||
if (c2) {
|
||||
BC_ASSERT_EQUAL(c2->nb_media_starts, 1, unsigned int, "%u");
|
||||
}
|
||||
check_nb_media_starts(pauline, marie, 1, 1);
|
||||
}
|
||||
|
||||
liblinphone_tester_check_rtcp(marie,pauline);
|
||||
|
|
@ -2070,6 +2072,7 @@ static void _call_with_ice_video(LinphoneVideoPolicy caller_policy, LinphoneVide
|
|||
LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc");
|
||||
LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc");
|
||||
bool_t call_ok;
|
||||
unsigned int nb_media_starts = 1;
|
||||
|
||||
linphone_core_set_video_policy(pauline->lc, &caller_policy);
|
||||
linphone_core_set_video_policy(marie->lc, &callee_policy);
|
||||
|
|
@ -2088,6 +2091,8 @@ static void _call_with_ice_video(LinphoneVideoPolicy caller_policy, LinphoneVide
|
|||
/* Wait for ICE reINVITEs to complete. */
|
||||
BC_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));
|
||||
check_nb_media_starts(pauline, marie, nb_media_starts, nb_media_starts);
|
||||
nb_media_starts++;
|
||||
|
||||
if (video_added_by_caller) {
|
||||
BC_ASSERT_TRUE(add_video(marie, pauline, FALSE));
|
||||
|
|
@ -2100,6 +2105,8 @@ static void _call_with_ice_video(LinphoneVideoPolicy caller_policy, LinphoneVide
|
|||
/* Wait for ICE reINVITEs to complete if video was really added */
|
||||
BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 4)
|
||||
&& wait_for(pauline->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 4));
|
||||
check_nb_media_starts(pauline, marie, nb_media_starts, nb_media_starts);
|
||||
nb_media_starts++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2110,6 +2117,8 @@ static void _call_with_ice_video(LinphoneVideoPolicy caller_policy, LinphoneVide
|
|||
}
|
||||
if (video_removed_by_caller || video_removed_by_callee) {
|
||||
BC_ASSERT_TRUE(check_ice(pauline, marie, LinphoneIceStateHostConnection));
|
||||
check_nb_media_starts(pauline, marie, nb_media_starts, nb_media_starts);
|
||||
nb_media_starts++;
|
||||
}
|
||||
|
||||
end_call(pauline, marie);
|
||||
|
|
@ -2139,6 +2148,12 @@ static void call_with_ice_video_added_and_refused(void) {
|
|||
LinphoneVideoPolicy callee_policy = { FALSE, FALSE };
|
||||
_call_with_ice_video(caller_policy, callee_policy, TRUE, FALSE, FALSE, FALSE);
|
||||
}
|
||||
|
||||
static void call_with_ice_video_added_with_video_policies_to_false(void) {
|
||||
LinphoneVideoPolicy vpol = { FALSE, FALSE };
|
||||
_call_with_ice_video(vpol, vpol, FALSE, TRUE, FALSE, FALSE);
|
||||
}
|
||||
|
||||
#if ICE_WAS_WORKING_WITH_REAL_TIME_TEXT /*which is not the case at the moment*/
|
||||
|
||||
static void call_with_ice_video_and_rtt(void) {
|
||||
|
|
@ -5306,6 +5321,7 @@ test_t call_tests[] = {
|
|||
{ "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 },
|
||||
{ "Call with ICE and video added and refused", call_with_ice_video_added_and_refused },
|
||||
{ "Call with ICE and video added with video policies to false", call_with_ice_video_added_with_video_policies_to_false },
|
||||
#if ICE_WAS_WORKING_WITH_REAL_TIME_TEXT
|
||||
{ "Call with ICE, video and realtime text", call_with_ice_video_and_rtt },
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue