From 725638c7bcb5617b3074341b95fcc8085576c984 Mon Sep 17 00:00:00 2001
From: Simon Morlat <simon.morlat@linphone.org>
Date: Mon, 9 Aug 2010 14:55:09 +0200
Subject: [PATCH] fix some bugs, cleanups

---
 configure.in              |  9 ++++--
 console/linphonec.c       |  5 ----
 coreapi/callbacks.c       | 15 ++++------
 coreapi/linphonecore.c    | 14 +++------
 coreapi/linphonecore.h    | 61 ++++++++++++++++++++-------------------
 coreapi/sal.c             | 21 ++++++++++++--
 coreapi/sal.h             | 14 +++++++--
 coreapi/sal_eXosip2.c     | 24 ++-------------
 coreapi/sal_eXosip2_sdp.c | 42 +++++++++++++++++++++++----
 gtk-glade/incall_view.c   |  3 --
 gtk-glade/main.c          |  6 ----
 11 files changed, 116 insertions(+), 98 deletions(-)

diff --git a/configure.in b/configure.in
index e7edf835e5..6495ab0a62 100644
--- a/configure.in
+++ b/configure.in
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 
-AC_INIT([linphone],[3.3.2],[linphone-developers@nongnu.org])
+AC_INIT([linphone],[3.3.99],[linphone-developers@nongnu.org])
 AC_CANONICAL_SYSTEM
 
 dnl Source packaging numbers
