diff --git a/console/commands.c b/console/commands.c index 658f0fe24..142ac833d 100644 --- a/console/commands.c +++ b/console/commands.c @@ -95,6 +95,7 @@ static int lpc_cmd_video_window(LinphoneCore *lc, char *args); #endif static int lpc_cmd_states(LinphoneCore *lc, char *args); static int lpc_cmd_identify(LinphoneCore *lc, char *args); +static int lpc_cmd_ringback(LinphoneCore *lc, char *args); /* Command handler helpers */ static void linphonec_proxy_add(LinphoneCore *lc); @@ -302,6 +303,10 @@ static LPC_COMMAND advanced_commands[] = { "'identify' \t: returns remote user-agent string for current call.\n" "'identify ' \t: returns remote user-agent string for call with supplied id.\n" }, + { "ringback", lpc_cmd_ringback, "Specifies a ringback tone to be played to remote end during incoming calls", + "'ringback '\t: Specifies a ringback tone to be played to remote end during incoming calls\n" + "'ringback disable'\t: Disable playing of ringback tone to callers\n" + }, { NULL,NULL,NULL,NULL} }; @@ -650,7 +655,7 @@ static int lpc_cmd_terminate(LinphoneCore *lc, char *args) { if (linphone_core_get_calls(lc)==NULL){ - linphonec_out("No active calls"); + linphonec_out("No active calls\n"); return 1; } if (!args) @@ -671,7 +676,7 @@ lpc_cmd_terminate(LinphoneCore *lc, char *args) LinphoneCall *call=linphonec_get_call(id); if (call){ if (linphone_core_terminate_call(lc,call)==-1){ - linphonec_out("Could not stop the call with id %li",id); + linphonec_out("Could not stop the call with id %li\n",id); } }else return 0; return 1; @@ -2357,6 +2362,18 @@ static int lpc_cmd_identify(LinphoneCore *lc, char *args){ return 1; } +static int lpc_cmd_ringback(LinphoneCore *lc, char *args){ + if (!args) return 0; + if (strcmp(args,"disable")==0){ + linphone_core_set_remote_ringback_tone(lc,NULL); + linphonec_out("Disabling ringback tone.\n"); + return 1; + } + linphone_core_set_remote_ringback_tone (lc,args); + linphonec_out("Using %s as ringback tone to be played to callers.",args); + return 1; +} + /*************************************************************************** * * Command table management funx diff --git a/coreapi/Makefile.am b/coreapi/Makefile.am index fa4b38576..0e498053d 100644 --- a/coreapi/Makefile.am +++ b/coreapi/Makefile.am @@ -53,7 +53,9 @@ noinst_PROGRAMS=test_lsd test_lsd_SOURCES=test_lsd.c -test_lsd_LDADD=liblinphone.la +test_lsd_LDADD=liblinphone.la \ + $(MEDIASTREAMER_LIBS) \ + $(ORTP_LIBS) AM_CFLAGS=$(STRICT_OPTIONS) -DIN_LINPHONE \ $(ORTP_CFLAGS) \ diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index ffb0f2b25..7f5060809 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -42,8 +42,8 @@ static void call_received(SalOp *h){ const char *from,*to; char *tmp; LinphoneAddress *from_parsed; - bool_t early_media=lp_config_get_int(lc->config,"sip","send_early_media",0); - + const char * early_media=linphone_core_get_remote_ringback_tone (lc); + /* first check if we can answer successfully to this invite */ if (lc->presence_mode==LinphoneStatusBusy || lc->presence_mode==LinphoneStatusOffline || @@ -118,10 +118,10 @@ static void call_received(SalOp *h){ }else{ /*TODO : play a tone within the context of the current call */ } - sal_call_notify_ringing(h,early_media); + sal_call_notify_ringing(h,early_media!=NULL); #if !(__IPHONE_OS_VERSION_MIN_REQUIRED >= 40000) linphone_call_init_media_streams(call); - if (early_media){ + if (early_media!=NULL){ linphone_call_start_early_media (call); } #endif diff --git a/coreapi/help/Makefile.am b/coreapi/help/Makefile.am index d4cebffd7..0cdd3f8f0 100644 --- a/coreapi/help/Makefile.am +++ b/coreapi/help/Makefile.am @@ -36,7 +36,9 @@ noinst_PROGRAMS=helloworld helloworld_SOURCES=helloworld.c -helloworld_LDADD=$(top_builddir)/coreapi/liblinphone.la +helloworld_LDADD=$(top_builddir)/coreapi/liblinphone.la \ + $(MEDIASTREAMER_LIBS) \ + $(ORTP_LIBS) INCLUDES=-I$(top_srcdir)/coreapi \ $(MEDIASTREAMER_CFLAGS) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index cee146391..f96b4ed74 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -710,14 +710,8 @@ static RtpProfile *make_profile(LinphoneCore *lc, const SalMediaDescription *md, } static void setup_ring_player(LinphoneCore *lc, LinphoneCall *call){ - const char *ringfile=lc->sound_conf.remote_ring; int pause_time=3000; - if (lc->play_file!=NULL){ - audio_stream_play(call->audiostream,lc->play_file); - pause_time=0; - }else{ - audio_stream_play(call->audiostream,ringfile); - } + audio_stream_play(call->audiostream,lc->sound_conf.ringback_tone); ms_filter_call_method(call->audiostream->soundread,MS_FILE_PLAYER_LOOP,&pause_time); } @@ -764,6 +758,8 @@ static void _linphone_call_start_media_streams(LinphoneCall *call, bool_t send_e playcard=NULL; captcard=NULL; recfile=NULL; + if (send_early_media) + playfile=NULL; } /*if playfile are supplied don't use soundcards*/ if (lc->use_files) { diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 14298990e..f2a760b4c 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -467,6 +467,8 @@ static void sound_config_read(LinphoneCore *lc) gain=lp_config_get_float(lc->config,"sound","playback_gain_db",0); linphone_core_set_playback_gain_db (lc,gain); + + linphone_core_set_remote_ringback_tone (lc,lp_config_get_string(lc->config,"sound","ringback_tone",NULL)); } static void sip_config_read(LinphoneCore *lc) @@ -3868,6 +3870,25 @@ int linphone_core_del_call( LinphoneCore *lc, LinphoneCall *call) return 0; } +/** + * Specifiies a ring back tone to be played to far end during incoming calls. +**/ +void linphone_core_set_remote_ringback_tone(LinphoneCore *lc, const char *file){ + if (lc->sound_conf.ringback_tone){ + ms_free(lc->sound_conf.ringback_tone); + lc->sound_conf.ringback_tone=NULL; + } + if (file) + lc->sound_conf.ringback_tone=ms_strdup(file); +} + +/** + * Returns the ring back tone played to far end during incoming calls. +**/ +const char *linphone_core_get_remote_ringback_tone(const LinphoneCore *lc){ + return lc->sound_conf.ringback_tone; +} + static PayloadType* find_payload_type_from_list(const char* type, int rate,const MSList* from) { const MSList *elem; for(elem=from;elem!=NULL;elem=elem->next){ diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index d94ed2d09..179002c36 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -746,6 +746,8 @@ void linphone_core_set_ring(LinphoneCore *lc, const char *path); const char *linphone_core_get_ring(const LinphoneCore *lc); void linphone_core_set_ringback(LinphoneCore *lc, const char *path); const char * linphone_core_get_ringback(const LinphoneCore *lc); +void linphone_core_set_remote_ringback_tone(LinphoneCore *lc,const char *); +const char *linphone_core_get_remote_ringback_tone(const LinphoneCore *lc); int linphone_core_preview_ring(LinphoneCore *lc, const char *ring,LinphoneCoreCbFunc func,void * userdata); void linphone_core_enable_echo_cancellation(LinphoneCore *lc, bool_t val); bool_t linphone_core_echo_cancellation_enabled(LinphoneCore *lc); diff --git a/coreapi/private.h b/coreapi/private.h index 7b6b999de..c23351595 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -320,6 +320,7 @@ typedef struct sound_config char source; char *local_ring; char *remote_ring; + char *ringback_tone; bool_t ec; bool_t ea; bool_t agc; diff --git a/gtk/linphone.h b/gtk/linphone.h index 5cbf79fb5..ed1ec9e31 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -99,4 +99,4 @@ void linphone_gtk_enable_mute_button(GtkButton *button, gboolean sensitive); void linphone_gtk_enable_hold_button(LinphoneCall *call, gboolean sensitive, gboolean holdon); void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg); - +void linphone_gtk_set_ui_config(const char *key, const char *value); diff --git a/gtk/loginframe.c b/gtk/loginframe.c index 957b26726..62092c6b2 100644 --- a/gtk/loginframe.c +++ b/gtk/loginframe.c @@ -96,6 +96,11 @@ void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg){ g_free(str); from=linphone_address_new(linphone_proxy_config_get_identity(cfg)); + if (linphone_address_get_username(from)[0]=='?'){ + const char *username=linphone_gtk_get_ui_config ("login_username",NULL); + if (username) + linphone_address_set_username(from,username); + } ai=linphone_core_find_auth_info(lc,linphone_proxy_config_get_domain(cfg),linphone_address_get_username(from)); /*display the last entered username, if not '?????'*/ @@ -152,6 +157,7 @@ void linphone_gtk_login_frame_connect_clicked(GtkWidget *button){ autologin=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(mw,"automatic_login"))); linphone_gtk_set_ui_config_int("automatic_login",autologin); + linphone_gtk_set_ui_config("login_username",username); from=linphone_address_new(linphone_proxy_config_get_identity(cfg)); linphone_address_set_username(from,username); diff --git a/gtk/main.c b/gtk/main.c index 452c7783f..bdb983c13 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -413,8 +413,10 @@ void linphone_gtk_show_about(){ struct stat filestat; const char *license_file=PACKAGE_DATA_DIR "/linphone/COPYING"; GtkWidget *about; + const char *tmp; GdkPixbuf *logo=create_pixbuf( linphone_gtk_get_ui_config("logo","linphone-banner.png")); + static const char *defcfg="defcfg"; about=linphone_gtk_create_window("about"); gtk_about_dialog_set_url_hook(about_url_clicked,NULL,NULL); @@ -436,7 +438,19 @@ void linphone_gtk_show_about(){ gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about),linphone_gtk_get_ui_config("title","Linphone")); gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(about),linphone_gtk_get_ui_config("home","http://www.linphone.org")); if (logo) gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(about),logo); - + tmp=linphone_gtk_get_ui_config("artists",defcfg); + if (tmp!=defcfg){ + const char *tmp2[2]; + tmp2[0]=tmp; + tmp2[1]=NULL; + gtk_about_dialog_set_artists(GTK_ABOUT_DIALOG(about),tmp2); + } + tmp=linphone_gtk_get_ui_config("translators",defcfg); + if (tmp!=defcfg) + gtk_about_dialog_set_translator_credits (GTK_ABOUT_DIALOG(about),tmp); + tmp=linphone_gtk_get_ui_config("comments",defcfg); + if (tmp!=defcfg) + gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about),tmp); gtk_widget_show(about); } diff --git a/gtk/support.c b/gtk/support.c index 2124d2ee8..227d5b42c 100644 --- a/gtk/support.c +++ b/gtk/support.c @@ -192,6 +192,10 @@ void linphone_gtk_set_ui_config_int(const char *key , int val){ lp_config_set_int(cfg,"GtkUi",key,val); } +void linphone_gtk_set_ui_config(const char *key , const char * val){ + LpConfig *cfg=linphone_core_get_config(linphone_gtk_get_core()); + lp_config_set_string(cfg,"GtkUi",key,val); +} static void parse_item(const char *item, const char *window_name, GtkWidget *w, gboolean show){ char tmp[64];