diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index e37df6ecd..c84640194 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -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; } diff --git a/coreapi/offeranswer.c b/coreapi/offeranswer.c index 26055d6e8..fc3d6c829 100644 --- a/coreapi/offeranswer.c +++ b/coreapi/offeranswer.c @@ -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; diff --git a/tester/call_tester.c b/tester/call_tester.c index 70761a013..58500d673 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -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