@@ -15,7 +15,12 @@ LINPHONE_VERSION=$LINPHONE_MAJOR_VERSION.$LINPHONE_MINOR_VERSION.${LINPHONE_MICR
 if test "$LINPHONE_EXTRA_VERSION" != "" ;then
 	LINPHONE_VERSION=$LINPHONE_VERSION.${LINPHONE_EXTRA_VERSION}
 fi
-LIBLINPHONE_SO_VERSION=`expr $LINPHONE_MINOR_VERSION + $LINPHONE_MAJOR_VERSION`:$LINPHONE_MICRO_VERSION:$LINPHONE_MINOR_VERSION
+
+LIBLINPHONE_SO_CURRENT=4 dnl increment this number when you add/change/remove an interface
+LIBLINPHONE_SO_REVISION=0 dnl increment this number when you change source code, without changing interfaces; set to 0 when incrementing CURRENT
+LIBLINPHONE_SO_AGE=0 dnl increment this number when you add an interface, set to 0 if you remove an interface
+
+LIBLINPHONE_SO_VERSION=$LIBLINPHONE_SO_CURRENT:$LIBLINPHONE_SO_REVISION:$LIBLINPHONE_SO_AGE
 
 AC_SUBST(LIBLINPHONE_SO_VERSION, $LIBLINPHONE_SO_VERSION)
 AC_SUBST(LINPHONE_VERSION)
diff --git a/console/linphonec.c b/console/linphonec.c
index f203057967..030477c742 100644
--- a/console/linphonec.c
+++ b/console/linphonec.c
@@ -194,13 +194,8 @@ LinphoneCoreVTable linphonec_vtable
 	.auth_info_requested = linphonec_prompt_for_auth,
 	.display_status = linphonec_display_status,
 	.display_message=linphonec_display_something,
-#ifdef VINCENT_MAURY_RSVP
-	/* the yes/no dialog box */
-	.display_yes_no= (DisplayMessageCb) stub,
-#endif
 	.display_warning=linphonec_display_warning,
 	.display_url=linphonec_display_url,
-	.display_question=(DisplayQuestionCb)stub,
 	.text_received=linphonec_text_received,
 	.general_state=linphonec_general_state,
 	.dtmf_received=linphonec_dtmf_received,
diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c
index 36f21d5a56..a9d4e2c837 100644
--- a/coreapi/callbacks.c
+++ b/coreapi/callbacks.c
@@ -134,10 +134,9 @@ static void call_received(SalOp *h){
 	call->state=LinphoneCallRinging;
 	sal_call_notify_ringing(h);
 #if !(__IPHONE_OS_VERSION_MIN_REQUIRED >= 40000)
-	linphone_core_init_media_streams(lc,lc->call);
+	linphone_core_init_media_streams(lc,call);
 #endif
 	if (lc->vtable.inv_recv) lc->vtable.inv_recv(lc,call);
-#endif
 	ms_free(barmesg);
 	ms_free(tmp);
 }
@@ -205,7 +204,7 @@ static void call_accepted(SalOp *op){
 	}
 	gctx.call=call;
 	if (call->state==LinphoneCallAVRunning){
-		ms_message("GET ACK of resume\n");
+		ms_message("GET 200Ok of resume\n");
 		if(lc->vtable.ack_resumed_recv)
 			lc->vtable.ack_resumed_recv(lc,call);
 		return ; //already accepted
@@ -226,20 +225,16 @@ static void call_accepted(SalOp *op){
 		call->media_pending=FALSE;
 	}
 	if (call->resultdesc && !sal_media_description_empty(call->resultdesc)){
-		//if we initiate a pause
+		//if we initiated a pause
 		if(call->state == LinphoneCallPaused)
 		{
-			ms_message("GET ACK of pause\n");
+			ms_message("GET 200Ok of pause\n");
 			if(lc->vtable.ack_paused_recv)
 				lc->vtable.ack_paused_recv(lc,call);
 		}//if there is an accepted incoming call
 		else
 		{
-			/*
-			 * Do not set the call as current here,
-			 * because we can go through this function not only when an incoming call is accepted
-			 */
-			//linphone_core_set_as_current_call (lc,call);
+			linphone_core_set_as_current_call (lc,call);
 			gstate_new_state(lc, GSTATE_CALL_OUT_CONNECTED, gctx, NULL);
 			linphone_connect_incoming(lc,call);
 		}		
diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c
index 54b9d6d08d..3da96b3c04 100644
--- a/coreapi/linphonecore.c
+++ b/coreapi/linphonecore.c
@@ -3983,16 +3983,15 @@ int linphone_core_set_as_current_call(LinphoneCore *lc, LinphoneCall *call)
 	return 0;
 }
 
-/**
- * Add the call in the LinphoneCall list
- *
- * @ingroup call_control
-**/
+
 int linphone_core_add_call( LinphoneCore *lc, LinphoneCall *call)
 {
 	if(linphone_core_can_we_add_call(lc))
 	{
 		MSList *the_calls = lc->calls;
+		if (the_calls==NULL){
+			lc->current_call=call;
+		}
 		the_calls = ms_list_append(the_calls,call);
 		lc->calls = the_calls;
 		return 0;
@@ -4000,11 +3999,6 @@ int linphone_core_add_call( LinphoneCore *lc, LinphoneCall *call)
 	return -1;
 }
 
-/**
- * Add the call in the LinphoneCall list
- *
- * @ingroup call_control
-**/
 int linphone_core_del_call( LinphoneCore *lc, LinphoneCall *call)
 {
 	MSList *it;
diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h
index 4d6fb8f6e2..fb94db8dbb 100644
--- a/coreapi/linphonecore.h
+++ b/coreapi/linphonecore.h
@@ -179,7 +179,8 @@ char *linphone_call_get_remote_address_as_string(const LinphoneCall *call);
 void linphone_call_ref(LinphoneCall *call);
 void linphone_call_unref(LinphoneCall *call);
 LinphoneCallLog *linphone_call_get_call_log(const LinphoneCall *call);
-
+void *linphone_call_get_user_pointer(LinphoneCall *call);
+void linphone_call_set_user_pointer(LinphoneCall *call, void *user_pointer);
 
 typedef enum{
 	LinphoneSPWait,
@@ -378,26 +379,28 @@ typedef enum _gstate_group {
 } gstate_group_t;
 
 typedef enum _gstate {
-  /* states for GSTATE_GROUP_POWER */
-  GSTATE_POWER_OFF = 0,        /* initial state */
-  GSTATE_POWER_STARTUP,
-  GSTATE_POWER_ON,
-  GSTATE_POWER_SHUTDOWN,
-  /* states for GSTATE_GROUP_REG */
-  GSTATE_REG_NONE = 10,       /* initial state */
-  GSTATE_REG_OK,
-  GSTATE_REG_FAILED,
-  GSTATE_REG_PENDING, /* a registration request is ongoing*/
-  /* states for GSTATE_GROUP_CALL */
-  GSTATE_CALL_IDLE = 20,      /* initial state */
-  GSTATE_CALL_OUT_INVITE,
-  GSTATE_CALL_OUT_CONNECTED,
-  GSTATE_CALL_IN_INVITE,
-  GSTATE_CALL_IN_CONNECTED,
-  GSTATE_CALL_END,
-  GSTATE_CALL_ERROR,
-  GSTATE_INVALID,
-  GSTATE_CALL_OUT_RINGING /*remote ringing*/
+	/* states for GSTATE_GROUP_POWER */
+	GSTATE_POWER_OFF = 0,        /* initial state */
+	GSTATE_POWER_STARTUP,
+	GSTATE_POWER_ON,
+	GSTATE_POWER_SHUTDOWN,
+	/* states for GSTATE_GROUP_REG */
+	GSTATE_REG_NONE = 10,       /* initial state */
+	GSTATE_REG_OK,
+	GSTATE_REG_FAILED,
+	GSTATE_REG_PENDING, /* a registration request is ongoing*/
+	/* states for GSTATE_GROUP_CALL */
+	GSTATE_CALL_IDLE = 20,      /* initial state */
+	GSTATE_CALL_OUT_INVITE,
+	GSTATE_CALL_OUT_CONNECTED,
+	GSTATE_CALL_IN_INVITE,
+	GSTATE_CALL_IN_CONNECTED,
+	GSTATE_CALL_END,
+	GSTATE_CALL_ERROR,
+	GSTATE_CALL_OUT_RINGING, /*remote ringing*/
+	GSTATE_CALL_PAUSED,
+	GSTATE_CALL_RESUMED,
+	GSTATE_INVALID
 } gstate_t;
 
 struct _LinphoneGeneralState {
@@ -476,7 +479,6 @@ typedef void (*BuddyInfoUpdated)(struct _LinphoneCore *lc, LinphoneFriend *lf);
 **/
 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*/
@@ -486,21 +488,21 @@ typedef struct _LinphoneVTable
 	ResumedReceivedCb resumed_recv; /**< Notify that the call has been resumed*/
 	AckPausedReceivedCb ack_paused_recv;/**< Notify that the previous command pause sent to the call has been acknowledge*/
 	AckResumedReceivedCb ack_resumed_recv;/**< Notify that the previous command resumed sent to the call has been acknowledge*/	
+	GeneralStateChange general_state; /**< State notification callback */
 	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 */
-	DisplayStatusCb display_status; /**< Callback that notifies various events with human readable text.*/
-	DisplayMessageCb display_message;/**< Callback to display a message to the user */
-	DisplayMessageCb display_warning;/** Callback to display a warning to the user */
-	DisplayUrlCb display_url;
-	DisplayQuestionCb display_question;
 	CallLogUpdated call_log_updated; /**< Notifies that call log list has been updated */
 	TextMessageReceived text_received; /**< A text message has been received */
-	GeneralStateChange general_state; /**< State notification callback */
 	DtmfReceived dtmf_received; /**< A dtmf has been received received */
 	ReferReceived refer_received; /**< A refer was received */
 	BuddyInfoUpdated buddy_info_updated; /**< a LinphoneFriend's BuddyInfo has changed*/
 	NotifyReceivedCb notify_recv; /**< Other notifications*/
+	DisplayStatusCb display_status; /**< Callback that notifies various events with human readable text.*/
+	DisplayMessageCb display_message;/**< Callback to display a message to the user */
+	DisplayMessageCb display_warning;/** Callback to display a warning to the user */
+	DisplayUrlCb display_url;
+	ShowInterfaceCb show; /**< Notifies the application that it should show up*/
 } LinphoneCoreVTable;
 
 /**
@@ -875,7 +877,6 @@ int linphone_core_get_current_call_stats(LinphoneCore *lc, rtp_stats_t *local, r
 }
 #endif
 MSList *linphone_core_get_calls(LinphoneCore *lc);
-void *linphone_call_get_user_pointer(LinphoneCall *call);
-void linphone_call_set_user_pointer(LinphoneCall *call, void *user_pointer);
+
 
 #endif
diff --git a/coreapi/sal.c b/coreapi/sal.c
index 750555016d..84f3d412b2 100644
--- a/coreapi/sal.c
+++ b/coreapi/sal.c
@@ -62,15 +62,32 @@ const SalStreamDescription *sal_media_description_find_stream(const SalMediaDesc
 	return NULL;
 }
 
-bool_t sal_media_description_empty(SalMediaDescription *md){
+bool_t sal_media_description_empty(const SalMediaDescription *md){
 	int i;
 	for(i=0;i<md->nstreams;++i){
-		SalStreamDescription *ss=&md->streams[i];
+		const SalStreamDescription *ss=&md->streams[i];
 		if (ss->port!=0) return FALSE;
 	}
 	return TRUE;
 }
 
+void sal_media_description_set_dir(SalMediaDescription *md, SalStreamDir stream_dir){
+	int i;
+	for(i=0;i<md->nstreams;++i){
+		SalStreamDescription *ss=&md->streams[i];
+		ss->dir=stream_dir;
+	}
+}
+
+bool_t sal_media_description_has_dir(const SalMediaDescription *md, SalStreamDir stream_dir){
+	int i;
+	for(i=0;i<md->nstreams;++i){
+		const SalStreamDescription *ss=&md->streams[i];
+		if (ss->dir!=stream_dir) return FALSE;
+	}
+	return TRUE;
+}
+
 static void assign_string(char **str, const char *arg){
 	if (*str){
 		ms_free(*str);
diff --git a/coreapi/sal.h b/coreapi/sal.h
index c8ed11a49f..fd3f6f21bc 100644
--- a/coreapi/sal.h
+++ b/coreapi/sal.h
@@ -86,6 +86,13 @@ typedef enum{
 	SalProtoRtpSavp
 }SalMediaProto;
 
+typedef enum{
+	SalStreamSendRecv,
+	SalStreamSendOnly,
+	SalStreamRecvOnly,
+	SalStreamInactive
+}SalStreamDir;
+
 typedef struct SalEndpointCandidate{
 	char addr[64];
 	int port;
@@ -102,7 +109,7 @@ typedef struct SalStreamDescription{
 	int bandwidth;
 	int ptime;
 	SalEndpointCandidate candidates[SAL_ENDPOINT_CANDIDATE_MAX];
-	bool_t notsending;
+	SalStreamDir dir;
 } SalStreamDescription;
 
 #define SAL_MEDIA_DESCRIPTION_MAX_STREAMS 4
@@ -114,15 +121,16 @@ typedef struct SalMediaDescription{
 	int nstreams;
 	int bandwidth;
 	SalStreamDescription streams[SAL_MEDIA_DESCRIPTION_MAX_STREAMS];
-	bool_t notsending;
 } SalMediaDescription;
 
 SalMediaDescription *sal_media_description_new();
 void sal_media_description_ref(SalMediaDescription *md);
 void sal_media_description_unref(SalMediaDescription *md);
-bool_t sal_media_description_empty(SalMediaDescription *md);
+bool_t sal_media_description_empty(const SalMediaDescription *md);
+bool_t sal_media_description_has_dir(const SalMediaDescription *md, SalStreamDir dir);
 const SalStreamDescription *sal_media_description_find_stream(const SalMediaDescription *md,
     SalMediaProto proto, SalStreamType type);
+void sal_media_description_set_dir(SalMediaDescription *md, SalStreamDir stream_dir);
 
 /*this structure must be at the first byte of the SalOp structure defined by implementors*/
 typedef struct SalOpBase{
diff --git a/coreapi/sal_eXosip2.c b/coreapi/sal_eXosip2.c
index 50454640c8..923dfdf1b5 100644
--- a/coreapi/sal_eXosip2.c
+++ b/coreapi/sal_eXosip2.c
@@ -421,19 +421,6 @@ static void set_sdp(osip_message_t *sip,sdp_message_t *msg){
 	osip_free(sdp);
 }
 
-static void set_hold_status_to_desc(SalMediaDescription *desc, bool_t holdon)
-{
-	int i;
-	if(desc == NULL)
-		return;
-	desc->notsending = holdon;
-	for(i = 0; i < SAL_MEDIA_DESCRIPTION_MAX_STREAMS; i++)
-	{
-		if(desc->streams != NULL)
-			desc->streams[i].notsending = holdon;//Audio
-	}
-}
-
 static void set_sdp_from_desc(osip_message_t *sip, const SalMediaDescription *desc){
 	sdp_message_t *msg=media_description_to_sdp(desc);
 	if (msg==NULL) {
@@ -1482,9 +1469,6 @@ static void other_request_reply(Sal *sal,eXosip_event_t *ev){
 }
 
 static bool_t process_event(Sal *sal, eXosip_event_t *ev){
-#ifdef PRINTF_DEBUG
-	printf("EVENT (%d)\n",ev->type);
-#endif
 	ms_message("linphone process event get a message %d\n",ev->type);
 	switch(ev->type){
 		case EXOSIP_CALL_ANSWERED:
@@ -1809,11 +1793,9 @@ int sal_call_hold(SalOp *h, bool_t holdon)
 {
 	int err=0;
 
-	osip_message_t *reinvite;
-	if(eXosip_call_build_request(h->did,"INVITE",&reinvite) != OSIP_SUCCESS)
+	osip_message_t *reinvite=NULL;
+	if(eXosip_call_build_request(h->did,"INVITE",&reinvite) != OSIP_SUCCESS || reinvite==NULL)
 		return -1;
-	if(reinvite==NULL)
-		return -2;
 	osip_message_set_subject(reinvite,osip_strdup("Phone Call Hold"));
 	osip_message_set_allow(reinvite, "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO");
 	if (h->base.root->session_expires!=0){
@@ -1823,7 +1805,7 @@ int sal_call_hold(SalOp *h, bool_t holdon)
 	//add something to say that the distant sip phone will be in sendonly/sendrecv mode
 	if (h->base.local_media){
 		h->sdp_offering=TRUE;
-		set_hold_status_to_desc(h->base.local_media,holdon);
+		sal_media_description_set_dir(h->base.local_media, holdon ? SalStreamSendOnly : SalStreamSendRecv);
 		set_sdp_from_desc(reinvite,h->base.local_media);
 	}else h->sdp_offering=FALSE;
 	eXosip_lock();
diff --git a/coreapi/sal_eXosip2_sdp.c b/coreapi/sal_eXosip2_sdp.c
index 2c27c52369..7d63148afc 100644
--- a/coreapi/sal_eXosip2_sdp.c
+++ b/coreapi/sal_eXosip2_sdp.c
@@ -106,6 +106,23 @@ static int _sdp_message_get_a_ptime(sdp_message_t *sdp, int mline){
 	return 0;
 }
 
+static int _sdp_message_get_mline_dir(sdp_message_t *sdp, int mline){
+	int i;
+	sdp_attribute_t *attr;
+	for (i=0;(attr=sdp_message_attribute_get(sdp,mline,i))!=NULL;i++){
+		if (keywordcmp("sendrecv",attr->a_att_field)==0){
+			return SalStreamSendRecv;
+		}else if (keywordcmp("sendonly",attr->a_att_field)==0){
+			return SalStreamSendOnly;
+		}else if (keywordcmp("recvonly",attr->a_att_field)==0){
+			return SalStreamSendOnly;
+		}else if (keywordcmp("inactive",attr->a_att_field)==0){
+			return SalStreamInactive;
+		}
+	}
+	return SalStreamSendRecv;
+}
+
 static sdp_message_t *create_generic_sdp(const SalMediaDescription *desc)
 {
 	sdp_message_t *local;
@@ -121,7 +138,7 @@ static sdp_message_t *create_generic_sdp(const SalMediaDescription *desc)
 			  osip_strdup ("IN"), inet6 ? osip_strdup("IP6") : osip_strdup ("IP4"),
 			  osip_strdup (desc->addr));
 	sdp_message_s_name_set (local, osip_strdup ("A conversation"));
-	if(!desc->notsending)
+	if(!sal_media_description_has_dir (desc,SalStreamSendOnly))
 	{
 		sdp_message_c_connection_add (local, -1,
 				osip_strdup ("IN"), inet6 ? osip_strdup ("IP6") : osip_strdup ("IP4"),
@@ -131,7 +148,7 @@ static sdp_message_t *create_generic_sdp(const SalMediaDescription *desc)
 	{
 		sdp_message_c_connection_add (local, -1,
 				osip_strdup ("IN"), inet6 ? osip_strdup ("IP6") : osip_strdup ("IP4"),
-						inet6 ? osip_strdup ("0.0.0.0.0.0") : osip_strdup ("0.0.0.0"), NULL, NULL);
+						inet6 ? osip_strdup ("::0") : osip_strdup ("0.0.0.0"), NULL, NULL);
 	}		
 	sdp_message_t_time_descr_add (local, osip_strdup ("0"), osip_strdup ("0"));
 	if (desc->bandwidth>0) sdp_message_b_bandwidth_add (local, -1, osip_strdup ("AS"),
@@ -167,6 +184,7 @@ static void add_line(sdp_message_t *msg, int lineno, const SalStreamDescription
 	const char *mt=desc->type==SalAudio ? "audio" : "video";
 	const MSList *elem;
 	const char *addr;
+	const char *dir="sendrecv";
 	int port;
 	if (desc->candidates[0].addr[0]!='\0'){
 		addr=desc->candidates[0].addr;
@@ -195,10 +213,21 @@ static void add_line(sdp_message_t *msg, int lineno, const SalStreamDescription
 	for(elem=desc->payloads;elem!=NULL;elem=elem->next){
 		add_payload(msg, lineno, (PayloadType*)elem->data);
 	}
-	if(desc->notsending)//to hold the distant SIP endpoint
-		sdp_message_a_attribute_add (msg, lineno, osip_strdup ("sendonly"),NULL);
-	else
-		sdp_message_a_attribute_add (msg, lineno, osip_strdup ("sendrecv"),NULL);
+	switch(desc->dir){
+		case SalStreamSendRecv:
+			dir="sendrecv";
+		break;
+		case SalStreamRecvOnly:
+			dir="recvonly";
+			break;
+		case SalStreamSendOnly:
+			dir="sendonly";
+			break;
+		case SalStreamInactive:
+			dir="inactive";
+			break;
+	}
+	sdp_message_a_attribute_add (msg, lineno, osip_strdup (dir),NULL);
 }
 
 sdp_message_t *media_description_to_sdp(const SalMediaDescription *desc){
@@ -285,6 +314,7 @@ int sdp_to_media_description(sdp_message_t *msg, SalMediaDescription *desc){
 		for(j=0;(sbw=sdp_message_bandwidth_get(msg,i,j))!=NULL;++j){
 			if (strcasecmp(sbw->b_bwtype,"AS")==0) stream->bandwidth=atoi(sbw->b_bandwidth);
 		}
+		stream->dir=_sdp_message_get_mline_dir(msg,i);
 		/* for each payload type */
 		for (j=0;((number=sdp_message_m_payload_get (msg, i,j)) != NULL); j++){
 			const char *rtpmap,*fmtp;
diff --git a/gtk-glade/incall_view.c b/gtk-glade/incall_view.c
index a17741ff4a..2874da52a4 100644
--- a/gtk-glade/incall_view.c
+++ b/gtk-glade/incall_view.c
@@ -213,11 +213,9 @@ void linphone_gtk_enable_mute_button(GtkToggleButton *button, gboolean sensitive
 }
 
 void linphone_gtk_draw_hold_button(GtkToggleButton *button, gboolean active){
-	GtkWidget *status=linphone_gtk_get_widget(linphone_gtk_get_main_window(),"in_call_status");
 	if (active){
 		GtkWidget *image=create_pixmap("hold_off.png");
 		gtk_button_set_label(GTK_BUTTON(button),_("HoldOff"));
-		gtk_label_set_markup(GTK_LABEL(status),_("<b>In call holded with</b>"));
 		if (image!=NULL) {
 			gtk_button_set_image(GTK_BUTTON(button),image);
 			gtk_widget_show(image);
@@ -225,7 +223,6 @@ void linphone_gtk_draw_hold_button(GtkToggleButton *button, gboolean active){
 	}else{
 		GtkWidget *image=create_pixmap("hold_on.png");
 		gtk_button_set_label(GTK_BUTTON(button),_("HoldOn"));
-		gtk_label_set_markup(GTK_LABEL(status),_("<b>In call with</b>"));
 		if (image!=NULL) {
 			gtk_button_set_image(GTK_BUTTON(button),image);
 			gtk_widget_show(image);
diff --git a/gtk-glade/main.c b/gtk-glade/main.c
index 5ec4bdbcdb..56b5728608 100644
--- a/gtk-glade/main.c
+++ b/gtk-glade/main.c
@@ -51,7 +51,6 @@ static void linphone_gtk_display_status(LinphoneCore *lc, const char *status);
 static void linphone_gtk_display_message(LinphoneCore *lc, const char *msg);
 static void linphone_gtk_display_warning(LinphoneCore *lc, const char *warning);
 static void linphone_gtk_display_url(LinphoneCore *lc, const char *msg, const char *url);
-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, LinphoneGeneralStateContext gctx);
 static void linphone_gtk_refer_received(LinphoneCore *lc, LinphoneCall *call, const char  *refer_to);
@@ -68,7 +67,6 @@ static LinphoneCoreVTable vtable={
 	.display_message=linphone_gtk_display_message,
 	.display_warning=linphone_gtk_display_warning,
 	.display_url=linphone_gtk_display_url,
-	.display_question=linphone_gtk_display_question,
 	.call_log_updated=linphone_gtk_call_log_updated,
 	.text_received=linphone_gtk_text_received,
 	.general_state=linphone_gtk_general_state,
@@ -870,10 +868,6 @@ static void linphone_gtk_display_url(LinphoneCore *lc, const char *msg, const ch
 	linphone_gtk_display_something(GTK_MESSAGE_INFO,richtext);
 }
 
-static void linphone_gtk_display_question(LinphoneCore *lc, const char *question){
-	linphone_gtk_display_something(GTK_MESSAGE_QUESTION,question);
-}
-
 static void linphone_gtk_call_log_updated(LinphoneCore *lc, LinphoneCallLog *cl){
 	GtkWidget *w=(GtkWidget*)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"call_logs");
 	if (w) linphone_gtk_call_log_update(w);
-- 
GitLab