mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-05-06 21:33:08 +00:00
implement attended transfert
This commit is contained in:
parent
85c3a63480
commit
5737db3986
3 changed files with 33 additions and 11 deletions
|
|
@ -198,8 +198,8 @@ static void call_response_event(void *op_base, const belle_sip_response_event_t
|
|||
op->sdp_answer=NULL;
|
||||
}
|
||||
belle_sip_dialog_send_ack(op->dialog,ack);
|
||||
/*if (op->state != SalOpStateActive)*/
|
||||
op->base.root->callbacks.call_accepted(op);
|
||||
op->base.root->callbacks.call_accepted(op); /*INVITE*/
|
||||
|
||||
op->state=SalOpStateActive;
|
||||
} else {
|
||||
/*nop*/
|
||||
|
|
|
|||
|
|
@ -58,19 +58,26 @@ int sal_call_refer(SalOp *op, const char *refer_to){
|
|||
}
|
||||
|
||||
int sal_call_refer_with_replaces(SalOp *op, SalOp *other_call_op){
|
||||
belle_sip_dialog_state_t other_call_dialod_state=other_call_op->dialog?belle_sip_dialog_get_state(other_call_op->dialog):BELLE_SIP_DIALOG_NULL;
|
||||
belle_sip_dialog_state_t other_call_dialog_state=other_call_op->dialog?belle_sip_dialog_get_state(other_call_op->dialog):BELLE_SIP_DIALOG_NULL;
|
||||
belle_sip_dialog_state_t op_dialog_state=op->dialog?belle_sip_dialog_get_state(op->dialog):BELLE_SIP_DIALOG_NULL;
|
||||
|
||||
belle_sip_header_refer_to_t* refer_to;
|
||||
belle_sip_header_referred_by_t* referred_by;
|
||||
|
||||
/*first, build refer to*/
|
||||
if (other_call_dialod_state!=BELLE_SIP_DIALOG_CONFIRMED) {
|
||||
ms_error(" wrong dialog state [%s] for op [%p], sould be BELLE_SIP_DIALOG_CONFIRMED",belle_sip_dialog_state_to_string(other_call_dialod_state)
|
||||
if (other_call_dialog_state!=BELLE_SIP_DIALOG_CONFIRMED) {
|
||||
ms_error(" wrong dialog state [%s] for op [%p], should be BELLE_SIP_DIALOG_CONFIRMED",belle_sip_dialog_state_to_string(other_call_dialog_state)
|
||||
,other_call_op);
|
||||
return -1;
|
||||
} else {
|
||||
refer_to=belle_sip_header_refer_to_create(belle_sip_dialog_get_remote_party(other_call_op->dialog));
|
||||
referred_by=belle_sip_header_referred_by_create(belle_sip_dialog_get_local_party(op->dialog));
|
||||
}
|
||||
if (op_dialog_state!=BELLE_SIP_DIALOG_CONFIRMED) {
|
||||
ms_error(" wrong dialog state [%s] for op [%p], should be BELLE_SIP_DIALOG_CONFIRMED",belle_sip_dialog_state_to_string(op_dialog_state)
|
||||
,op);
|
||||
return -1;
|
||||
}
|
||||
|
||||
refer_to=belle_sip_header_refer_to_create(belle_sip_dialog_get_remote_party(other_call_op->dialog));
|
||||
referred_by=belle_sip_header_referred_by_create(belle_sip_dialog_get_local_party(op->dialog));
|
||||
return sal_call_refer_to(op,refer_to,referred_by);
|
||||
}
|
||||
int sal_call_accept_refer(SalOp *h){
|
||||
|
|
|
|||
|
|
@ -259,8 +259,9 @@ static void call_paused_resumed() {
|
|||
call_obj = linphone_core_get_current_call(pauline->lc);
|
||||
|
||||
linphone_core_pause_call(pauline->lc,call_obj);
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1));
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1));
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1));
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1));
|
||||
|
||||
linphone_core_resume_call(pauline->lc,call_obj);
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||
|
|
@ -295,8 +296,9 @@ static void call_paused_resumed_from_callee() {
|
|||
call_obj = linphone_core_get_current_call(marie->lc);
|
||||
|
||||
linphone_core_pause_call(marie->lc,call_obj);
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPaused,1));
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausing,1));
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1));
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPaused,1));
|
||||
|
||||
linphone_core_resume_call(marie->lc,call_obj);
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||
|
|
@ -508,6 +510,7 @@ static void call_transfer_existing_call_outgoing_call() {
|
|||
LinphoneCoreManager* laure = linphone_core_manager_new("./tester/laure_rc");
|
||||
|
||||
MSList* lcs=ms_list_append(NULL,marie->lc);
|
||||
const MSList* calls;
|
||||
lcs=ms_list_append(lcs,pauline->lc);
|
||||
lcs=ms_list_append(lcs,laure->lc);
|
||||
|
||||
|
|
@ -538,13 +541,25 @@ static void call_transfer_existing_call_outgoing_call() {
|
|||
linphone_core_transfer_call_to_another(marie->lc,marie_call_pauline,marie_call_laure);
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallRefered,1,2000));
|
||||
|
||||
/*pauline pausing marie*/
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallPausing,1,2000));
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallPaused,1,2000));
|
||||
/*pauline calling laure*/
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingProgress,1,2000));
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneTransferCallOutgoingInit,1,2000));
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallIncomingReceived,1,2000));
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,2000));
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneTransfertCallOutgoingProgress,1,2000));
|
||||
linphone_core_accept_call(laure->lc,linphone_core_get_current_call(laure->lc));
|
||||
|
||||
/*laure accept call*/
|
||||
for(calls=linphone_core_get_calls(laure->lc);calls!=NULL;calls=calls->next) {
|
||||
LinphoneCall* call = (LinphoneCall*)calls->data;
|
||||
if (linphone_call_get_state(call) == LinphoneCallIncomingReceived) {
|
||||
CU_ASSERT_EQUAL(linphone_call_get_replaced_call(call),laure_called_by_marie);
|
||||
linphone_core_accept_call(laure->lc,call);
|
||||
break;
|
||||
}
|
||||
}
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallConnected,1,2000));
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallStreamsRunning,1,2000));
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,2000));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue