Set an IO error info for a call when it gets terminated after connectivity lost timeout.

This commit is contained in:
Ghislain MARY 2017-03-01 11:46:59 +01:00
parent b467f9441b
commit d69adc82c5
2 changed files with 18 additions and 17 deletions

View file

@ -4305,25 +4305,19 @@ static void report_bandwidth(LinphoneCall *call, MediaStream *as, MediaStream *v
);
}
static void linphone_call_lost(LinphoneCall *call, LinphoneReason reason){
static void linphone_call_lost(LinphoneCall *call){
LinphoneCore *lc = call->core;
char *temp = NULL;
char *from=NULL;
char *from = NULL;
from = linphone_call_get_remote_address_as_string(call);
switch(reason){
case LinphoneReasonIOError:
temp = ms_strdup_printf("Call with %s disconnected because of network, it is going to be closed.", from ? from : "?");
break;
default:
temp = ms_strdup_printf("Media connectivity with %s is lost, call is going to be closed.", from ? from : "?");
break;
}
temp = ms_strdup_printf("Media connectivity with %s is lost, call is going to be closed.", from ? from : "?");
if (from) ms_free(from);
ms_message("LinphoneCall [%p]: %s",call, temp);
ms_message("LinphoneCall [%p]: %s", call, temp);
linphone_core_notify_display_warning(lc, temp);
linphone_core_terminate_call(lc,call);
linphone_core_play_named_tone(lc,LinphoneToneCallLost);
sal_error_info_set(&call->non_op_error, SalReasonIOError, 503, "IO error", NULL);
linphone_core_terminate_call(lc, call);
linphone_core_play_named_tone(lc, LinphoneToneCallLost);
ms_free(temp);
}
@ -4585,10 +4579,10 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse
linphone_call_handle_stream_events(call, call->main_text_stream_index);
if ((call->state == LinphoneCallStreamsRunning ||
call->state == LinphoneCallPausedByRemote) && one_second_elapsed && call->audiostream!=NULL
&& call->audiostream->ms.state==MSStreamStarted && disconnect_timeout>0 )
&& call->audiostream->ms.state==MSStreamStarted && disconnect_timeout>0 ) {
disconnected=!audio_stream_alive(call->audiostream,disconnect_timeout);
if (disconnected)
linphone_call_lost(call, LinphoneReasonUnknown);
}
if (disconnected) linphone_call_lost(call);
}
void linphone_call_log_completed(LinphoneCall *call){

View file

@ -1375,6 +1375,8 @@ static void linphone_gtk_call_updated_by_remote(LinphoneCall *call){
}
static void linphone_gtk_call_state_changed(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState cs, const char *msg){
const LinphoneErrorInfo *ei;
switch(cs){
case LinphoneCallOutgoingInit:
linphone_gtk_create_in_call_view (call);
@ -1392,7 +1394,12 @@ static void linphone_gtk_call_state_changed(LinphoneCore *lc, LinphoneCall *call
linphone_gtk_in_call_view_terminate (call,msg);
break;
case LinphoneCallEnd:
linphone_gtk_in_call_view_terminate(call,NULL);
ei = linphone_call_get_error_info(call);
if (ei && linphone_error_info_get_reason(ei) != LinphoneReasonNone) {
linphone_gtk_in_call_view_terminate(call, linphone_error_info_get_phrase(ei));
} else {
linphone_gtk_in_call_view_terminate(call, NULL);
}
linphone_gtk_status_icon_set_blinking(FALSE);
break;
case LinphoneCallIncomingReceived: