diff --git a/.cproject b/.cproject index f20bc862b..45790510b 100644 --- a/.cproject +++ b/.cproject @@ -39,20 +39,6 @@ - - - - - - - - - - - - - - diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index f39700f01..469baf8af 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -206,7 +206,8 @@ static void call_received(SalOp *h){ const char *from,*to; char *alt_contact; LinphoneAddress *from_addr, *to_addr; - bool_t prevent_colliding_calls=lp_config_get_int(lc->config,"sip","prevent_colliding_calls",TRUE); + /*this mode is deprcated because probably useless*/ + bool_t prevent_colliding_calls=lp_config_get_int(lc->config,"sip","prevent_colliding_calls",FALSE); /* first check if we can answer successfully to this invite */ if (linphone_presence_model_get_basic_status(lc->presence_model) == LinphonePresenceBasicStatusClosed) { diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 5a303bb19..2af2d54de 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -563,12 +563,6 @@ enum _LinphoneUpnpState{ **/ typedef enum _LinphoneUpnpState LinphoneUpnpState; - -/** - * Enum describing what has been updated in a LinphoneCallStats object. -**/ -typedef enum _LinphoneCallStatsRTCPUpdate LinphoneCallStatsRTCPUpdate; - /** * Enum describing what has been updated in a LinphoneCallStats object. **/ @@ -577,6 +571,12 @@ enum _LinphoneCallStatsRTCPUpdate { LinphoneCallStatsSentRTCPUpdate /**< sent_rtcp field of LinphoneCallStats object has been updated */ }; +/** + * Enum describing what has been updated in a LinphoneCallStats object. +**/ + +typedef enum _LinphoneCallStatsRTCPUpdate LinphoneCallStatsRTCPUpdate; + /** * The LinphoneCallStats objects carries various statistic informations regarding quality of audio or video streams. * diff --git a/tester/call_tester.c b/tester/call_tester.c index cfb4a7333..3e7f23dda 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -887,7 +887,99 @@ static void call_with_privacy(void) { } +static void call_waiting_indication_with_param(bool_t enable_caller_privacy) { + LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); + LinphoneCoreManager* laure = linphone_core_manager_new( "laure_rc"); + stats initial_marie_stat; + stats initial_pauline_stat; + stats initial_laure_stat; + char hellopath[256]; + MSList *iterator; + LinphoneCall* marie_call_pauline; + LinphoneCall* pauline_called_by_marie; + LinphoneCall* pauline_called_by_laure=NULL; + LinphoneCallParams *laure_params=linphone_core_create_default_call_parameters(laure->lc); + LinphoneCallParams *marie_params=linphone_core_create_default_call_parameters(marie->lc); + if (enable_caller_privacy) + linphone_call_params_set_privacy(marie_params,LinphonePrivacyId); + + MSList* lcs=ms_list_append(NULL,marie->lc); + lcs=ms_list_append(lcs,pauline->lc); + lcs=ms_list_append(lcs,laure->lc); + + CU_ASSERT_TRUE(call_with_caller_params(marie,pauline,marie_params)); + marie_call_pauline=linphone_core_get_current_call(marie->lc); + pauline_called_by_marie=linphone_core_get_current_call(pauline->lc); + + initial_marie_stat=marie->stat; + initial_pauline_stat=pauline->stat; + initial_laure_stat=laure->stat; + + + /*use playfile for callee to avoid locking on capture card*/ + linphone_core_use_files (laure->lc,TRUE); + snprintf(hellopath,sizeof(hellopath), "%s/sounds/hello8000.wav", liblinphone_tester_file_prefix); + linphone_core_set_play_file(laure->lc,hellopath); + if (enable_caller_privacy) + linphone_call_params_set_privacy(laure_params,LinphonePrivacyId); + + CU_ASSERT_PTR_NOT_NULL(linphone_core_invite_address_with_params(laure->lc,pauline->identity,laure_params)); + + CU_ASSERT_TRUE(wait_for(laure->lc + ,pauline->lc + ,&pauline->stat.number_of_LinphoneCallIncomingReceived + ,2)); + + CU_ASSERT_EQUAL(laure->stat.number_of_LinphoneCallOutgoingProgress,1); + + + CU_ASSERT_TRUE(wait_for(laure->lc + ,pauline->lc + ,&laure->stat.number_of_LinphoneCallOutgoingRinging + ,1)); + + for (iterator=(MSList *)linphone_core_get_calls(pauline->lc);iterator!=NULL;iterator=iterator->next) { + LinphoneCall *call=(LinphoneCall *)iterator->data; + if (call != pauline_called_by_marie) { + /*fine, this is the call waiting*/ + linphone_core_accept_call(pauline->lc,pauline_called_by_laure=call); + } + } + + CU_ASSERT_TRUE(wait_for(laure->lc + ,pauline->lc + ,&laure->stat.number_of_LinphoneCallConnected + ,1)); + + CU_ASSERT_TRUE(wait_for(pauline->lc + ,marie->lc + ,&marie->stat.number_of_LinphoneCallPausedByRemote + ,1)); + + if (pauline_called_by_laure && enable_caller_privacy ) + CU_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(pauline_called_by_laure)),LinphonePrivacyId); + + linphone_core_terminate_all_calls(pauline->lc); + + CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,2000)); + CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,2000)); + CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallEnd,1,2000)); + + + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); + linphone_core_manager_destroy(laure); + ms_list_free(lcs); +} +static void call_waiting_indication(void) { + call_waiting_indication_with_param(FALSE); +} + +static void call_waiting_indication_with_privacy(void) { + call_waiting_indication_with_param(TRUE); +} static void simple_conference(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); @@ -1721,6 +1813,8 @@ test_t call_tests[] = { { "Call rejected because of wrong credential", call_rejected_because_wrong_credentials}, { "Call rejected without 403 because of wrong credential", call_rejected_without_403_because_wrong_credentials}, { "Call rejected without 403 because of wrong credential and no auth req cb", call_rejected_without_403_because_wrong_credentials_no_auth_req_cb}, + { "Call waiting indication", call_waiting_indication }, + { "Call waiting indication with privacy", call_waiting_indication_with_privacy }, { "Simple conference", simple_conference }, { "Simple call transfer", simple_call_transfer }, { "Unattended call transfer", unattended_call_transfer },