mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-26 07:38:09 +00:00
merge patch that adds callback to notify about call changes (resume/paused) etc..
This commit is contained in:
parent
5385658850
commit
54939b2e06
9 changed files with 109 additions and 21 deletions
|
|
@ -542,8 +542,8 @@ lpc_cmd_answer(LinphoneCore *lc, char *args)
|
|||
|
||||
if (!args)
|
||||
{
|
||||
//TODO if just one call is present answer the only one ...
|
||||
if ( -1 == linphone_core_accept_call(lc, linphone_core_get_current_call(lc)) )//TODO is there any current call here=> nope
|
||||
//if just one call is present answer the only one in passing NULL to the linphone_core_accept_call ...
|
||||
if ( -1 == linphone_core_accept_call(lc, NULL) )
|
||||
{
|
||||
linphonec_out("No incoming call.\n");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -113,9 +113,11 @@ static char **linephonec_readline_completion(const char *text,
|
|||
|
||||
/* These are callback for linphone core */
|
||||
static void linphonec_call_received(LinphoneCore *lc, LinphoneCall *call);
|
||||
static void linphonec_paused_received(LinphoneCore *lc, LinphoneCall *call);
|
||||
static void linphonec_resumed_received(LinphoneCore *lc, LinphoneCall *call);
|
||||
static void linphonec_prompt_for_auth(LinphoneCore *lc, const char *realm,
|
||||
const char *username);
|
||||
static void linphonec_display_refer (LinphoneCore * lc,const char *refer_to);
|
||||
static void linphonec_display_refer (LinphoneCore * lc,LinphoneCall *call, const char *refer_to);
|
||||
static void linphonec_display_something (LinphoneCore * lc, const char *something);
|
||||
static void linphonec_display_url (LinphoneCore * lc, const char *something, const char *url);
|
||||
static void linphonec_display_warning (LinphoneCore * lc, const char *something);
|
||||
|
|
@ -131,6 +133,7 @@ static void linphonec_display_status (LinphoneCore * lc, const char *something);
|
|||
static void linphonec_general_state (LinphoneCore * lc, LinphoneGeneralState *gstate);
|
||||
static void linphonec_dtmf_received(LinphoneCore *lc, int dtmf);
|
||||
static void print_prompt(LinphoneCore *opm);
|
||||
void linphonec_out(const char *fmt,...);
|
||||
/***************************************************************************
|
||||
*
|
||||
* Global variables
|
||||
|
|
@ -176,6 +179,11 @@ LinphoneCoreVTable linphonec_vtable
|
|||
.show =(ShowInterfaceCb) stub,
|
||||
.inv_recv = linphonec_call_received,
|
||||
.bye_recv = linphonec_bye_received,
|
||||
.ringing_recv = (RingingReceivedCb) stub,
|
||||
.connected_recv = (ConnectedReceivedCb) stub,
|
||||
.failure_recv = (FailureReceivedCb) stub,
|
||||
.paused_recv = linphonec_paused_received,
|
||||
.resumed_recv = linphonec_resumed_received,
|
||||
.notify_recv = linphonec_notify_received,
|
||||
.notify_presence_recv = linphonec_notify_presence_received,
|
||||
.new_unknown_subscriber = linphonec_new_unknown_subscriber,
|
||||
|
|
@ -209,7 +217,7 @@ LinphoneCoreVTable linphonec_vtable
|
|||
* Linphone core callback
|
||||
*/
|
||||
static void
|
||||
linphonec_display_refer (LinphoneCore * lc,const char *refer_to)
|
||||
linphonec_display_refer (LinphoneCore * lc,LinphoneCall *call, const char *refer_to)
|
||||
{
|
||||
fprintf (stdout, "The distant end point asked to transfer the call to %s,don't forget to terminate the call if not\n%s", refer_to,prompt);
|
||||
fflush(stdout);
|
||||
|
|
@ -268,6 +276,34 @@ linphonec_call_received(LinphoneCore *lc, LinphoneCall *call)
|
|||
answer_call=TRUE;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Linphone core callback
|
||||
*/
|
||||
static void
|
||||
linphonec_paused_received(LinphoneCore *lc, LinphoneCall *call)
|
||||
{
|
||||
char *from=linphone_call_get_remote_address_as_string(call);
|
||||
if(from)
|
||||
{
|
||||
linphonec_out("the call from %s have been paused\n",from);
|
||||
ms_free(from);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Linphone core callback
|
||||
*/
|
||||
static void
|
||||
linphonec_resumed_received(LinphoneCore *lc, LinphoneCall *call)
|
||||
{
|
||||
char *from=linphone_call_get_remote_address_as_string(call);
|
||||
if(from)
|
||||
{
|
||||
linphonec_out("the call from %s have been resumed\n",from);
|
||||
ms_free(from);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Linphone core callback
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@ static void linphone_connect_incoming(LinphoneCore *lc, LinphoneCall *call){
|
|||
lc->vtable.show(lc);
|
||||
if (lc->vtable.display_status)
|
||||
lc->vtable.display_status(lc,_("Connected."));
|
||||
if (lc->vtable.connected_recv)
|
||||
lc->vtable.connected_recv(lc,call);
|
||||
call->state=LinphoneCallAVRunning;
|
||||
if (lc->ringstream!=NULL){
|
||||
ring_stop(lc->ringstream);
|
||||
|
|
@ -130,6 +132,8 @@ static void call_ringing(SalOp *h){
|
|||
if (call==NULL) return;
|
||||
if (lc->vtable.display_status)
|
||||
lc->vtable.display_status(lc,_("Remote ringing."));
|
||||
if (lc->vtable.ringing_recv)
|
||||
lc->vtable.ringing_recv(lc,call);
|
||||
md=sal_call_get_final_media_description(h);
|
||||
if (md==NULL){
|
||||
if (lc->ringstream!=NULL) return; /*already ringing !*/
|
||||
|
|
@ -233,16 +237,40 @@ static void call_ack(SalOp *op){
|
|||
static void call_updated(SalOp *op){
|
||||
LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op));
|
||||
LinphoneCall *call=(LinphoneCall*)sal_op_get_user_pointer(op);
|
||||
if(call == linphone_core_get_current_call(lc))
|
||||
{
|
||||
linphone_core_stop_media_streams(lc,call);
|
||||
linphone_core_init_media_streams(lc,call);
|
||||
}
|
||||
if (call->resultdesc)
|
||||
sal_media_description_unref(call->resultdesc);
|
||||
call->resultdesc=sal_call_get_final_media_description(op);
|
||||
if (call->resultdesc && !sal_media_description_empty(call->resultdesc)){
|
||||
linphone_connect_incoming(lc,call);
|
||||
if (call->resultdesc && !sal_media_description_empty(call->resultdesc))
|
||||
{
|
||||
if( (call->state == LinphoneCallPaused) && strcmp(call->resultdesc->addr,"0.0.0.0"))
|
||||
{
|
||||
if(lc->vtable.display_status)
|
||||
lc->vtable.display_status(lc,"we have been resumed...");
|
||||
call->state = LinphoneCallAVRunning;
|
||||
lc->vtable.resumed_recv(lc,call);
|
||||
linphone_core_start_media_streams(lc,call);
|
||||
}
|
||||
else if( (call->state != LinphoneCallPaused) && !strcmp(call->resultdesc->addr,"0.0.0.0"))
|
||||
{
|
||||
if(lc->vtable.display_status)
|
||||
lc->vtable.display_status(lc,"we have been paused...");
|
||||
call->state = LinphoneCallPaused;
|
||||
lc->vtable.paused_recv(lc,call);
|
||||
if(call == linphone_core_get_current_call(lc))
|
||||
{
|
||||
linphone_core_stop_media_streams(lc,call);
|
||||
linphone_core_init_media_streams(lc,call);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(call == linphone_core_get_current_call(lc))
|
||||
{
|
||||
linphone_core_stop_media_streams(lc,call);
|
||||
linphone_core_init_media_streams(lc,call);
|
||||
}
|
||||
linphone_connect_incoming(lc,call);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -276,7 +304,7 @@ static void call_terminated(SalOp *op, const char *from){
|
|||
linphone_call_unref(call);
|
||||
}
|
||||
|
||||
static void call_failure(SalOp *op, SalError error, SalReason sr, const char *details){
|
||||
static void call_failure(SalOp *op, SalError error, SalReason sr, const char *details, int code){
|
||||
LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op));
|
||||
char *msg486=_("User is busy.");
|
||||
char *msg480=_("User is temporarily unavailable.");
|
||||
|
|
@ -336,6 +364,8 @@ static void call_failure(SalOp *op, SalError error, SalReason sr, const char *de
|
|||
lc->vtable.display_status(lc,_("Call failed."));
|
||||
}
|
||||
}
|
||||
if (lc->vtable.failure_recv)
|
||||
lc->vtable.failure_recv(lc,call,code);
|
||||
if (lc->ringstream!=NULL) {
|
||||
ring_stop(lc->ringstream);
|
||||
lc->ringstream=NULL;
|
||||
|
|
@ -415,8 +445,9 @@ static void dtmf_received(SalOp *op, char dtmf){
|
|||
|
||||
static void refer_received(Sal *sal, SalOp *op, const char *referto){
|
||||
LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal);
|
||||
LinphoneCall *call=(LinphoneCall*)sal_op_get_user_pointer(op);
|
||||
if (lc->vtable.refer_received){
|
||||
lc->vtable.refer_received(lc,referto);
|
||||
lc->vtable.refer_received(lc,call,referto);
|
||||
if (op) sal_refer_accept(op);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1574,6 +1574,8 @@ LinphoneAddress * linphone_core_interpret_url(LinphoneCore *lc, const char *url)
|
|||
lc->vtable.display_status(lc,_("Looking for telephone number destination..."));
|
||||
if (enum_lookup(enum_domain,&enumres)<0){
|
||||
lc->vtable.display_status(lc,_("Could not resolve this number."));
|
||||
if(lc->vtable.failure_recv)
|
||||
lc->vtable.failure_recv(lc,NULL,400);
|
||||
ms_free(enum_domain);
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -2205,7 +2207,11 @@ int linphone_core_accept_call(LinphoneCore *lc, LinphoneCall *call)
|
|||
const char *contact=NULL;
|
||||
|
||||
if (call==NULL){
|
||||
return -1;
|
||||
//if just one call is present answer the only one ...
|
||||
if(ms_list_size(linphone_core_get_calls(lc)) != 1)
|
||||
return -1;
|
||||
else
|
||||
call = linphone_core_get_calls(lc)->data;
|
||||
}
|
||||
|
||||
if (call->state==LinphoneCallAVRunning){
|
||||
|
|
|
|||
|
|
@ -398,6 +398,16 @@ typedef void (*InviteReceivedCb)(struct _LinphoneCore *lc, LinphoneCall *call);
|
|||
/** Callback prototype */
|
||||
typedef void (*ByeReceivedCb)(struct _LinphoneCore *lc, LinphoneCall *call);
|
||||
/** Callback prototype */
|
||||
typedef void (*RingingReceivedCb)(struct _LinphoneCore *lc, LinphoneCall *call);
|
||||
/** Callback prototype */
|
||||
typedef void (*ConnectedReceivedCb)(struct _LinphoneCore *lc, LinphoneCall *call);
|
||||
/** Callback prototype */
|
||||
typedef void (*FailureReceivedCb)(struct _LinphoneCore *lc, LinphoneCall *call, int error_code);
|
||||
/** Callback prototype */
|
||||
typedef void (*PausedReceivedCb)(struct _LinphoneCore *lc, LinphoneCall *call);
|
||||
/** Callback prototype */
|
||||
typedef void (*ResumedReceivedCb)(struct _LinphoneCore *lc, LinphoneCall *call);
|
||||
/** Callback prototype */
|
||||
typedef void (*DisplayStatusCb)(struct _LinphoneCore *lc, const char *message);
|
||||
/** Callback prototype */
|
||||
typedef void (*DisplayMessageCb)(struct _LinphoneCore *lc, const char *message);
|
||||
|
|
@ -424,7 +434,7 @@ typedef void (*GeneralStateChange)(struct _LinphoneCore *lc, LinphoneGeneralStat
|
|||
/** Callback prototype */
|
||||
typedef void (*DtmfReceived)(struct _LinphoneCore* lc, int dtmf);
|
||||
/** Callback prototype */
|
||||
typedef void (*ReferReceived)(struct _LinphoneCore *lc, const char *refer_to);
|
||||
typedef void (*ReferReceived)(struct _LinphoneCore *lc, LinphoneCall *call, const char *refer_to);
|
||||
/** Callback prototype */
|
||||
typedef void (*BuddyInfoUpdated)(struct _LinphoneCore *lc, LinphoneFriend *lf);
|
||||
|
||||
|
|
@ -437,6 +447,11 @@ typedef struct _LinphoneVTable
|
|||
ShowInterfaceCb show; /**< Notifies the application that it should show up*/
|
||||
InviteReceivedCb inv_recv; /**< Notifies incoming calls */
|
||||
ByeReceivedCb bye_recv; /**< Notify calls terminated by far end*/
|
||||
RingingReceivedCb ringing_recv; /**< Notify that the distant phone is ringing*/
|
||||
ConnectedReceivedCb connected_recv; /**< Notify that the distant phone answered the call*/
|
||||
FailureReceivedCb failure_recv; /**< Notify that the call failed*/
|
||||
PausedReceivedCb paused_recv; /**< Notify that the call failed*/
|
||||
ResumedReceivedCb resumed_recv; /**< Notify that the call failed*/
|
||||
NotifyPresenceReceivedCb notify_presence_recv; /**< Notify received presence events*/
|
||||
NewUnknownSubscriberCb new_unknown_subscriber; /**< Notify about unknown subscriber */
|
||||
AuthInfoRequested auth_info_requested; /**< Ask the application some authentication information */
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ typedef void (*SalOnCallAccepted)(SalOp *op);
|
|||
typedef void (*SalOnCallAck)(SalOp *op);
|
||||
typedef void (*SalOnCallUpdated)(SalOp *op);
|
||||
typedef void (*SalOnCallTerminated)(SalOp *op, const char *from);
|
||||
typedef void (*SalOnCallFailure)(SalOp *op, SalError error, SalReason reason, const char *details);
|
||||
typedef void (*SalOnCallFailure)(SalOp *op, SalError error, SalReason reason, const char *details, int code);
|
||||
typedef void (*SalOnAuthRequested)(SalOp *op, const char *realm, const char *username);
|
||||
typedef void (*SalOnAuthSuccess)(SalOp *op, const char *realm, const char *username);
|
||||
typedef void (*SalOnRegisterSuccess)(SalOp *op, bool_t registered);
|
||||
|
|
|
|||
|
|
@ -915,7 +915,7 @@ static void call_released(Sal *sal, eXosip_event_t *ev){
|
|||
}
|
||||
op->cid=-1;
|
||||
if (op->did==-1)
|
||||
sal->callbacks.call_failure(op,SalErrorNoResponse,SalReasonUnknown,NULL);
|
||||
sal->callbacks.call_failure(op,SalErrorNoResponse,SalReasonUnknown,NULL, 487);
|
||||
}
|
||||
|
||||
static int get_auth_data_from_response(osip_message_t *resp, const char **realm, const char **username){
|
||||
|
|
@ -1066,7 +1066,7 @@ static bool_t call_failure(Sal *sal, eXosip_event_t *ev){
|
|||
sr=SalReasonUnknown;
|
||||
}else error=SalErrorNoResponse;
|
||||
}
|
||||
sal->callbacks.call_failure(op,error,sr,reason);
|
||||
sal->callbacks.call_failure(op,error,sr,reason,code);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ static void linphone_gtk_display_url(LinphoneCore *lc, const char *msg, const ch
|
|||
static void linphone_gtk_display_question(LinphoneCore *lc, const char *question);
|
||||
static void linphone_gtk_call_log_updated(LinphoneCore *lc, LinphoneCallLog *cl);
|
||||
static void linphone_gtk_general_state(LinphoneCore *lc, LinphoneGeneralState *gstate);
|
||||
static void linphone_gtk_refer_received(LinphoneCore *lc, const char *refer_to);
|
||||
static void linphone_gtk_refer_received(LinphoneCore *lc, LinphoneCall *call, const char *refer_to);
|
||||
static gboolean linphone_gtk_auto_answer(GtkWidget *incall_window);
|
||||
|
||||
static LinphoneCoreVTable vtable={
|
||||
|
|
@ -1210,7 +1210,7 @@ void linphone_gtk_log_handler(OrtpLogLevel lev, const char *fmt, va_list args){
|
|||
}
|
||||
|
||||
|
||||
static void linphone_gtk_refer_received(LinphoneCore *lc, const char *refer_to){
|
||||
static void linphone_gtk_refer_received(LinphoneCore *lc, LinphoneCall *call, const char *refer_to){
|
||||
GtkEntry * uri_bar =GTK_ENTRY(linphone_gtk_get_widget(
|
||||
linphone_gtk_get_main_window(), "uribar"));
|
||||
linphone_gtk_show_main_window();
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit b340a76e998c7dd2670372212b0bf14d7c59b987
|
||||
Subproject commit 5b8a7c368076733d478aa7e49149975915408483
|
||||
Loading…
Add table
Reference in a new issue