if(lc->vtable.display_status)
lc->vtable.display_status(lc,_("We have been resumed."));
linphone_call_set_state(call,LinphoneCallStreamsRunning,"Connected (streams running)");
+ linphone_call_set_transfer_state(call, LinphoneCallIdle);
}
static void call_paused_by_remote(LinphoneCore *lc, LinphoneCall *call){
default:
cstate=LinphoneCallError;
}
- if (lc->vtable.transfer_state_changed)
- lc->vtable.transfer_state_changed(lc,call,cstate);
+ linphone_call_set_transfer_state(call, cstate);
if (cstate==LinphoneCallConnected){
/*automatically terminate the call as the transfer is complete.*/
linphone_core_terminate_call(lc,call);
call->magic=linphone_call_magic;
call->refcnt=1;
call->state=LinphoneCallIdle;
+ call->transfer_state = LinphoneCallIdle;
call->start_time=time(NULL);
call->media_start_time=0;
call->log=linphone_call_log_new(call, from, to);
call_logs_write_to_config_file(lc);
}
+LinphoneCallState linphone_call_get_transfer_state(LinphoneCall *call) {
+ return call->transfer_state;
+}
+
+void linphone_call_set_transfer_state(LinphoneCall* call, LinphoneCallState state) {
+ if (state != call->transfer_state) {
+ LinphoneCore* lc = call->core;
+ call->transfer_state = state;
+ if (lc->vtable.transfer_state_changed)
+ lc->vtable.transfer_state_changed(lc, call, state);
+ }
+}
sal_call_refer(call->op,real_url);
ms_free(real_url);
linphone_address_destroy(real_parsed_url);
+ linphone_call_set_transfer_state(call, LinphoneCallOutgoingInit);
return 0;
}
* close the call with us (the 'dest' call).
**/
int linphone_core_transfer_call_to_another(LinphoneCore *lc, LinphoneCall *call, LinphoneCall *dest){
- return sal_call_refer_with_replaces (call->op,dest->op);
+ int result = sal_call_refer_with_replaces (call->op,dest->op);
+ linphone_call_set_transfer_state(call, LinphoneCallOutgoingInit);
+ return result;
}
bool_t linphone_core_inc_invite_pending(LinphoneCore*lc){
void *linphone_call_get_user_pointer(LinphoneCall *call);
void linphone_call_set_user_pointer(LinphoneCall *call, void *user_pointer);
void linphone_call_set_next_video_frame_decoded_callback(LinphoneCall *call, LinphoneCallCbFunc cb, void* user_data);
+LinphoneCallState linphone_call_get_transfer_state(LinphoneCall *call);
/**
* Enables or disable echo cancellation for this call
time_t start_time; /*time at which the call was initiated*/
time_t media_start_time; /*time at which it was accepted, media streams established*/
LinphoneCallState state;
+ LinphoneCallState transfer_state; /*idle if no transfer*/
LinphoneReason reason;
int refcnt;
void * user_pointer;
LinphoneCallLog * linphone_call_log_new(LinphoneCall *call, LinphoneAddress *local, LinphoneAddress * remote);
void linphone_call_log_completed(LinphoneCall *call);
void linphone_call_log_destroy(LinphoneCallLog *cl);
+void linphone_call_set_transfer_state(LinphoneCall* call, LinphoneCallState state);
void linphone_auth_info_write_config(struct _LpConfig *config, LinphoneAuthInfo *obj, int pos);