From 307d8b69b2a4eea8941c7ee1310050f7efc53119 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 8 Jul 2015 11:30:44 +0200 Subject: [PATCH 001/134] Fix crash in log because of NULL --- coreapi/callbacks.c | 2 +- mediastreamer2 | 2 +- oRTP | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index d80ab4e81..fddd8886a 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -111,7 +111,7 @@ void linphone_call_update_frozen_payloads(LinphoneCall *call, SalMediaDescriptio /*new codec, needs to be added to the list*/ local->streams[i].already_assigned_payloads=ms_list_append(local->streams[i].already_assigned_payloads, payload_type_clone(pt)); ms_message("LinphoneCall[%p] : payload type %i %s/%i fmtp=%s added to frozen list.", - call, payload_type_get_number(pt), pt->mime_type, pt->clock_rate, pt->recv_fmtp ? pt->recv_fmtp : NULL); + call, payload_type_get_number(pt), pt->mime_type, pt->clock_rate, pt->recv_fmtp ? pt->recv_fmtp : ""); } } } diff --git a/mediastreamer2 b/mediastreamer2 index 15bb0cb09..7494e580b 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 15bb0cb09255a73e2632b7e357d2b66060f2b013 +Subproject commit 7494e580b6127b950f29a5dff731789ed605b3a6 diff --git a/oRTP b/oRTP index ef3258413..d9377cb47 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit ef3258413d81f38033b15cb14362be26471d96d3 +Subproject commit d9377cb47177cd92d2a1971cd389221aeebcabde From 3639e8070c608af1f9977291de96515783a26859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Thu, 30 Jul 2015 12:02:32 +0200 Subject: [PATCH 002/134] Change volume percentage variable type from double to float --- coreapi/linphonecall.c | 12 ++++++------ coreapi/linphonecore.h | 32 ++++++++++++++++++-------------- gtk/incall_view.c | 8 ++++---- mediastreamer2 | 2 +- 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index c6491e788..83e146f1d 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -3203,28 +3203,28 @@ float linphone_call_get_record_volume(LinphoneCall *call){ return LINPHONE_VOLUME_DB_LOWEST; } -double linphone_call_get_play_percent_volume(const LinphoneCall *call) { +float linphone_call_get_speaker_volume_gain(const LinphoneCall *call) { if(call->audiostream) return audio_stream_get_sound_card_output_gain(call->audiostream); else { ms_error("Could not get playback volume: no audio stream"); - return -1.0; + return -1.0f; } } -void linphone_call_set_play_percent_volume(LinphoneCall *call, double volume) { +void linphone_call_set_speaker_volume_gain(LinphoneCall *call, float volume) { if(call->audiostream) audio_stream_set_sound_card_output_gain(call->audiostream, volume); else ms_error("Could not set playback volume: no audio stream"); } -double linphone_call_get_record_percent_volume(const LinphoneCall *call) { +float linphone_call_get_microphone_volume_gain(const LinphoneCall *call) { if(call->audiostream) return audio_stream_get_sound_card_input_gain(call->audiostream); else { ms_error("Could not get record volume: no audio stream"); - return -1.0; + return -1.0f; } } -void linphone_call_set_record_percent_volume(LinphoneCall *call, double volume) { +void linphone_call_set_microphone_volume_gain(LinphoneCall *call, float volume) { if(call->audiostream) audio_stream_set_sound_card_input_gain(call->audiostream, volume); else ms_error("Could not set record volume: no audio stream"); } diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index e7c9c439c..669e322bf 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -723,40 +723,44 @@ LINPHONE_PUBLIC float linphone_call_get_play_volume(LinphoneCall *call); LINPHONE_PUBLIC float linphone_call_get_record_volume(LinphoneCall *call); /** - * @brief Get playback volume. + * @brief Get speaker volume gain. + * If the sound backend supports it, the returned gain is equal to the gain set + * with the system mixer. * * @param call The call. - * @return double Percenatge of the max supported volume. Valid values are in [ 0.0 : 1.0 ]. + * @return Percenatge of the max supported volume gain. Valid values are in [ 0.0 : 1.0 ]. * In case of failure, a negative value is returned */ -LINPHONE_PUBLIC double linphone_call_get_play_percent_volume(const LinphoneCall *call); +LINPHONE_PUBLIC float linphone_call_get_speaker_volume_gain(const LinphoneCall *call); /** - * @brief Set playback volume. + * @brief Set speaker volume gain. + * If the sound backend supports it, the new gain will synchronized with the system mixer. * * @param call The call. - * @param volume New volume in percentage of the max supported volume. Valid values are in [ 0.0 : 1.0 ]. - * @return void + * @param volume Percentage of the max supported gain. Valid values are in [ 0.0 : 1.0 ]. */ -LINPHONE_PUBLIC void linphone_call_set_play_percent_volume(LinphoneCall *call, double volume); +LINPHONE_PUBLIC void linphone_call_set_speaker_volume_gain(LinphoneCall *call, float volume); /** - * @brief Get record volume. + * @brief Get microphone volume gain. + * If the sound backend supports it, the returned gain is equal to the gain set + * with the system mixer. * * @param call The call. - * @return double Percenatge of the max supported volume. Valid values are in [ 0.0 : 1.0 ]. + * @return double Percenatge of the max supported volume gain. Valid values are in [ 0.0 : 1.0 ]. * In case of failure, a negative value is returned */ -LINPHONE_PUBLIC double linphone_call_get_record_percent_volume(const LinphoneCall *call); +LINPHONE_PUBLIC float linphone_call_get_microphone_volume_gain(const LinphoneCall *call); /** - * @brief Set record volume. + * @brief Set microphone volume gain. + * If the sound backend supports it, the new gain will synchronized with the system mixer. * * @param call The call. - * @param volume New volume in percentage of the max supported volume. Valid values are in [ 0.0 : 1.0 ]. - * @return void + * @param volume Percentage of the max supported gain. Valid values are in [ 0.0 : 1.0 ]. */ -LINPHONE_PUBLIC void linphone_call_set_record_percent_volume(LinphoneCall *call, double volume); +LINPHONE_PUBLIC void linphone_call_set_microphone_volume_gain(LinphoneCall *call, float volume); LINPHONE_PUBLIC float linphone_call_get_current_quality(LinphoneCall *call); LINPHONE_PUBLIC float linphone_call_get_average_quality(LinphoneCall *call); diff --git a/gtk/incall_view.c b/gtk/incall_view.c index 4d4fb9d80..8056bb1de 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -640,9 +640,9 @@ static void volume_control_value_changed(GtkScaleButton *button, gdouble value, VolumeControlType method = (VolumeControlType)g_object_get_data(G_OBJECT(button), "method"); if(method == VOLUME_CTRL_PLAYBACK) { - linphone_call_set_play_percent_volume(call, value); + linphone_call_set_speaker_volume_gain(call, value); } else if(method == VOLUME_CTRL_RECORD) { - linphone_call_set_record_percent_volume(call, value); + linphone_call_set_microphone_volume_gain(call, value); } } @@ -651,9 +651,9 @@ static void volume_control_init(GtkWidget *vol_ctrl, VolumeControlType type, Lin g_object_set_data(G_OBJECT(vol_ctrl), "type", (gpointer)type); if(type == VOLUME_CTRL_PLAYBACK) { - gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_play_volume(call)); + gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_speaker_volume_gain(call)); } else if(type == VOLUME_CTRL_RECORD) { - gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_record_percent_volume(call)); + gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_microphone_volume_gain(call)); } g_signal_connect(G_OBJECT(vol_ctrl), "value-changed", G_CALLBACK(volume_control_value_changed), NULL); diff --git a/mediastreamer2 b/mediastreamer2 index aa8c0587e..65ed768f7 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit aa8c0587e8c8e8e86d642a5e5d01866d3c881f94 +Subproject commit 65ed768f7dde2571ffa731ad5264a93dbdc51cc1 From e001e61c586356d2b401e30a3e8ef2750895c800 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Thu, 30 Jul 2015 13:21:09 +0200 Subject: [PATCH 003/134] Add setting to enable/disable symmetric RTP for RTP IO mode. --- coreapi/linphonecall.c | 4 ++++ tester/call_tester.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 83e146f1d..f92680316 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -2505,6 +2505,7 @@ static RtpSession * create_audio_rtp_io_session(LinphoneCall *call) { int remote_port = lp_config_get_int(lc->config, "sound", "rtp_remote_port", 17078); int ptnum = lp_config_get_int(lc->config, "sound", "rtp_ptnum", 0); const char *rtpmap = lp_config_get_string(lc->config, "sound", "rtp_map", "pcmu/8000/1"); + int symmetric = lp_config_get_int(lc->config, "sound", "rtp_symmetric", 0); RtpSession *rtp_session = NULL; pt = rtp_profile_get_payload_from_rtpmap(call->audio_profile, rtpmap); if (pt != NULL) { @@ -2516,6 +2517,7 @@ static RtpSession * create_audio_rtp_io_session(LinphoneCall *call) { rtp_session_enable_rtcp(rtp_session, FALSE); rtp_session_set_payload_type(rtp_session, ptnum); rtp_session_set_jitter_compensation(rtp_session, linphone_core_get_audio_jittcomp(lc)); + rtp_session_set_symmetric_rtp(rtp_session, (bool_t)symmetric); } return rtp_session; } @@ -2684,6 +2686,7 @@ static RtpSession * create_video_rtp_io_session(LinphoneCall *call) { int remote_port = lp_config_get_int(lc->config, "video", "rtp_remote_port", 19078); int ptnum = lp_config_get_int(lc->config, "video", "rtp_ptnum", 0); const char *rtpmap = lp_config_get_string(lc->config, "video", "rtp_map", "vp8/90000/1"); + int symmetric = lp_config_get_int(lc->config, "video", "rtp_symmetric", 0); RtpSession *rtp_session = NULL; pt = rtp_profile_get_payload_from_rtpmap(call->video_profile, rtpmap); if (pt != NULL) { @@ -2694,6 +2697,7 @@ static RtpSession * create_video_rtp_io_session(LinphoneCall *call) { rtp_session_set_remote_addr_and_port(rtp_session, remote_ip, remote_port, -1); rtp_session_enable_rtcp(rtp_session, FALSE); rtp_session_set_payload_type(rtp_session, ptnum); + rtp_session_set_symmetric_rtp(rtp_session, (bool_t)symmetric); } return rtp_session; } diff --git a/tester/call_tester.c b/tester/call_tester.c index 948e8b88d..62af4d283 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -4329,7 +4329,7 @@ static void call_with_rtp_io_mode(void) { lp_config_set_string(pauline->lc->config, "sound", "rtp_remote_addr", "127.0.0.1"); lp_config_set_int(pauline->lc->config, "sound", "rtp_local_port", 17076); lp_config_set_int(pauline->lc->config, "sound", "rtp_remote_port", 17076); - lp_config_get_string(pauline->lc->config, "sound", "rtp_map", "pcmu/8000/1"); + lp_config_set_string(pauline->lc->config, "sound", "rtp_map", "pcmu/8000/1"); BC_ASSERT_TRUE((call_ok = call(marie, pauline))); if (!call_ok) goto end; From 31a77583d7cbb7645551f7d5710642ad94cd654d Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Thu, 30 Jul 2015 15:03:02 +0200 Subject: [PATCH 004/134] proxy.c: we must also UNREGISTER when being in state RegistrationInProgress so that even if registration is pending we unregister properly --- coreapi/linphonecore.c | 3 ++- coreapi/proxy.c | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 104acb0f2..00ec99070 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -5941,7 +5941,8 @@ void sip_config_uninit(LinphoneCore *lc) sal_iterate(lc->sal); for(elem=config->proxies;elem!=NULL;elem=ms_list_next(elem)){ LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)(elem->data); - still_registered|=linphone_proxy_config_is_registered(cfg); + LinphoneRegistrationState state = linphone_proxy_config_get_state(cfg); + still_registered|=(state==LinphoneRegistrationOk||state==LinphoneRegistrationProgress); } ms_usleep(100000); } diff --git a/coreapi/proxy.c b/coreapi/proxy.c index 40b860511..9d3bdc3d6 100644 --- a/coreapi/proxy.c +++ b/coreapi/proxy.c @@ -402,9 +402,10 @@ LinphoneAddress *guess_contact_for_register(LinphoneProxyConfig *cfg){ return ret; } -void _linphone_proxy_config_unregister(LinphoneProxyConfig *cfg) { - if (cfg->op && cfg->state == LinphoneRegistrationOk) { - sal_unregister(cfg->op); +void _linphone_proxy_config_unregister(LinphoneProxyConfig *obj) { + if (obj->op && (obj->state == LinphoneRegistrationOk || + (obj->state == LinphoneRegistrationProgress && obj->expires != 0))) { + sal_unregister(obj->op); } } From f2676e51017c753d038a7312643f5d864e7f1d21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Thu, 30 Jul 2015 17:50:47 +0200 Subject: [PATCH 005/134] Fix sound control in GTK+ interface --- gtk/incall_view.c | 6 +++--- mediastreamer2 | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gtk/incall_view.c b/gtk/incall_view.c index 8056bb1de..15b1396bb 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -637,11 +637,11 @@ typedef enum { VOLUME_CTRL_PLAYBACK, VOLUME_CTRL_RECORD } VolumeControlType; static void volume_control_value_changed(GtkScaleButton *button, gdouble value, gpointer user_data) { LinphoneCall *call = (LinphoneCall *)g_object_get_data(G_OBJECT(button), "call"); - VolumeControlType method = (VolumeControlType)g_object_get_data(G_OBJECT(button), "method"); + VolumeControlType type = (VolumeControlType)g_object_get_data(G_OBJECT(button), "type"); - if(method == VOLUME_CTRL_PLAYBACK) { + if(type == VOLUME_CTRL_PLAYBACK) { linphone_call_set_speaker_volume_gain(call, value); - } else if(method == VOLUME_CTRL_RECORD) { + } else if(type == VOLUME_CTRL_RECORD) { linphone_call_set_microphone_volume_gain(call, value); } } diff --git a/mediastreamer2 b/mediastreamer2 index 65ed768f7..0d7e58065 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 65ed768f7dde2571ffa731ad5264a93dbdc51cc1 +Subproject commit 0d7e5806533abe0043e10766ff985dd80c273dab From c534671e87f9c06b389491f21f1db0c9d5db278d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Fri, 31 Jul 2015 09:43:19 +0200 Subject: [PATCH 006/134] Remove @brief occurences from documentation --- coreapi/linphonecore.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 669e322bf..e9a3d9161 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -598,7 +598,7 @@ LINPHONE_PUBLIC void linphone_player_close(LinphonePlayer *obj); LINPHONE_PUBLIC void linphone_player_destroy(LinphonePlayer *obj); /** - * @brief Create an independent media file player. + * Create an independent media file player. * This player support WAVE and MATROSKA formats. * @param lc A LinphoneCore object * @param snd_card Playback sound card. If NULL, the sound card set in LinphoneCore will be used @@ -609,7 +609,7 @@ LINPHONE_PUBLIC void linphone_player_destroy(LinphonePlayer *obj); LINPHONE_PUBLIC LinphonePlayer *linphone_core_create_local_player(LinphoneCore *lc, MSSndCard *snd_card, const char *video_out, void *window_id); /** - * @brief Check whether Matroksa format is supported by the player + * Check whether Matroksa format is supported by the player * @return TRUE if it is supported */ LINPHONE_PUBLIC bool_t linphone_local_player_matroska_supported(void); @@ -723,7 +723,7 @@ LINPHONE_PUBLIC float linphone_call_get_play_volume(LinphoneCall *call); LINPHONE_PUBLIC float linphone_call_get_record_volume(LinphoneCall *call); /** - * @brief Get speaker volume gain. + * Get speaker volume gain. * If the sound backend supports it, the returned gain is equal to the gain set * with the system mixer. * @@ -734,7 +734,7 @@ LINPHONE_PUBLIC float linphone_call_get_record_volume(LinphoneCall *call); LINPHONE_PUBLIC float linphone_call_get_speaker_volume_gain(const LinphoneCall *call); /** - * @brief Set speaker volume gain. + * Set speaker volume gain. * If the sound backend supports it, the new gain will synchronized with the system mixer. * * @param call The call. @@ -743,7 +743,7 @@ LINPHONE_PUBLIC float linphone_call_get_speaker_volume_gain(const LinphoneCall * LINPHONE_PUBLIC void linphone_call_set_speaker_volume_gain(LinphoneCall *call, float volume); /** - * @brief Get microphone volume gain. + * Get microphone volume gain. * If the sound backend supports it, the returned gain is equal to the gain set * with the system mixer. * @@ -754,7 +754,7 @@ LINPHONE_PUBLIC void linphone_call_set_speaker_volume_gain(LinphoneCall *call, f LINPHONE_PUBLIC float linphone_call_get_microphone_volume_gain(const LinphoneCall *call); /** - * @brief Set microphone volume gain. + * Set microphone volume gain. * If the sound backend supports it, the new gain will synchronized with the system mixer. * * @param call The call. From 1231b834c16719a4b1cf576b6c617c6e92d39ea5 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Fri, 31 Jul 2015 15:07:57 +0200 Subject: [PATCH 007/134] gtk: add chat icon near call in main bar --- gtk/linphone.h | 2 +- gtk/main.c | 135 +++++++++++++++++++++----------------- gtk/main.ui | 29 +++++--- gtk/status_icon.c | 50 +++++++------- pixmaps/CMakeLists.txt | 38 +---------- pixmaps/Makefile.am | 6 +- pixmaps/addcall-green.png | Bin 5642 -> 0 bytes pixmaps/call_add.png | Bin 0 -> 5207 bytes pixmaps/call_start.png | Bin 0 -> 5267 bytes pixmaps/chat_start.png | Bin 0 -> 3958 bytes pixmaps/dialer-orange.png | Bin 1318 -> 0 bytes pixmaps/dialer.png | Bin 3744 -> 5152 bytes 12 files changed, 124 insertions(+), 136 deletions(-) delete mode 100644 pixmaps/addcall-green.png create mode 100644 pixmaps/call_add.png create mode 100644 pixmaps/call_start.png create mode 100644 pixmaps/chat_start.png delete mode 100644 pixmaps/dialer-orange.png diff --git a/gtk/linphone.h b/gtk/linphone.h index 992fdabc2..44f73a7f2 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -107,7 +107,6 @@ LINPHONE_PUBLIC void linphone_gtk_close_assistant(void); LINPHONE_PUBLIC LinphoneCore *linphone_gtk_get_core(void); LINPHONE_PUBLIC GtkWidget *linphone_gtk_get_main_window(); LINPHONE_PUBLIC void linphone_gtk_display_something(GtkMessageType type, const gchar *message); -LINPHONE_PUBLIC void linphone_gtk_start_call(GtkWidget *button); LINPHONE_PUBLIC void linphone_gtk_call_terminated(); LINPHONE_PUBLIC void linphone_gtk_set_my_presence(LinphoneOnlineStatus ss); LINPHONE_PUBLIC void linphone_gtk_show_parameters(void); @@ -240,6 +239,7 @@ LINPHONE_PUBLIC void linphone_gtk_logout_clicked(void); LINPHONE_PUBLIC void linphone_gtk_about_response(GtkDialog *dialog, gint id); LINPHONE_PUBLIC void linphone_gtk_show_about(void); LINPHONE_PUBLIC void linphone_gtk_start_call(GtkWidget *w); +LINPHONE_PUBLIC void linphone_gtk_start_chat(GtkWidget *w); LINPHONE_PUBLIC void linphone_gtk_uri_bar_activate(GtkWidget *w); LINPHONE_PUBLIC void linphone_gtk_terminate_call(GtkWidget *button); LINPHONE_PUBLIC void linphone_gtk_decline_clicked(GtkWidget *button); diff --git a/gtk/main.c b/gtk/main.c index 8b7c5c994..1c6e6c663 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -191,10 +191,10 @@ char *linphone_gtk_get_config_file(const char *filename){ #define FACTORY_CONFIG_FILE "linphonerc.factory" static char _factory_config_file[1024]; static const char *linphone_gtk_get_factory_config_file(){ + char* path = NULL; /*try accessing a local file first if exists*/ if (access(FACTORY_CONFIG_FILE,F_OK)==0){ - snprintf(_factory_config_file,sizeof(_factory_config_file), - "%s",FACTORY_CONFIG_FILE); + path = ms_strdup(FACTORY_CONFIG_FILE); } else { char *progdir; @@ -206,33 +206,31 @@ static const char *linphone_gtk_get_factory_config_file(){ if (basename != NULL) { basename ++; *basename = '\0'; - snprintf(_factory_config_file, sizeof(_factory_config_file), - "%s\\..\\%s", progdir, FACTORY_CONFIG_FILE); - } else { - if (workingdir!=NULL) { - snprintf(_factory_config_file, sizeof(_factory_config_file), - "%s\\%s", workingdir, FACTORY_CONFIG_FILE); - } else { - free(progdir); - return NULL; - } + path = ms_strdup_printf("%s\\..\\%s", progdir, FACTORY_CONFIG_FILE); + } else if (workingdir!=NULL) { + path = ms_strdup_printf("%s\\%s", workingdir, FACTORY_CONFIG_FILE); } #else basename = strrchr(progdir, '/'); if (basename != NULL) { basename ++; *basename = '\0'; - snprintf(_factory_config_file, sizeof(_factory_config_file), - "%s/../share/linphone/%s", progdir, FACTORY_CONFIG_FILE); - } else { - free(progdir); - return NULL; + path = ms_strdup_printf("%s/../share/linphone/%s", progdir, FACTORY_CONFIG_FILE); } #endif free(progdir); } } - return _factory_config_file; + if (path) { + //use factory file only if it exists + if (access(path,F_OK)==0){ + snprintf(_factory_config_file, sizeof(_factory_config_file), "%s", path); + ms_free(path); + return _factory_config_file; + } + ms_free(path); + } + return NULL; } LinphoneLDAPContactProvider* linphone_gtk_get_ldap(void){ @@ -484,16 +482,16 @@ void linphone_gtk_display_something(GtkMessageType type,const gchar *message){ /* draw a question box. link to dialog_click callback */ dialog = gtk_message_dialog_new ( GTK_WINDOW(main_window), - GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, - GTK_BUTTONS_YES_NO, - "%s", + GTK_BUTTONS_YES_NO, + "%s", (const gchar*)message); /* connect to some callback : REVISIT */ /* g_signal_connect_swapped (G_OBJECT (dialog), "response", - G_CALLBACK (dialog_click), - G_OBJECT (dialog)); + G_CALLBACK (dialog_click), + G_OBJECT (dialog)); */ /* actually show the box */ gtk_widget_show(dialog); @@ -501,15 +499,15 @@ void linphone_gtk_display_something(GtkMessageType type,const gchar *message){ else { dialog = gtk_message_dialog_new (GTK_WINDOW(main_window), - GTK_DIALOG_DESTROY_WITH_PARENT, - type, - GTK_BUTTONS_CLOSE, - "%s", - (const gchar*)message); + GTK_DIALOG_DESTROY_WITH_PARENT, + type, + GTK_BUTTONS_CLOSE, + "%s", + (const gchar*)message); /* Destroy the dialog when the user responds to it (e.g. clicks a button) */ g_signal_connect_swapped (G_OBJECT (dialog), "response", - G_CALLBACK (gtk_widget_destroy), - G_OBJECT (dialog)); + G_CALLBACK (gtk_widget_destroy), + G_OBJECT (dialog)); gtk_widget_show(dialog); } } @@ -531,7 +529,7 @@ void linphone_gtk_show_about(void){ GtkWidget *about; const char *tmp; GdkPixbuf *logo=create_pixbuf( - linphone_gtk_get_ui_config("logo","linphone-banner.png")); + linphone_gtk_get_ui_config("logo","linphone-banner.png")); static const char *defcfg="defcfg"; about=linphone_gtk_create_window("about", the_ui); @@ -829,7 +827,7 @@ void linphone_gtk_show_main_window(){ void linphone_gtk_call_terminated(LinphoneCall *call, const char *error){ GtkWidget *mw=linphone_gtk_get_main_window(); if (linphone_core_get_calls(linphone_gtk_get_core())==NULL){ - gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"start_call"),TRUE); + gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"start_call"),TRUE); } if (linphone_gtk_use_in_call_view() && call) linphone_gtk_in_call_view_terminate(call,error); @@ -840,31 +838,26 @@ static void linphone_gtk_update_call_buttons(LinphoneCall *call){ GtkWidget *mw=linphone_gtk_get_main_window(); const MSList *calls=linphone_core_get_calls(lc); GtkWidget *button; - bool_t start_active=TRUE; - //bool_t stop_active=FALSE; bool_t add_call=FALSE; int call_list_size=ms_list_size(calls); GtkWidget *conf_frame; - if (calls==NULL){ - start_active=TRUE; - //stop_active=FALSE; - }else{ - //stop_active=TRUE; - start_active=TRUE; + if (calls!=NULL){ add_call=TRUE; } button=linphone_gtk_get_widget(mw,"start_call"); - gtk_widget_set_sensitive(button,start_active); + gtk_widget_set_visible(button,!add_call); + + button=linphone_gtk_get_widget(mw,"start_chat"); gtk_widget_set_visible(button,!add_call); button=linphone_gtk_get_widget(mw,"add_call"); + gtk_widget_set_visible(button,add_call); if (linphone_core_sound_resources_locked(lc) || (call && linphone_call_get_state(call)==LinphoneCallIncomingReceived)) { gtk_widget_set_sensitive(button,FALSE); } else { - gtk_widget_set_sensitive(button,start_active); + gtk_widget_set_sensitive(button,TRUE); } - gtk_widget_set_visible(button,add_call); //gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"terminate_call"),stop_active); conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame"); @@ -981,6 +974,18 @@ void linphone_gtk_start_call(GtkWidget *w){ } +void linphone_gtk_start_chat(GtkWidget *w){ + GtkWidget *mw=gtk_widget_get_toplevel(w); + GtkWidget *uri_bar=linphone_gtk_get_widget(mw,"uribar"); + const char *entered=gtk_entry_get_text(GTK_ENTRY(uri_bar)); + LinphoneCore *lc=linphone_gtk_get_core(); + LinphoneAddress *addr=linphone_core_interpret_url(lc,entered); + if (addr) { + linphone_gtk_friend_list_set_chat_conversation(addr); + linphone_address_destroy(addr); + } +} + void linphone_gtk_uri_bar_activate(GtkWidget *w){ linphone_gtk_start_call(w); } @@ -1078,10 +1083,10 @@ static void linphone_gtk_new_unknown_subscriber(LinphoneCore *lc, LinphoneFriend message=g_strdup_printf(_("%s would like to add you to his/her contact list.\nWould you add him/her to your contact list and allow him/her to see your presence status?\nIf you answer no, this person will be temporarily blacklisted."),url); dialog = gtk_message_dialog_new ( GTK_WINDOW(linphone_gtk_get_main_window()), - GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, - GTK_BUTTONS_YES_NO, - "%s", + GTK_BUTTONS_YES_NO, + "%s", message); g_free(message); g_signal_connect(G_OBJECT (dialog), "response", @@ -1346,7 +1351,7 @@ static void linphone_gtk_call_updated_by_remote(LinphoneCall *call){ gboolean video_requested=linphone_call_params_video_enabled(rparams); gboolean video_used=linphone_call_params_video_enabled(current_params); g_message("Video used=%i, video requested=%i, automatically_accept=%i", - video_used,video_requested,pol->automatically_accept); + video_used,video_requested,pol->automatically_accept); if (!video_used && video_requested && !pol->automatically_accept){ linphone_core_defer_call_update(lc,call); { @@ -1356,13 +1361,13 @@ static void linphone_gtk_call_updated_by_remote(LinphoneCall *call){ if (dname==NULL) dname=linphone_address_get_username(addr); if (dname==NULL) dname=linphone_address_get_domain(addr); dialog=gtk_message_dialog_new(GTK_WINDOW(linphone_gtk_get_main_window()), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_YES_NO, - _("%s proposed to start video. Do you accept ?"),dname); + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_YES_NO, + _("%s proposed to start video. Do you accept ?"),dname); g_object_set_data_full(G_OBJECT(dialog), "call", linphone_call_ref(call), (GDestroyNotify)linphone_call_unref); - g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(on_call_updated_response), NULL); - g_timeout_add(20000,(GSourceFunc)on_call_updated_timeout,dialog); + g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(on_call_updated_response), NULL); + g_timeout_add(20000,(GSourceFunc)on_call_updated_timeout,dialog); gtk_widget_show(dialog); } } @@ -1470,7 +1475,7 @@ static void update_registration_status(LinphoneProxyConfig *cfg, LinphoneRegistr } static void linphone_gtk_registration_state_changed(LinphoneCore *lc, LinphoneProxyConfig *cfg, - LinphoneRegistrationState rs, const char *msg){ + LinphoneRegistrationState rs, const char *msg){ switch (rs){ case LinphoneRegistrationOk: if (cfg){ @@ -1541,7 +1546,7 @@ static GtkWidget *create_icon_menu(){ #ifndef HAVE_GTK_OSX void linphone_gtk_save_main_window_position(GtkWindow* mw, GdkEvent *event, gpointer data){ - gtk_window_get_position(GTK_WINDOW(mw), &main_window_x, &main_window_y); + gtk_window_get_position(GTK_WINDOW(mw), &main_window_x, &main_window_y); } #endif @@ -1643,8 +1648,8 @@ void linphone_gtk_load_identities(void){ LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)elem->data; gtk_list_store_append(store,&iter); gtk_list_store_set(store,&iter,0,linphone_proxy_config_get_identity(cfg),1, - linphone_proxy_config_is_registered(cfg) ? GTK_STOCK_YES : NULL, - 2,cfg,-1); + linphone_proxy_config_is_registered(cfg) ? GTK_STOCK_YES : NULL, + 2,cfg,-1); if (cfg==def) { def_index=i; } @@ -1707,6 +1712,7 @@ static void linphone_gtk_configure_main_window(){ static const char *home; static const char *start_call_icon; static const char *add_call_icon; + static const char *start_chat_icon; static const char *search_icon; static gboolean update_check_menu; static gboolean buttons_have_borders; @@ -1716,8 +1722,9 @@ static void linphone_gtk_configure_main_window(){ if (!config_loaded){ title=linphone_gtk_get_ui_config("title","Linphone"); home=linphone_gtk_get_ui_config("home","http://www.linphone.org"); - start_call_icon=linphone_gtk_get_ui_config("start_call_icon","startcall-green.png"); - add_call_icon=linphone_gtk_get_ui_config("add_call_icon","addcall-green.png"); + start_call_icon=linphone_gtk_get_ui_config("start_call_icon","call_start.png"); + add_call_icon=linphone_gtk_get_ui_config("add_call_icon","call_add.png"); + start_chat_icon=linphone_gtk_get_ui_config("start_chat_icon","chat_start.png"); search_icon=linphone_gtk_get_ui_config("directory_search_icon",NULL); update_check_menu=linphone_gtk_get_ui_config_int("update_check_menu",0); buttons_have_borders=linphone_gtk_get_ui_config_int("buttons_border",1); @@ -1730,16 +1737,22 @@ static void linphone_gtk_configure_main_window(){ } if (start_call_icon){ gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"start_call")), - create_pixmap (start_call_icon)); + create_pixmap (start_call_icon)); if (!buttons_have_borders) gtk_button_set_relief(GTK_BUTTON(linphone_gtk_get_widget(w,"start_call")),GTK_RELIEF_NONE); } if (add_call_icon){ gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"add_call")), - create_pixmap (add_call_icon)); + create_pixmap (add_call_icon)); if (!buttons_have_borders) gtk_button_set_relief(GTK_BUTTON(linphone_gtk_get_widget(w,"add_call")),GTK_RELIEF_NONE); } + if (start_chat_icon){ + gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"start_chat")), + create_pixmap (start_chat_icon)); + if (!buttons_have_borders) + gtk_button_set_relief(GTK_BUTTON(linphone_gtk_get_widget(w,"start_chat")),GTK_RELIEF_NONE); + } if (search_icon){ GdkPixbuf *pbuf=create_pixbuf(search_icon); if(pbuf) { diff --git a/gtk/main.ui b/gtk/main.ui index f3f1461d3..1c28c26f3 100644 --- a/gtk/main.ui +++ b/gtk/main.ui @@ -1061,6 +1061,19 @@ audio-volume-medium 0 + + + True + True + True + + + + False + True + 1 + + True @@ -1072,8 +1085,7 @@ audio-volume-medium False False 6 - end - 1 + 2 @@ -1086,22 +1098,21 @@ audio-volume-medium False True - 6 - end - 2 + 3 - + True True True - + False - False - 3 + True + 4 + end diff --git a/gtk/status_icon.c b/gtk/status_icon.c index ad94d50ad..cbee89f54 100644 --- a/gtk/status_icon.c +++ b/gtk/status_icon.c @@ -117,7 +117,7 @@ static gboolean _linphone_status_icon_desc_is_supported( gboolean *result, LinphoneStatusIconDescIsSupportedResultCb cb, void *user_data) { - + return desc->is_supported(desc, result, cb, user_data); } @@ -131,7 +131,7 @@ static void _linphone_status_icon_desc_is_supported_result_cb( const _LinphoneStatusIconDesc *desc, gboolean result, _LinphoneStatusIconDescSearchCtx *ctx) { - + if(!result) { ctx->i = g_slist_next(ctx->i); for(; ctx->i; ctx->i = g_slist_next(ctx->i)) { @@ -140,12 +140,12 @@ static void _linphone_status_icon_desc_is_supported_result_cb( &result, (LinphoneStatusIconDescIsSupportedResultCb)_linphone_status_icon_desc_is_supported_result_cb, ctx)) { - + if(result) break; } else return; } } - + if(ctx->i) { const _LinphoneStatusIconDesc *desc = (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0); ms_message("StatusIcon: found implementation: %s", desc->impl_name); @@ -153,7 +153,7 @@ static void _linphone_status_icon_desc_is_supported_result_cb( } else { g_warning("StatusIcon: no implementation found"); } - + g_free(ctx); } @@ -161,21 +161,21 @@ static gboolean _linphone_status_icon_find_first_available_impl( const _LinphoneStatusIconDesc **desc, LinphoneStatusIconDescFindResultCb cb, void *user_data) { - + gboolean result; _LinphoneStatusIconDescSearchCtx *ctx = g_new0(_LinphoneStatusIconDescSearchCtx, 1); ctx->cb = cb; ctx->user_data = user_data; - + ms_message("StatusIcon: looking for implementation..."); - + for(ctx->i=_linphone_status_icon_impls; ctx->i; ctx->i = g_slist_next(ctx->i)) { if(_linphone_status_icon_desc_is_supported( (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0), &result, (LinphoneStatusIconDescIsSupportedResultCb)_linphone_status_icon_desc_is_supported_result_cb, ctx)) { - + if(result) { *desc = (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0); ms_message("StatusIcon: found implementation: %s", (*desc)->impl_name); @@ -187,7 +187,7 @@ static gboolean _linphone_status_icon_find_first_available_impl( } g_warning("StatusIcon: no implementation found"); *desc = NULL; - + sync_return: g_free(ctx); return 1; @@ -266,15 +266,15 @@ void _linphone_status_icon_create_implementations_list(void) { gboolean linphone_status_icon_init(LinphoneStatusIconReadyCb ready_cb, void *user_data) { const _LinphoneStatusIconDesc *desc; void **ctx; - + ms_message("StatusIcon: Initialising"); - + _linphone_status_icon_create_implementations_list(); - + ctx = g_new(void *, 2); ctx[0] = ready_cb; ctx[1] = user_data; - + if(_linphone_status_icon_find_first_available_impl(&desc, _linphone_status_icon_init_cb, ctx)) { _linphone_status_icon_selected_desc = desc; g_free(ctx); @@ -317,7 +317,7 @@ static void _linphone_status_icon_impl_gtk_popup_menu(GtkStatusIcon *status_icon static void _linphone_status_icon_impl_gtk_init(LinphoneStatusIcon *si) { const char *icon_path=linphone_gtk_get_ui_config("icon",LINPHONE_ICON); - const char *call_icon_path=linphone_gtk_get_ui_config("start_call_icon","startcall-green.png"); + const char *call_icon_path=linphone_gtk_get_ui_config("start_call_icon","call_start.png"); GdkPixbuf *pbuf=create_pixbuf(icon_path); GtkStatusIcon *icon=gtk_status_icon_new_from_pixbuf(pbuf); g_signal_connect_swapped(G_OBJECT(icon),"activate", G_CALLBACK(_linphone_status_icon_impl_gtk_on_click_cb), si); @@ -375,7 +375,7 @@ static gboolean _linphone_status_icon_impl_is_supported( gboolean *result, LinphoneStatusIconDescIsSupportedResultCb cb, void *user_data) { - + *result = 1; return 1; } @@ -409,7 +409,7 @@ static gboolean _linphone_status_icon_impl_gtkosx_app_is_supported( gboolean *result, LinphoneStatusIconDescIsSupportedResultCb cb, void *user_data) { - + *result = 1; return 1; } @@ -472,10 +472,10 @@ static void _linphone_status_icon_impl_sn_start(LinphoneStatusIcon *si) { BcStatusNotifierParams *params; BcStatusNotifierToolTip *tooltip = bc_status_notifier_tool_tip_new("linphone", si->params->title, si->params->desc); BcStatusNotifierSignalsVTable vtable = {NULL}; - + vtable.activate_called_cb = _linphone_status_icon_impl_sn_activated_cb; vtable.context_menu_called_cb = _linphone_status_icon_impl_sn_menu_called_cb; - + params = bc_status_notifier_params_new(); bc_status_notifier_params_set_dbus_prefix(params, "org.kde"); bc_status_notifier_params_set_category(params, BcStatusNotifierCategoryCommunications); @@ -484,15 +484,15 @@ static void _linphone_status_icon_impl_sn_start(LinphoneStatusIcon *si) { bc_status_notifier_params_set_icon_name(params, "linphone"); bc_status_notifier_params_set_tool_tip(params, tooltip); bc_status_notifier_params_set_vtable(params, &vtable, si); - + bc_status_notifier_start(sn, params, NULL, NULL); - + bc_status_notifier_tool_tip_unref(tooltip); bc_status_notifier_params_unref(params); } static void _linphone_status_icon_impl_sn_enable_blinking(LinphoneStatusIcon *si, gboolean val) { - BcStatusNotifier *sn = (BcStatusNotifier *)si->data; + BcStatusNotifier *sn = (BcStatusNotifier *)si->data; if(val) { bc_status_notifier_update_status(sn, BcStatusNotifierStatusNeedsAttention); } else { @@ -513,16 +513,16 @@ static gboolean _linphone_status_icon_impl_sn_is_supported( gboolean *result, LinphoneStatusIconDescIsSupportedResultCb cb, void *user_data) { - + _LinphoneStatusIconDesc *desc2; void **data; const char *desktop = g_getenv("XDG_CURRENT_DESKTOP"); - + if(desktop == NULL || g_strcmp0(desktop, "KDE") != 0) { *result = FALSE; return TRUE; } - + desc2 = g_new(_LinphoneStatusIconDesc, 1); *desc2 = *desc; data = g_new(void *, 3); diff --git a/pixmaps/CMakeLists.txt b/pixmaps/CMakeLists.txt index 301a6a442..800869425 100644 --- a/pixmaps/CMakeLists.txt +++ b/pixmaps/CMakeLists.txt @@ -20,43 +20,7 @@ # ############################################################################ -set(PIXMAPS - active_chat.png - addcall-green.png - call.png - call_status_incoming.png - call_status_outgoing.png - chat_message_delivered.png - chat_message_inprogress.png - chat_message_not_delivered.png - chat.png - composing_active_chat.png - composing_chat.png - contact-orange.png - contact_starred.png - contact_unstarred.png - dialer-orange.png - dialer.png - history-orange.png - hold_off.png - hold_on.png - linphone-banner.png - linphone.icns - linphone.png - mic_active.png - mic_muted.png - notok.png - ok.png - speaker.png - startcall-green.png - startcall-small.png - status-green.png - status-offline.png - status-orange.png - status-red.png - stopcall-red.png - stopcall-small.png -) +file(GLOB PIXMAPS "*.png" "linphone.icns") install(FILES ${PIXMAPS} DESTINATION ${PACKAGE_DATA_DIR}/pixmaps/linphone diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am index 10ad6856c..b0fb73d8a 100644 --- a/pixmaps/Makefile.am +++ b/pixmaps/Makefile.am @@ -9,10 +9,10 @@ pixmap_DATA= \ status-red.png \ status-offline.png \ call.png \ - chat.png active_chat.png composing_chat.png composing_active_chat.png\ + chat.png chat_start.png active_chat.png composing_chat.png composing_active_chat.png\ chat_message_inprogress.png chat_message_delivered.png chat_message_not_delivered.png\ - contact-orange.png dialer-orange.png history-orange.png\ - startcall-green.png startcall-small.png stopcall-red.png stopcall-small.png addcall-green.png linphone.icns \ + contact-orange.png history-orange.png\ + call_start.png startcall-small.png stopcall-red.png stopcall-small.png call_add.png linphone.icns \ contact_starred.png contact_unstarred.png \ speaker.png \ call_status_incoming.png call_status_outgoing.png \ diff --git a/pixmaps/addcall-green.png b/pixmaps/addcall-green.png deleted file mode 100644 index 9de8463ca3922fafc769c233c0f76c57042fb095..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5642 zcmV+l7WL_gP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z3pYtbK~#9!q?l`rUDs8|e{1h^?sI1R9LJv6p4fF=*LG>}I8Gf;!nn{!Tp$Rzqd*{} zA!!kh0^tJ!1T$9xA|V=8CP`70wrW)gG`CXuP=XZF%+PV%_%R7-YNt-p#P)cee$UK( zp0oGj!@bw@i0uT}(vi+R=k9g>XFdMwzmBLX|A!@zmjc_ReW+b}dU}8%hKAsL&v`w` zN$sOw;l0N5hymzBee>GS9ZheF4G$W@9qOw5ouVotqN>UVIZ&j(ACuFZ?bm+uLHFeb zayB=Br5}T0as$};d)T{|lOecQ^Fc3pNuxG`08RT;0HDNjY?GnZMC8|A-}JF|v+2N^ z#I3v5Cf08bB)Qf)v!*4T4VR@?Qe+016I>LRE5y^&ZhY)de)73Dr>mncPq;JRkE3{* zT73xkoXxOFJx~K*Awo42k?$Ygd-YOpL9F)8J0!T7*YbHW&wn=YOFuud@(-=g>`kRp z+19oevSdk-CSg))V;f&BUDZqRG{tDnL{!s0j5-Om(>Q-u97hlNSg)w{q0N}AIwdY~ zE&q%m^i?7e3IK&1i$WSK1*fQz!`*c}`?K~y=5a~5&m9n+@ z+hj$0br4Ddse05qYPB+@YAKql&FXA4E0wqsYT%ZO3a+GH>lJ1I6ucxrD;zIVKGJ}3 zeSp`%0e2ryKWxN&*<@JmN+z~GA<1;gwzRecE7Hq@L@DWw52mTfY)zxNGG&>mUQLza zVr$h^+fAzvrRs=hYt(8LT;yWG2!fTR5woDezZ~zjf4J@6rOdpj7RTp@?<^ex=tb-f`h6dL`oUX`NPixo4^9-2 z<^%T~&FsbSl^`Q~Tv54M#1>AXP15}TtlomyLJqH}cAsi*Ww!XV&G1{U)JPe{+g7n|R=<1bj?%9-UsCpt zk~Wj+L7V1IR|WC^E#mABxL(0YOlc6yr-gdT3AaSwW1klc{}TxKkDI{9xVg$~OUqz`eg< zfB+J}_B3p;uuWjujW(#N4)$o=TM!En&Xyi^WqB^hVgRp7U0+!J^LvI{+ZFZ3!#Z<%y zgntwRQjdz05RCB40D&M|q)wZYBy<{}aFXllxCTEh3VjUIq2lTRM}bQK2hr;Ld2*L6NO*tHbZhP1l8?|Ay#CTafG*Hkq|C7?qiIs=q+ z41^{^q@)UfM;3XMt*e zqs=v6KDWJb;^oD7R%-|el-On^h_1?7gHWq?KWQZywE|pOfm;BM?ehjJH6U7W#Pd&+ zM#vZ4kLq`dO-rIo@Sz~~S23vJlHERL3pIDqLh56IbB1|j1 z5yM+fdDFqWK-4G_^)Md8sTkf;I8}qwz$sU+cJhrEnP-7|{Em0cToB=Woq+0~y$1vG zIs&#u0!41WE-f?&w+;UI6VNdVA1lI+FN=P}!lzUjtJ}p%ov62+gPmt#$0%$Wh5b*V za{&F3AsvCzn9_K|~>{H!8(ze>e8i^HwL_DJvF}!0GJLF1oMHR$IcbaStpl7JZ-k`-9 z5b32J44JQ&dNtX42y>H9qFAz`INl<#%~w&I1`&P~%$8p>FYTWFF`~~)2#6R0^F#ZC90RUE!7fzY-LGbYMqcUy4`#x8TS~}HCdKQv z%0AV5j{(5~{ZDql^tC82C;t=ZOJ)b$&``OL@{!yGv` z#89A(H1o+)u>ZeTm<5U<2Hq(v=RLfuF#EriVcz3E zGm}@#e`8C@mohDxgj8(Q*3$Z$!J75o`HxG_uJ55I26Tv_;P7^>4Bmd(H}mQVIM)U} z%Y=?L*!l$g=h9CbH(TSIQ~zYs`U}2H&1OirqK;6jJh^BlX-ez^M^>%BCA;N&w=VDe z_=;#0}g%Wmh8qCm#UrSuz$Y29*y?%=#CuP-zbztv&j#atu$fuAn=$;vB6h}Op4H# znN?$c{iUwC=if7v%*&}d$o$DiR<3PX`}n$4=NCHCovhS#enZK+`C<7}%(AJMbYB5+dLuuxW5*yr5qT2>)`hYv#g2&)pDU zos9FQk3J7Da`}a28^f)?qoNN_Mdv<#C75QSa)yc0S*D_MT+lHl{U}%U0wOZ6RTR`K z>bN%9NYIerRZ0raiP3|Hc9n;l)w~qk4FN8gfo+bQ1DKlnQTAMT;lOk}_A8UMvt84* zb05B(oHP^Vvy2zdQjX_9rP=63OkI;n0Aj$EnL{~&Ff1bfI=rhma;=d1ksD2p@_t`f z8{VYZIRKtH^H=LG`spoWrL&u--RO?#cx-3vqg#R12mwkNWdg&5DDQeWhRRQ?rgY+X kmzEZdqP=*%35fq001*2F_X=2a0{{R307*qoM6N<$g0fuxod5s; diff --git a/pixmaps/call_add.png b/pixmaps/call_add.png new file mode 100644 index 0000000000000000000000000000000000000000..9e2cbb18eec46f21626e5dfe7a1600b92410ab99 GIT binary patch literal 5207 zcmV-d6sYToP)StO&>uS)ve< z0AYj>5AR{$W90N^4L=L-RlQUJ&DC0@ZjPh;=*jPLSYvv5M~MFBAl0-BNIsH15C~g000{K(ZT*W zKal6<?_01!^k@7iDG<<3=fuAC~28EsPoqkpK{9 zG%|Vj005J}`Hw&=0RYXHq~ibpyyzHQsFW8>#s~laM4*8xut5h5!4#~(4xGUqyucR% zVFpA%3?#rj5JCpzfE)^;7?wd9RKPme1hudO8lVxH;SjXJF*pt9;1XPc>u?taU>Kgl z7`%oF1VP9M6Ja4bh!J9r*dopd7nzO(B4J20l7OTj>4+3jBE`sZqynizYLQ(?Bl0bB z6giDtK>Co|$RIL`{EECsF_eL_Q3KQhbwIhO9~z3rpmWi5G!I>XmZEFX8nhlgfVQHi z(M#xcbO3#dj$?q)F%D*o*1Pf{>6$SWH+$s3q(pv=X`qR|$iJF~TPzlc-O$C3+J1#CT#lv5;6stS0Uu z9wDA3UMCI{Uz12A4#|?_P6{CkNG+sOq(0IRX`DyT~9-sA|ffUF>w zk++Z!kWZ5P$;0Hg6gtI-;!FvmBvPc55=u2?Kjj3apE5$3psG>Lsh-pbs)#zDT1jo7 zc2F-(3)vyY4>O^>2$gY-Gd%Qm(Z8eYv>2*=jns=cMJ`N z4THx>VkjAF8G9M07`GWOnM|ey)0dgZR4~^v8<}UA514ONSSt1^d=-((5|uiYR+WC0 z=c-gyb5%dpd8!Lkt5pxHURHgkMpd&=fR^vEcAI*_=wwAG2sV%zY%w@v@XU~7=xdm1xY6*0;iwVIXu6TaXrs|dqbIl~?uTdNHFy_3W~^@< zVyraYW!!5#VPa`A+oZ&##pJ#z&6I1JX1dX|({#+t$SmBf*sRIyjyctwYo1}g*}U8Q zjfJH}oW)9uHjBrW+LnCF1(r>g_pF#!K2~{F^;XxcN!DEJEbDF7S8PxlSDOr*I-AS3 zsI8l=#CDr)-xT5$k15hA^;2%zG3@;83hbKf2JJcaVfH2VZT8O{%p4LO);n}Nd~$Sk z%yw*Wyz8XlG{dRHsl(}4XB%gsbDi@w7p6;)%MzD%mlsoQr;4X;pL)xc%+^yMd)ZNTI#eJ*$O)i@o$z8)e??LqN_gLa_%;TM>o2SC_kmoO6c3xRt`@J4d zvz#WL)-Y|z+r(Soy~}%GIzByR`p)SCKE^%*pL(B%zNWq+-#xw~e%5}Oeh2)X`#bu} z{g3#+;d$~F@lFL`0l@*~0lk45fwKc^10MvL1f>Tx1&sx}1}_Xg6+#RN4Ot&@lW)Km z@*DYMGu&q^n$Z=?2%QyL8~QNJCQKgI5srq>2;UHXZ>IT7>CCnWh~P(Th`1kV8JQRP zeH1AwGO8}>QM6NZadh`A)~w`N`)9q5@sFvDxjWlxwsLl7tZHmhY-8-3xPZ8-xPf?w z_(k!T5_A(J3GIpG#Ms0=iQ{tu=WLoYoaCBRmULsT<=mpV7v|~C%bs^USv6UZd^m-e z5|^?+<%1wXP%juy<)>~<9TW0|n}ttBzM_qyQL(qUN<5P0omQ3hINdvaL;7fjPeygd zGYL;pD|wL_lDQ-EO;$wK-mK5raoH_7l$?~Dqf!lNmb5F^Ft;eTPi8AClMUo~=55Lw zlZVRpxOiFd;3B_8yA~shQx|tGF!j;$toK>JuS&gYLDkTP@C~gS@r~shUu{a>bfJ1`^^VQ7&C1OKHDNXF zTgC{M|V%fo{xK_dk6MK@9S!GZ*1JJzrV5xZBjOk9!NTH<(q(S+MDf~ zceQX@Dh|Ry<-sT4rhI$jQ0Sq~!`#Eo-%($2E^vo}is5J@NVEf|KK?WT&2;PCq@=ncR8zO#GQ^T~S@VXG71P zKNocFOt)Y6$@AXlk6rM*aP%VgV%sIRORYVwJx6|U{ozQjTW{-S_si{9Jg#)~P3t?+ z@6&(!YQWWV*Z9{iU7vZq@5byKw{9lg9JnRA_4s!7?H6|n?o8ZWdXIRo{Jz@#>IeD{ z>VLHUv1Pz*;P_y`V9&!@5AO~Mho1hF|I>%z(nrik)gwkDjgOrl9~%uCz4Bzvli{bb zrxVZ0epdf^>vOB;-~HnIOV3#R*zgPai_gEVd8zYq@2jb=I>#f&AH2?aJ@Kaet zy{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2j2%D4IK#^j@W1b011mpL_t(o z!_Aj#a8=b6$A4>|NA67`P(b1U0V0Vg2qJF-3aC}Abu4PMpeSvfvEv)9)j9*cRYs8! zEwy5)GqsLZN+N2jqU{JOh5&+Cu|9Z2M0ukaNOB+Np1oH;+?xQ-Se<_Ao;h>YoW0Lp zYyJ0H>%TU9hoP!`w{?Yg>Zs)@g|pTrj#)Q(O|ny#Z{F?L*@6*sr9L;9p_@;YQ-&!` zZ|z~nnS1oGF6TOVTIHzqa}{DmQie`*#x<1;^g{_7M`b?(FyS{TJ|fHP1*PU1z1Dmi z3Nx2Yl^-`G4D*md&6w4%9GN>~U1D_Yn#2PWH$cbY(095vkr7M@%H@r2EAE5 z&hkp7)Mea0n@-fMnb6W&wh(E*1(jpqR=8p*oUjvFGXe41%F6mxR8Hs}*3?y&3_QJW zP}Q$bcw+aOF2m>&c4bTZ`)ohFS$9U;c6}ag+xmHS+o~PWmX}m@IB=_%WQaO&5l%b| zj>U~5Ge4jD0_OQ2;YfiTt=xA;V$bP>rm_=U5KSu$kGrnI^dB^!{3QA%tLfvNNZ()} zm5FN2+KleVZIPYXX4!4Gv)g{c_SP-zjXpz-Lk!pmMN#o6M1nGA_2|rc6e()PbSUq? z)0fzDI(}VZGD&?|JoAvR;h@r>jIywt&?X5qLBf=#eF<73&9p}@W3w(zEY?9ZAwlv!@PtTjYQRI!B0>uqIp)9 z9I~0y-&OzJ5#*;TJTD+OY=B2c!Gv|CQz+3FHIIj<_!4gJY5FXsBkX<03R?MFo_H3#q(@txTJGwHm+U7f=L@(XWG48Qf<`Ck_1;` z>8deKLJXiTD|Jod(#x)Y2YGY^D&rf=JxSO(;xorNAeO6Ek4gUp;KEkq%<@Hgmt6l} zJs++xe7;Eat;+lLuyh8>A~<7o>1039#R@eV;l#&CAYaCZ^|CeNGjDXyi%9MJVNVl# z8xbnW>)giC+1ckPW`!6>0VPtJA|)wOitGl;;6j1ffKj;aVPRuRkyJ6VyY+{Y@5fs^ z9Xoz~vX2R5g>yOxi{gRtq{$xUlBNmi1IA>{`65)}_{1;O`D32*SpnLi93UmB&eC11 z;(bFH(W9#biR*%l?vKg*40ecZt9jdCeQlb}~^I}(w3TKNCz~8cm zgX{nsdkBgaNk!o*#oVD7z!c4jW3aX$JAf>hlwwj^sIGPO&~Q0+(n`FhGt%$4G>=J8 zTuSFdaN}t1?!gM8E^~J|sMY7Kug_<|1#6XlU6M=Ql?6b z(~`tX{W$zR%vm4yw5tYxfmaB!WD@3j(6<8yE08bpW(YT%BAxg^o3a~t<_VDfpmzdw zr$PguPF{%HbUp@S5`xW|z6PNcONh`b?7iPOAG>Ps7f^_H70?)3b3hK_sBr$SgGuvX zJHF=t5e@*%1f5bexZ&c0v1?A7yA|Oh6ChX+rKgX|$9Ou{7#XBF-|zovE?!&w@iov> zAZ_7Bg>nToiba@W;09MfXtsro1_BF4paq~BBth}C1-ky$lS9edRo+RqVmcdvL%tY& z)p(3`IlUm3`0jlJ!WJ|V1YIuZa)^PIN2l3sN<}foP)pN7pEtjrip}$j!kvZJpuL^0_Id8mz zT&oxqp_qo#1{NNGZjX2Xe3fe(B2cXkjL$BK>{=t_-xE*&;jkPRcDeT_?~gtEwMi@N z({{G$XjYc)PB850UYY~jex!dfQYcpfa2cKIb=Z5bO~f8|-}u`eqVhPU|3q!8&sQSp&} zio-`Cw&}DZ@~D580x*6}*@cqe3YS$Y0S7eFC95w==S|BTq-kvSWj`)?Jee#b%$M}( z(XB`QQ=dODak5OZgY#9)8~U6y4vk_Ic?dLuXHZTMIH3X>0q!`qoduwFV}cE*rm0<5 zGSHN{1sV~0NsP;}boIFGT4rMW*^_bm`y-1-w#>Tvz3TpD-OHy2F4?bpqSwlI55E4( zfzgSJhL(-Uet%(|jEjbe4RdlIb2At++yEzE2y^y9uj3K+1II)6{cx}XC6aLbhU94R zSfVkNCIFjeVT%YV=t(@j1bcTzWS>zft;!WrKSF9P)y6>W8Mqa$ssnls5 z4bs3BI#mv)YPj>fiR|t7!KM9@HL02|Lx*%VJ@};kV|K;OJGZxey!rFowvRu{G=I1= zx8<{Jlslw>iBNn&yBeW4hT$TN5RV}WUBm|$kvGD9sw`|AnfdA$>dS)?Yh69~4bniJ z*0EF?bkdxOtg0x&t!2`{Kvpg@N_lAD(uZm5rGW9v(L5Ve`1+qKlV$#ugG-$mj0hh~EeQ)ct z;h}E9jGa;QB|EdtqxXk9lG|H12m8~zednAhQlg5%N`MtZ&SuyJtP~@UH;zni0`RXF z6E9L%r0H+I8`f(*m&@hcs5i&9g=06$m}pdaMTD>on2;e6XjY3i6u>EciC=6@L@H}L;I{sWn>e`cky Reyjih002ovPDHLkV1fZ?5t;x1 literal 0 HcmV?d00001 diff --git a/pixmaps/call_start.png b/pixmaps/call_start.png new file mode 100644 index 0000000000000000000000000000000000000000..77b264d72eba3492675b1088355e71adc9d577be GIT binary patch literal 5267 zcmV;E6m08>P)4Tx0C?J+Q+HUC_ZB|i_hk=OLfG)Jmu!ImA|tE_$Pihg5Rw34gb)%y#f69p zRumNxoJdu~g4GI0orvO~D7a@qiilc^Ra`jkAKa(4eR}Wh?fcjJyyu+f{LXpL4}cL8 zCXwc%Y5+M>g*-agACFH+#L2yY0u@N$1RxOR%fe>`#Q*^C19^CUbg)1C0k3ZW0swH; zE+i7i;s1lWP$pLZAdvvzA`<5d0gzGv$SzdK6adH=0I*ZDWC{S3003-xd_p1ssto|_ z^hrJi0NAOM+!p}Yq8zCR0F40vnJ7mj0zkU}U{!%qECRs70HCZuA}$2Lt^t5qwlYTo zfV~9(c8*w(4?ti5fSE!p%m5%b0suoE6U_r4Oaq`W(!b!TUvP!ENC5!A%azTSOVTqG zxRuZvck=My;vwR~Y_URN7by^C3FIQ2mzyIKNaq7g&I|wm8u`(|{y0C7=jP<$=4R(? z@ASo@{%i1WB0eGU-~POe0t5gMPS5Y!U*+Z218~Oyuywy{sapWrRsd+<`CT*H37}dE z(0cicc{uz)9-g64$UGe!3JVMEC1RnyFyo6p|1;rl;ER6t{6HT5+j{T-ahgDxt-zy$ z{c&M#cCJ#6=gR~_F>d$gBmT#QfBlXr(c(0*Tr3re@mPttP$EsodAU-NL?OwQ;u7h9 zGVvdl{RxwI4FIf$Pry#L2er#=z<%xl0*ek<(slqqe)BDi8VivC5N9+pdG`PSlfU_o zKq~;2Moa!tiTSO!5zH77Xo1hL_iEAz&sE_ z2IPPo3ZWR5K^auQI@koYumc*P5t`u;w81er4d>tzT!HIw7Y1M$p28Tsh6w~g$Osc* zAv%Z=Vvg7%&IlKojszlMNHmgwq#)^t6j36@$a16tsX}UzT}UJHEpik&ja)$bklV;0 zGK&0)yhkyVfwEBp)B<%txu_o+ipHRG(R4HqU4WLNYtb6C9zB4zqNmYI=yh}eeTt4_ zfYC7yW{lZkT#ScBV2M~7CdU?I?5=ix(HVZgM=}{CnA%mPqZa^68Xe5gFH?u96Et<2 zCC!@_L(8Nsqt(!wX=iEoXfNq>x(VHb9z~bXm(pwK2kGbOgYq4YG!XMxcgB zqf}$J#u<$v7REAV@mNCEa#jQDENhreVq3EL>`ZnA`x|yIdrVV9bE;;nW|3x{=5fsd z4#u(I@HyF>O3oq94bFQl11&!-vDRv>X03j$H`;pIzS?5#a_tuF>)P*iaGgM%ES>c_ zZ94aL3A#4AQM!e?+jYlFJ5+DSzi0S9#6BJCZ5(XZOGfi zTj0IRdtf>~J!SgN=>tB-J_4V5pNGDtz9Qc}z9W9tewls;{GR(e`pf-~_`l(K@)q$< z1z-We0p$U`ff|9c18V~x1epY-2Q>wa1-k|>3_cY?3<(WcA99m#z!&lx`C~KOXDpi0 z70L*m6G6C?@k ziR8rC#65}Qa{}jVnlqf_npBo_W3J`gqPZ95>CVfZcRX1&S&)1jiOPpx423?lIEROmG(H@JAFg?XogQlb;dIZPf{y+kr|S? zBlAsGMAqJ{&)IR=Ejg5&l$@hd4QZCNE7vf$D7Q~$D=U)?Nn}(WA6du22pZOfRS_cv~1-c(_QtNLti0-)8>m`6CO07JR*suu!$(^sg%jf zZm#rNxnmV!m1I@#YM0epR(~oNm0zrItf;Q|utvD%;#W>z)qM4NZQ9!2O1H}G>qzUQ z>u#*~S--DJy=p<#(1!30tsC);y-IHSJr>wyfLop*ExT zdYyk=%U1oZtGB+{Cfe4&-FJKQ4uc&PJKpb5^_C@dOYIJXG+^@gCvI%WcHjN%gI&kHifN$EH?V5MBa9S!3!a?Q1 zC*P)gd*e{(q0YnH!_D8Bf4B7r>qvPk(mKC&tSzH$pgp0z@92!9ogH2sN4~fJe(y2k zV|B+hk5`_cohUu=`Q(C=R&z?UQbnZ;IU-!xL z-sg{9@Vs#JBKKn3CAUkhJ+3`ResKNaNUvLO>t*-L?N>ambo5Q@JJIjcfBI^`)pOVQ z*DhV3dA;w(>>IakCfyvkCA#(acJ}QTcM9%I++BK)c(44v+WqPW`VZ=VwEnSWz-{38 zV8CF{!&wjS4he^z{*?dIhvCvk%tzHDMk9@nogW_?4H~`jWX_Y}r?RIL&&qyQ|9R_k ztLNYS;`>X_Sp3-V3;B!BzpiR9M5!mwS*^)s@D7 zYoEux=ia92009Fu*h1sP2d}1EXj&0xLQGPbgqX%?f?z^SDp7G9Yf?28@g`xSsZuLU z5-AfClTwDFTO*DV6DvW5e$XHgL8CxJ2W*~>2z2*-oX1}C$88=uL!{=fSyiXbuCrFH zZ?A8!v%cDJ0j8>4SX}v?J10D+a7|bGeQ|R;gEMP6f428~%bQp(Ev3u2a@Q5|@ySZZ z#>4Et`mmnT-|-E3QstcZ~&#vX(hcaf7E-@d* z!s4gr%a>Zyh6j*K_hQ;#IP06$m9B5>O#f)ku1t5+mh>$E|FEH4o}91x>tDdQwSj%U zws7Y269;}cs=DIiA02IKDypQ)KOF8a9*p+CHxM2^(tPoE`p!*p%{xO)+!KA$pm(an zHBLq{wqTDY`E+e((}}+93S?j@D(|CP;l?#^Q7_WjggE`#?6^_YO{4wV=IYdhX=A;b zabx^ThSgS1rqUnE?tz{3oZ6+mVfVqe!|pwA7rQs?4|hMWs#AfxoPf*Kf(^0aV6Z&e zR#*7u{I!^8K93~_axS=Qjl_=CrjG1I)(daS_(Q%i%8bAC;)+R(3nntgxrDLa1gg^$ zwU`uie`&Y$7Wc}bq=!SvK6?6gb0j=~8jBc6LKH>Cq1*{dLwkK;3yKUPV@`vQ?{y`1 ztj_LA&n3`x;+ThB^)JnMS+afweiGnmnzYH}UGYwYS{MjzAt~BCp;KTW?57Y9kl5I2 zjM@+t5D^Rp#N*{e?Hi~_CV#fmTok-MNA_38I(t+4CX<%m*jQb0L^EDid>b5hO74HU zzSrTKbhkv_(NdC}=rj3rG0u;Sl44E1l%JXp`>!u)VX~7JqoJrKTCNk61ks4~sgp@z z+IDrfPbZqM@Qi?b`&Iba3~1`gTu(}$(+CGgamC*?!i;(7QxmU!Vo7#o=|bkfoGqEj zk<~kl&*#K2!bT`sW?6)HNzBb{4FfOUq?px$1u&))nY}qZR$YA%iz^NVV)=2Ykkmgt z<;};IWLK8%iI&Q0U2P(b%zb*FsOsSJeR-nzxcTRoXBdE2>hn7~t}1*ziEN`SvQj+y z!~rZ8hvE44_l=t}H>?)yx3(gxAhX*l97!k3#ATVaKrCNrZ^*9#_`D)h_z%9v&H6V+ z764!SiAc?D%FY&8vk>JGm{p&d>w5aALal~aaWUe_yYVUgV(09_%fliOqeH`w;Bcz~ zlIZgGhWx5&tvI}dtOZH~Hw$-_;hS5|Ke&E*hw67z=$eIS)p(d$h0|G|f5}G76=WAK zMibOVI?Sz*<&7INBagd^G;K+LSv+}CE&JS*ojPPp-2eAO6I!|gUqt=HQo3i84WAev z%ClcUKRBZQmNmEFv@RfN?99|T75cm_F;W5JA{z4b^b!A8MuqFd1>o7@39s016Q`vs zTjgZs$KuHbH;{)OzS^r_e{JR2ft9-;a9S6TT)Q5pV^)5v&9hQGzycN#kA;PiVIWPf z2Cs?FxjBa-{{e=_kQ%v`-~NR<+A z0Vbj-LLRivDAWKY5qY=bis>4;u5U6j4?q)?1k^IpIJ$D=4sXIBxcsl+iYzGN%zG9y z?^(=(A`Xgh2eNT`-w7M*&z(Tf1Pf%<>SYEctBPPXHSpq_f)Rsd_+WF%>HMlvX*`<& z;NB0EHwccPy*mT9|6`e;|Dqr`_~*by(3!Um=CQIi?pH7vlNK;$tU>4_!ABVBjp!3B z5z6awwzjfjseV6-^z|!tVpx8TXqRU^pJ<1s&DpueW2FvP!1!{hi9P4!zPxIYRR~80iM9Y(J)7UAkM$v`yuz zc26oZkoQuPBxP5r+OLJw#B(>XTmRo7scFfCw4KuFK) z419pkZ2zclm0={16cm)*(zvCfLBw{6QN+66-8iG~-x{_~cQ@BP$M)R-3$dIXJQk=RkKQ(>J5m1Pk|oeU<)^IUsF;U58JZwjX2vP}$#aF9YW z)dkpD^?n@PES|oO z$41B1S8#aI2$k6Kk%@-^34xVoj=*rcNeL*Z^0f8clje;XrO<}@6XQ4o9v&5$p})%g zWpTsLFZo0A?^{>69Sy||Nxt|wjae*4*4kK0HUg8zF)pJKrif54h5!$oj2H|ehVG=m z!uE#33+3vwpOG{-+M*`n@s5VNy8W~H$edV)bX-+j=f`F~AS^JQN_)dVaCDydhEN)^kM($k?$MzwQELMS{Hc#*vQ@=Jo0pn-(~s~KuO&In=%{U1IFoGmN37bEAU2&E`raQWA1j{rH*N}i zahWL&Poh+d1GdDrg6CYbbz1+xeJ>6E3}4hm@|65WQOI>K`e{w&q_2)~Cj_IN8pZ}S zuO2NN`t_dtj<#dTf9+jdeRuzd>A=-ng5inE6vx+vHfHgl)}SG;Sl7L=b9&#=&pvJB zxf`rXvo_Nzt=y>d<#?`^@64OSk#TR_FfORg)mC14`A{>QeFJZCFy7nS)Bo14w@ck` z9VqPmOK)kbjkM~u%jU45vBG>$mOb^m!;k;bjl8d&(i3-=$d8UpacnH%*jU2rG>9Te zY3z$pq%6^DF&g6#;bRaS&=S~$XGHV|zU%#Y)Q&!x|6Acfi8ZH?lMm=uPIKfWN2|7o z;;}&H>uYq?RvXBp!Z9K8DdZS9{B5$QQgP)j6cNQzdM;6 zuK^u_;9}`RI4a7)IAMnhJzX;k1%OZg$wS|W%nNs7xlqe#?tPciNB{b-{9ml@RsR3m Ze*A(O002ovPDHLkV1nvUQosNJ literal 0 HcmV?d00001 diff --git a/pixmaps/chat_start.png b/pixmaps/chat_start.png new file mode 100644 index 0000000000000000000000000000000000000000..3de67321139c548106211abd9936a1b5ff4626e8 GIT binary patch literal 3958 zcmV-+4~g)JP)Oz@Z0f2-7z;ux~O9+4z06=<WDR*FRcSTFz- zW=q650N5=6FiBTtNC2?60Km==3$g$R3;-}uh=nNt1bYBr$Ri_o0EC$U6h`t_Jn<{8 z5a%iY0C<_QJh>z}MS)ugEpZ1|S1ukX&Pf+56gFW3VVXcL!g-k)GJ!M?;PcD?0HBc- z5#WRK{dmp}uFlRjj{U%*%WZ25jX z{P*?XzTzZ-GF^d31o+^>%=Ap99M6&ogks$0k4OBs3;+Bb(;~!4V!2o<6ys46agIcq zjPo+3B8fthDa9qy|77CdEc*jK-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S z1Au6Q;m>#f??3%Vpd|o+W=WE9003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG z3;bXU&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyU zp1~-*fe8db$Osc*A=-!mVv1NJjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3 zJ#qp$hg?Rwkvqr$GJ^buyhkyVfwECO)C{#lxu`c9ghrwZ&}4KmnvWKso6vH!8a<3Q zq36)6Xb;+tK10Vaz~~qUGsJ8#F2=(`u{bOVlVi)VBCHIn#u~6ztOL7=^<&SmcLWlF zMZgI*1b0FpVIDz9SWH+>*hr`#93(Um+6gxa1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HIG_C zt)aG3uTh7n6Et<2In9F>NlT@zqLtGcXcuVrX|L#Xx)I%#9!{6gSJKPrN9dR61N3(c z4Tcqi$B1Vr8Jidf7-t!G7_XR2rWwr)$3XQ?}=hpK0&Z&W{| zep&sA23f;Q!%st`QJ}G3cbou<7-yIK2z4nfCCCtN2-XOGSWo##{8Q{ATurxr~;I`ytDs%xbip}RzP zziy}Qn4Z2~fSycmr`~zJ=lUFdFa1>gZThG6M+{g7vkW8#+YHVaJjFF}Z#*3@$J_By zLtVo_L#1JrVVB{Ak-5=4qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>={htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMoS*2K2 zT3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+pe~4wtZn|Vi#w(#jeBd zlf9FDx_yoPJqHbk*$%56S{;6Kv~mM9!g3B(KJ}#RZ#@)!hR|78Dq|Iq-afF%KE1Brn_fm;Im z_u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h%dBOEvi`+x zi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2eM~nS7yJ>iOM;atDY;(?aZ^v+mJV$@1Ote z62cPUlD4IWOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGA zUct(O!LkCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}Ti zncS4LsjI}fWY1>OX6feMEuLErma3QLmkw?X+1j)X-&VBk_4Y;EFPF_I+q;9dL%E~B zJh;4Nr^(LEJ3myURP{Rblsw%57T)g973R8o)DE9*xN#~;4_o$q%o z4K@u`jhx2fBXC4{U8Qn{*%*B$Ge=nny$HAYq{=vy|sI0 z_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq?ybB}ykGP{?LpZ? z-G|jbTmIbG@7#ZCz;~eY(cDM(28Dyq{*m>M4?_iynUBkc4TkHUI6gT!;y-fz>HMcd z&t%Ugo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P` z?ZJ24cOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60 z|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^Ra2OkX|DH7J2A^-pcs7XXY zR9M5kSKn_GRTTctxp#MGXS>Di!mg2|8iQgJW6(-WOh}C3!M^!Kz$Xm&h>tw*HyHi} z`74aX#s`U@2?>G~u}$5UcA@QLYiDP7rn7hMJw9}|)CyQbw4XAtDeF08o}?ZZnQEV@!{k)32^x6#&rIT2@L`0ldM? z?=kZjGYbH>L)T6uwCnx9KrjGe=9HP6%=|kM%>YP0KYt#&R;zhLbYg65?Bi;+`l07} zRc3YooIIg`cIlNp8W#WzKpA6tolfUrx6}Dyb!8>~?A*D9udiK8wC8zcrPNftUjKA* zaaeQMcRWmB)`?UtV4=t*xzXD5bhzT)g;D=ks~b^Stp=sq{*v zQpr~;m4E)~KEwe4_`VNkZMofUj}!AaGnYk#G&8ebEOMbxc&>sM6{Qr4zAr`JCnhQo zpotmWk5s!~hMpzPIrL+y2Ox3QX3knLiNHB0;+zZ{~9sTU9ca?X*6kcdF{dcD*+*9^n3-E20; zI-L%f8Tou3#bObKLIFxChzOD-L8sG!F=nf=?18btnJmi?MG?XUWBnx=6WhNN4q zRt(?{GryM0<=*vue~jrKLZc&E_xG+T}u_5HoXbckuQHj{yK?W@2U-VMx)V~ot>SYnVI><7&CwT`0?0U zo7Y;C)_S|lrfG^S%OE18l%oE3$+FCKI-On|$5B3?j|OA^)0|j2bLPzZr%#{$vRCdyEG{l??C34@y!OBA9^rN$(pqb>))p^Q)_?(>HG1`0o1k>-Pb~d%Pp;DRp#~WrKsdR;!I2J$iIfDfL04 z(Fm89mv4#4k6{?zou8jy1&{#1)YKG$Ai(Y0xBqu4R;yLCTCIQ4gj1(Zd84DFFV||d zkF?hBbi3W9g@uKmZr;3kA3!*)0=3>&2RsaA1 literal 0 HcmV?d00001 diff --git a/pixmaps/dialer-orange.png b/pixmaps/dialer-orange.png deleted file mode 100644 index 2d715eac0c2c061fe1cb1075462d8497437444ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1318 zcmV+>1=;$EP)P000;W1^@s654Bdt00001b5ch_0Itp) z=>Px#32;bRa{vGh*8l(w*8xH(n|J^K00(qQO+^RV1P>GoBo;~)$p8QZxJg7oR7l6I zmR(F#M-<2Zb3bP8+`TK{N<>ivK`Yj;q_$lWTbFK$rKYwCNhM9w#@YuU8;GfiM$-a5 zSks5LQE{7A+Zat7qphvJNIwX+1{O`#3JR@AUKQ~`CrL*tgQso0j7t+Y~lW=@~_a& z^Z7}3+e%Pg09E&aYMaQ*8+?->VjU_W0CE!5Qv#|B1ys!k%1(gW++a306b-i=SvYq$ z>H5G>@J8WWo@UeeJSZ%WIA8aXSaK(T&miE0ECWmjD9a+B$L+k!Q# zo1-c7{eC}5O-UYhJEF@o#`=|EW!k{Oj?v!rxv5KLrc47_Q9$Al0Rcct0052Gll@)! z6CfWK?Sjg-fN6k20j449n0KRYke+J^MpwSDBq#kDIRI$(#y#hI{Tp6fw%$s#z6K2B^9P;YQ{Ccaki^`#H>48O$OcxixSsV3-j{ z20*nukH_BrRKYcvvyI&UW^#gi3#DxX^M+GSe4twg5a!Ut}iac ziGFo^Fc{pqZQC|H?venYb#?hykmZDAb2}UG9=$f}NdOX%vvswH+T5E56Bn-;;9}Gx z4t(Hz5)d*@$BN?U<>F;h~_M+!^wCPBKIMFJ4tvf=}D<4$qrs1Qvj6Y>fF6_@2NelJc|0Kf^LQ3&Ch@;&i-y}8`5|5@a?%?&b!#7W~5 zf$BbR+bK}p1_IqmbTsw1@pe`kwe}396)9Frh(PsPAIGj zl({S^xiyjRJMZ!1$IS=I6<=j#Wq+BG(cB*|b@}Uq8ccg?48p9<;u10IOC|z3Iy%tX z+xyBxAu&*o-EPmi+}U&Zz?l}b4UPh~Bx^#)C$`Eb0m9)hPM|}u zLf3WZx()ycg+ee*6Ots25JH|UD=TY#tiKhn*PAJXSOZ|G5Mmx7!~if1ph1$P-6bU@ c;qmeR0$RVA-Hr6DdH?_b07*qoM6N<$f_VvE%K!iX diff --git a/pixmaps/dialer.png b/pixmaps/dialer.png index 5da3ad70dee838f952fbee2ce3ad1cef729f9c24..bb9747a90644cf96aa2fdf7ca7aafd49e87c9a10 100644 GIT binary patch literal 5152 zcmV+*6yNKKP)4Tx0C?J+Q)g6D=@vcr-tj1^HV42lZa2jn55j)S9!ipu-pd!uXCy!YnK{> z2n?1;Gf_2w45>mM5#WQz#Kz&|EGkvK~TfD`~gdX7S-06<0ofSs5oQvjd@0AR~wV&ec% zEdXFAf9BHwfSvf6djSAjlpz%XppgI|6J>}*0BAb^tj|`8MF3bZ02F3R#5n-iEdVe{ zS7t~6u(trf&JYW-00;~KFj0twDF6g}0AR=?BX|IWnE(_<@>e|ZE3OddDgXd@nX){& zBsoQaTL>+22Uk}v9w^R97b_GtVFF>AKrX_0nHe&HG!NkO%m4tOkrff(gY*4(&JM25 z&Nhy=4qq+mzXtyzVq)X|<DpKGaQJ>aJVl|9x!Kv}EM4F8AGNmGkLXs)P zCDQ+7;@>R$13uq10I+I40eg`xs9j?N_Dd%aSaiVR_W%I$yKlkNCzL=651DUOSSq$Ed=-((3YAKgCY2j1FI1_jrmEhm z3sv(~%T$l4UQ>OpMpZLYTc&xiMv2YpRx)mRPGut5K^*>%BIv?Wdil zy+ylO`+*KY$4Vz$Cr4+G&IO(4Q`uA9rwXSQO+7mGt}d!;r5mBUM0dY#r|y`ZzFvTy zOmC;&dA;ZQ9DOhSRQ+xGr}ak+SO&8UBnI0I&KNw!HF0k|9WTe*@liuv!$3o&VU=N* z;e?U7(LAHoMvX=fjA_PP<0Rv4#%;!P6gpNq-kQ#w?mvCS^p@!_XIRe=&)75LwiC-K#A%&Vo6|>U7iYP1 zgY$@siA#dZE|)$on;XX6$i3uBboFsv;d;{botv|p!tJQrukJSPY3_&IpUgC$DV|v~ zbI`-cL*P;6(LW2Hl`w1HtbR{JPl0E(=OZs;FOgTR*RZ#xcdGYc?-xGyK60PqKI1$$ z-ZI`wBrnsy*W_HW0Wrec-#cqqYFCLW#$!oKa ztOZ#u3bsO~=u}!L*D43HXJuDrzs-rtIhL!QE6wf9v&!3$H=OUE|LqdO65*1zrG`sa zEge|qy{u|EvOIBl+X~|q1uKSD2CO`|inc0k)laMKSC_7Sy(W51Yk^+D%7VeQ0c-0E zRSM;Wee2xU?Ojh;FInHUVfu!h8$K0@imnvf7nc=(*eKk1(e4|2y!JHg)!SRV_x(P}zS~s+RZZ1q)n)rh`?L2yu8FGY z_?G)^U9C=SaqY(g(gXbmBM!FLxzyDi(mhmCkJc;eM-ImyzW$x>cP$Mz4ONYt#^NJz zM0w=t_X*$k9t}F$c8q(h;Rn+nb{%IOFKR-X@|s4QQ=0o*Vq3aT%s$c9>fU<%N829{ zoHRUHc}nwC$!Xf@g42^{^3RN&m7RTlF8SPG+oHC6=VQ*_Y7cMkx)5~X(nbG^=R3SR z&Rp`ibn>#>OB6F(@)2{oV%K?xm;_x?s~noduI3P8=g1L-SoYA z@fQEq)t)&$-M#aAZ}-Lb_1_lVesU-M&da;mcPH+xyidGe^g!)F*+boj)jwPQ+}Q8j ze`>&Yp!3n(NB0JWgU|kv^^Xrj1&^7J%Z3ex>z+71IXU7#a{cN2r$f(V&nBK1{-XZN zt``^}my^G3e5L*B!0Q>W+s4Ai9=^$VGcjKDR{QP2cieX!@1x%j zPvm?ce<=TG`LXp=(5L&88IzO$1Ou4!{1CdwXaE2J24YJ`L;(K){{a7>y{D4^000Sa zNLh0L01FcU01FcV0GgZ_00007bV*G`2j2%D4IL2(;y^wC00~@4L_t(o!>yNFtXP=K})Nh=DK>L>}JX%eSS9VgDQT_-;0_!8gGW$(S#oIely*h$0#NHCL$b-Ru~Gn7_QDA*njoX@i)9B zVgfV^b(2L;mMyoy8s;)EA`oWAFbhn{&X{5t2w(rFf4Fk(bHBWK1Ar0W-dvNh?}6A4 z+M`edv{H;Dy>`dc^oy5ZHTU~>fF29tZp1987!Qn>Q>5oE!`Y@cm4xrj=wVCqvU-S? zT5mu-@%w-9=nKI57yuZcq;{sM%}+yoMoRNQl7yrr@h{PpW#D+EW}Bqn%uTaDrJMlU zZd}T8goeO{>6uM*ZTn+N={IsS(U+32DWz@N(eTL4OII%fCxABJs)ZaAh6e?YN&tc} z0FVw+J^%S1{Uonmx-={4P(=EHl*agLHO6;F7rUZiN{S(&`yyg*&P}A0Zsnk858Ivx z7CrgQ%|9bT$>+<1@l!p%tJ7 z>a7w8a44-AAHfRnRvR2tYR!lj!RH5aL+fI58T{{EDfhX$XH>u$>P1;^roxSO)JAnZ ziv8>m`Vk=;m(sbE@3Q`Giy=n66>m8%PV3-vAM`z!_YqLlVrdGTHEcB=6mf>A*6dLy2 zeIKV!y#>IbCmxBx`k<%lGnw`5)!~)l*&8PdgHpLUF4wNPT{=Iw&@Wxr*e0jk&Cbq_ zE?m0M9eUspM_)h6mQDL~b9gq_ZqPT%*rm!tSC4KHKg5`B0Q(1q1S8PIQH@@t9uU|oCO}NweGOJ31o%VLUFO;V++TRE$=yef6BvrH3TSX*LHC%HkUoH4gfpe7N+W?)z5u?;e|I&%pg4wius6yfw5k&r|Y`i^INxV?$ci{sq8_qyU9&f#F$dGZYo{- zaO<)MxB{%jEdX_VYJkLlj|@_7##lEFZj)$yl`$!5s2Mv&ijCX4on^pNAAJ4;Ld1GX z={Vv*mUh`_V{1E879HvQm!5pe_wIjS6d@UCKggCe8tC9|B-$75rr>z8CU#iwQvsUd29vSlmc`2lx}JcUO6?8h`=j zJe8LQP;ec&@^mq0YunCa_a)j;+(ddir@VaYyKnE{y=-MIb!b^Y4n@?g_PcGR0!-~B-4Qi3`I zG=eTtUVZSfC)$hWj&bh$r^!v0Qc5bNc>m)+6iI2b+PaO-TQ}-dP_0lGDdo(uqu*^0 z9y&Y?-d&5f827De>{j;m$$szT%isC-%Fdm4r^)H5?Fwx#u9FbSsK|9Fygb#PIeqli z{~SwkDP_#Q0aL?n_~W&d$6U&twuR)BB1gpY{igpF;N4N%ZWa6zXg8s3Q-u=Jd+Vdo zlRx#dhhIFk&}Bl8OL`)ul%z4QYwc34<&|rzm;Vk}1if#^Hq);4Ctd06%EEA^jG&MeVV6Q*-N;RTCDgoCx|qR5va20!39VdQU0nf4IbXK)wc3?ufr(r4 zQqi!>`5M5W9TcVXU0hGeo-B~7U8>61I<*GS>-Chq(FH4mL_{?9DAn4PI%Z)F zMWl$dlhYTM94>fkWC8IC> z+1eMM-RlRl@lOCh2W$r>45N)v?733>SHO9|x$8OrdQF-dw(TcMS3Wx$4Y#;floCyD z$ZBrd>07}0Qp#qDPt{T$t{yu6G(guRrO2f6BdHzstE% zgf1gr{-fXdf+Mu1&_YC7%Q@3DO_w4SNmof)-n4c0YCC8Vx+ZB|xX9Jm)wOi4^_*On zhVPwO9bEZ7`M^VuaQwAbXiHfO#gUYA*AqLd5%x$)5uxYgx(pBzmn3~v^4qpIOKKG= zl9nU%#*wGLzP@kY!Co}^W#CC*1}TASwTIX*NnTpM))s(#{Iyp&^zdN@r3`A+Z{`#) zM4ITA5LT+m74W*p6D`#~pWtsMnmidP8d+4=Qe0aRHvyu_BbjeR*7Hr%Bq>yFx~`P2 zE9)XwJ~Zwec<2!hJ$#t|Del_3i~p|}|5a@){y`xB$52G*f0K91L;edeT5XX44T4ty O00004Tx07wm;mUmPX*B8g%%xo{TU6vwc>AklFq%OTkl_mFQv@x1^BM1TV}0C2duqR=S6Xn?LjUp6xrb&~O43j*Nv zEr418u3H3zGns$s|L;SQD-ufpfWpxLJ03rmi*g~#S@{x?OrJ!Vo{}kJ7$ajbnjp%m zGEV!%=70KpVow?KvV}a4moSaFCQKV= zXBIPnpP$8-NG!rR+)R#`$7JVZi#Wn10DSspSrkx`)s~4C+0n+?(b2-z5-tDd^^cpM zz5W?wz5V3zGUCskL5!X++LzcbT23thtSPiMTfS&1I{|204}j|3FPi>70OSh+Xzlyz zdl<5LNtZ}OE>>3g`T3RtKG#xK(9i3CI(+v0d-&=+OWAp!Ysd8Ar*foO5~i%E+?=c& zshF87;&Ay)i~kOm zCIB-Z!^JGdti+UJsxgN!t(Y#%b<8kk67vyD#cE*9urAm@Y#cTXn~yERR$}Y1E!Yd# zo7hq8Ya9;8z!~A3Z~?e@Tn26#t`xT$*Ni)h>&K1Yrto;Y8r}@=h7ZGY@Dh9xekcA2 z{tSKqKZ<`tAQQ9+wgf*y0zpVvOQ<9qCY&Y=5XJ~ILHOG0j2XwBQ%7jM`P2tv~{#P+6CGu9Y;5!2hua>CG_v;z4S?CC1rc%807-x z8s$^ULkxsr$OvR)G0GUn7`GVjR5Vq*RQM{JRGL%DRgX~5SKp(4L49HleU9rK?wsN|$L8GCfHh1tA~lw29MI^|n9|hJ z^w$(=?$kW5IibbS^3=-Es?a*EHLgw5cGnhYS7@Kne#%s4dNH$@Rm?8tq>hG8fR0pW zzfP~tjINRHeBHIW&AJctNO~;2RJ{tlPQ6KeZT(RF<@$~KcMXUJEQ54|9R}S7(}qTd zv4$HA+YFx=sTu_uEj4O1x^GN1_Ap*-Tx)#81ZToB$u!w*a?KPrbudjgtugI0gUuYx z1ZKO<`pvQC&gMe%TJu2*iiMX&o<*a@uqDGX#B!}=o8@yWeX9hktybMuAFUm%v#jf^ z@7XBX1lg>$>9G0T*3_13TVs2}j%w#;x5}>F?uEUXJ>Pzh{cQ)DL#V?BhfaqNj!uqZ z$0o;dCw-@6r(I5iEIKQkRm!^LjCJ;QUgdn!`K^nii^S!a%Wtk0u9>cfU7yS~n#-SC zH+RHM*Nx-0-)+d9>7MMq&wa>4$AjZh>+#4_&y(j_?>XjW;+5fb#Ot}YwYS*2#e16V z!d}5X>x20C`xN{1`YQR(_pSDQ=%?$K=GW*q>F?mb%>QfvHXt})YrtTjW*|4PA#gIt zDQHDdS1=_wD!4lMQHW`XIHV&K4h;(37J7f4!93x-wlEMD7`83!LAX));_x3Ma1r4V zH4%>^Z6cRPc1O{olA;bry^i*dE{nc5-*~=serJq)Okzw!%yg_zYWi`#ol25V;v^kU#wN!mA5MPH z3FFjqrcwe^cBM>m+1wr6XFN|{1#g`1#xLiOrMjh-r#?w@OWT$Wgg6&&5F%x&L(6hXP*!%2{VOVIa)adIsGCtQITk9vCHD^izmgw;`&@D zcVTY3gpU49^+=7S>!rha?s+wNZ}MaEj~6Hw2n%|am@e70WNfM5(r=exmT{MLF4tMU zX8G_6uNC`OLMu~NcCOM}Rk&(&wg2ivYe;J{*Zj2BdTsgISLt?eJQu}$~QLORDCnMIdyYynPb_W zEx0YhEw{FMY&}%2SiZD;WLxOA)(U1tamB0cN!u@1+E?z~LE0hRF;o>&)xJ}I=a!xC ztJAA*)_B)6@6y<{Y1i~_-tK`to_m`1YVIxB`);3L-|hYW`&(-bYby`n4&)tpTo+T< z{VnU;hI;k-lKKw^g$IWYMIP#EaB65ctZ}%k5pI+=jvq-pa_u{x@7kLzn)Wv{noEv? zqtc^Kzfb=D*0JDYoyS?nn|?6(VOI;SrMMMpUD7()mfkkh9^c-7BIrbChiga6kCs0k zJgIZC=9KcOveTr~g{NoFEIl)IR&;jaT-v#j&ZN$J=i|=b=!)p-y%2oi(nY_E=exbS z&s=i5bn>#xz3Ke>~2=f&N;yEFGz-^boBexUH6@}b7V+Mi8+ZXR+R zIyLMw-18{v(Y+Dw$g^K^e|bMz_?Y^*a!h-y;fd{&ljDBl*PbqTI{HlXY-Xb9SH)j< zJvV;-!*8Cy^-RW1j=m7TnEk!37H;EY>l^+pYP^6XM(e4M)(QTR*<{~{@c5G-~WK7csy`mrzKiJ*`4S}FGI z`SYWhOs1OXN`DzoB)b^ntlc_fsgyr*a1d4m0rT5=fr3+1H2ed@nKdR(-;jZe9Z3`j zQmoZ#kzIi5h%W5N4S`svyF+GxS<5Ws5vNu$1(g=+=dMqfI;vbea| z%;bhY4qMH06kQwhu+fmqgpV?!tZ3)o$@}^IE6DWd-Z=pau#=s8=Oo>eddN|CaWa-G zj(jeadXHq`I9q)Y1WqvFfuazbf635PL-4F}H&D>CF9j;^?_=U^v1KQ=5B%M5)zl<+*i91l`nB1rju zJpQscd$vIE$l=1mLep`aA3e`wFw_{IKdrFTW#Z(H)(Rb#R)*oGFwTRispY1Y@?NWX z$XbU73|!XGur-3yK+_qmQfd5*jD^B$w|7Cj?C3Ejy>(32qgrhj_(+fLI{2Rc2lE(u zG>v+GAAnX zd+^xt`~>Bslw^B*TSJ?*&6SA5_3m!?u@2fr15JU@3+6@wvoS-oU>_C4{NCPPLxXkn z9a#Jv5s&bl!Is6bv5#CQS%yamdUnHP{5BZ~*ZojyGX#5$^RM=qp1U(MGvQ!ynHH8%aXQ2Z8PqEM;n;RbcRLS-f!X3K8-4D8g$)$ybwcPOYb4cw9 z0<|$3J3f!SRjJ(m1NiS@HU@Kr?6<6JzK;7&^xB{)38U59_5HnWB%KbDDHhmM^zy7J zsjf*G;-TOyo`|0_LJt7H1LN1YaL^}#*NHz98bkP>A|k;_voKov_EgvDtDw5+xDI&K zzft+F>wLp`>?LFpV()m#*y{TFx^g)G8BN6FK+l?eD0I6@@-Yr4CMJS(|{QSHkxl}57{r&weo-+QV{+L4o{?|g55$7jy9sS>O@i5>Y^WSm+0000< KMNUMnLSTY5-cCdS From d65b32ce09c66f5edce6e3c8bc42cf56216eced9 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 31 Jul 2015 16:09:34 +0200 Subject: [PATCH 008/134] Added displayName methods to account creator --- coreapi/account_creator.c | 18 +++++++++++++++--- coreapi/account_creator.h | 14 ++++++++++++++ coreapi/private.h | 1 + 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/coreapi/account_creator.c b/coreapi/account_creator.c index 33c592d7e..23cdffb28 100644 --- a/coreapi/account_creator.c +++ b/coreapi/account_creator.c @@ -84,6 +84,7 @@ static void _linphone_account_creator_destroy(LinphoneAccountCreator *creator) { if (creator->domain) ms_free(creator->domain); if (creator->route) ms_free(creator->route); if (creator->email) ms_free(creator->email); + if (creator->display_name) ms_free(creator->display_name); ms_free(creator); } @@ -155,6 +156,14 @@ const char * linphone_account_creator_get_route(const LinphoneAccountCreator *cr return creator->route; } +void linphone_account_creator_set_display_name(LinphoneAccountCreator *creator, const char *display_name) { + set_string(&creator->display_name, display_name); +} + +const char * linphone_account_creator_get_display_name(const LinphoneAccountCreator *creator) { + return creator->display_name; +} + void linphone_account_creator_set_email(LinphoneAccountCreator *creator, const char *email) { set_string(&creator->email, email); } @@ -269,12 +278,15 @@ LinphoneAccountCreatorStatus linphone_account_creator_validate(LinphoneAccountCr } LinphoneProxyConfig * linphone_account_creator_configure(const LinphoneAccountCreator *creator) { - const LinphoneAddress *identity; LinphoneAuthInfo *info; LinphoneProxyConfig *cfg = linphone_core_create_proxy_config(creator->core); char *identity_str = ms_strdup_printf("sip:%s@%s", creator->username, creator->domain); + LinphoneAddress *identity = linphone_address_new(identity_str); + if (creator->display_name) { + linphone_address_set_display_name(identity, creator->display_name); + } - linphone_proxy_config_set_identity(cfg, identity_str); + linphone_proxy_config_set_identity(cfg, linphone_address_as_string(identity)); linphone_proxy_config_set_server_addr(cfg, creator->domain); linphone_proxy_config_set_route(cfg, creator->route); linphone_proxy_config_enable_publish(cfg, FALSE); @@ -298,9 +310,9 @@ LinphoneProxyConfig * linphone_account_creator_configure(const LinphoneAccountCr linphone_core_set_firewall_policy(creator->core, LinphonePolicyUseIce); } - identity = linphone_proxy_config_get_identity_address(cfg); info = linphone_auth_info_new(linphone_address_get_username(identity), NULL, creator->password, NULL, NULL, linphone_address_get_domain(identity)); linphone_core_add_auth_info(creator->core, info); + linphone_address_destroy(identity); if (linphone_core_add_proxy_config(creator->core, cfg) != -1) { linphone_core_set_default_proxy(creator->core, cfg); diff --git a/coreapi/account_creator.h b/coreapi/account_creator.h index 7a1277d2f..f2231984a 100644 --- a/coreapi/account_creator.h +++ b/coreapi/account_creator.h @@ -161,6 +161,20 @@ LINPHONE_PUBLIC void linphone_account_creator_set_route(LinphoneAccountCreator * **/ LINPHONE_PUBLIC const char * linphone_account_creator_get_route(const LinphoneAccountCreator *creator); +/** + * Set the email. + * @param[in] creator LinphoneAccountCreator object + * @param[in] display_name The display name to set +**/ +LINPHONE_PUBLIC void linphone_account_creator_set_display_name(LinphoneAccountCreator *creator, const char *display_name); + +/** + * Get the email. + * @param[in] creator LinphoneAccountCreator object + * @return The display name of the LinphoneAccountCreator +**/ +LINPHONE_PUBLIC const char * linphone_account_creator_get_display_name(const LinphoneAccountCreator *creator); + /** * Set the email. * @param[in] creator LinphoneAccountCreator object diff --git a/coreapi/private.h b/coreapi/private.h index 92e5f61df..2ba84988d 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -1083,6 +1083,7 @@ struct _LinphoneAccountCreator { char *route; char *email; bool_t subscribe_to_newsletter; + char *display_name; }; BELLE_SIP_DECLARE_VPTR(LinphoneAccountCreator); From 29d19568fc5b33720865f88bc3d5d3f3bc6d6814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Sat, 1 Aug 2015 14:59:24 +0200 Subject: [PATCH 009/134] Fix missing PulseAudio capture card in multimedia settings --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 0d7e58065..8d06ddb2a 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 0d7e5806533abe0043e10766ff985dd80c273dab +Subproject commit 8d06ddb2a723319efa263935eabe897201212c22 From 881dba62c9eb3efba29ef3d1f82eb7c63682bfdd Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sat, 1 Aug 2015 15:51:33 +0200 Subject: [PATCH 010/134] fix opus mono test, small enhancements to others. --- tester/call_tester.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/tester/call_tester.c b/tester/call_tester.c index 62af4d283..5e3ff9332 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -636,10 +636,10 @@ static void call_with_specified_codec_bitrate(void) { LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); const LinphoneCallStats *pauline_stats,*marie_stats; bool_t call_ok; - char * codec = "opus"; + const char * codec = "opus"; int rate = 48000; int min_bw=24; - int max_bw=40; + int max_bw=50; #ifdef __arm__ if (ms_get_cpu_count() <2) { /*2 opus codec channel + resampler is too much for a single core*/ @@ -656,7 +656,7 @@ static void call_with_specified_codec_bitrate(void) { #endif if (linphone_core_find_payload_type(marie->lc,codec,rate,-1)==NULL){ - ms_warning("opus codec not supported, test skipped."); + BC_PASS("opus codec not supported, test skipped."); goto end; } @@ -673,10 +673,15 @@ static void call_with_specified_codec_bitrate(void) { BC_ASSERT_TRUE((call_ok=call(pauline,marie))); if (!call_ok) goto end; liblinphone_tester_check_rtcp(marie,pauline); + /*wait a bit that bitstreams are stabilized*/ + wait_for_until(marie->lc, pauline->lc, NULL, 0, 2000); + marie_stats=linphone_call_get_audio_stats(linphone_core_get_current_call(marie->lc)); pauline_stats=linphone_call_get_audio_stats(linphone_core_get_current_call(pauline->lc)); - BC_ASSERT_TRUE(marie_stats->download_bandwidth<(min_bw+5+min_bw*.1)); - BC_ASSERT_TRUE(pauline_stats->download_bandwidth>(max_bw-5-max_bw*.1)); + + BC_ASSERT_LOWER(marie_stats->download_bandwidth, min_bw+5+min_bw*.1, int, "%i"); + BC_ASSERT_GREATER(marie_stats->download_bandwidth, 10, int, "%i"); /*check that at least something is received */ + BC_ASSERT_GREATER(pauline_stats->download_bandwidth, (max_bw-5-max_bw*.1), int, "%i"); end: linphone_core_manager_destroy(marie); @@ -2505,13 +2510,8 @@ void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video } if (policy == LinphonePolicyUseIce){ - int i=0; BC_ASSERT_TRUE(check_ice(pauline,marie,enable_tunnel?LinphoneIceStateReflexiveConnection:LinphoneIceStateHostConnection)); - for (i=0;i<100;i++) { /*fixme to workaround a crash*/ - ms_usleep(20000); - linphone_core_iterate(marie->lc); - linphone_core_iterate(pauline->lc); - } + wait_for_until(marie->lc, pauline->lc, NULL, 0, 2000);/*fixme to workaround a crash*/ } #ifdef VIDEO_ENABLED if (enable_video) { @@ -4244,10 +4244,20 @@ static void simple_stereo_call(const char *codec_name, int clock_rate, int bitra }else{ #if !defined(__arm__) && !defined(__arm64__) && !TARGET_IPHONE_SIMULATOR && !defined(ANDROID) double similar; - const double threshold = .7f; - BC_ASSERT_EQUAL(ms_audio_diff(stereo_file,recordpath,&similar,audio_cmp_max_shift,NULL,NULL), 0, int, "%d"); - BC_ASSERT_GREATER(similar, threshold, float, "%f"); - BC_ASSERT_LOWER(similar, 1.f, float, "%f"); + double min_threshold; + if (stereo){ + min_threshold = .7f; + BC_ASSERT_EQUAL(ms_audio_diff(stereo_file,recordpath,&similar,audio_cmp_max_shift,NULL,NULL), 0, int, "%d"); + BC_ASSERT_GREATER(similar, min_threshold, float, "%f"); + BC_ASSERT_LOWER(similar, 1.f, float, "%f"); + }else{ + double max_threshold = .6f; + min_threshold = .5f; + /*when opus doesn't transmit stereo, the cross correlation is around 0.54 : as expected, it is not as good as in full stereo mode*/ + BC_ASSERT_EQUAL(ms_audio_diff(stereo_file,recordpath,&similar,audio_cmp_max_shift,NULL,NULL), 0, int, "%d"); + BC_ASSERT_GREATER(similar, min_threshold, float, "%f"); + BC_ASSERT_LOWER(similar, max_threshold, float, "%f"); + } #endif } From a58201f10a003f86d1a1c2454d3da01ed4154a8e Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Sat, 1 Aug 2015 18:17:47 +0200 Subject: [PATCH 011/134] Fix crash on bb10 with current realpath use --- coreapi/lpconfig.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreapi/lpconfig.c b/coreapi/lpconfig.c index 09889d06a..a85d0c354 100644 --- a/coreapi/lpconfig.c +++ b/coreapi/lpconfig.c @@ -86,7 +86,7 @@ struct _LpConfig{ }; char* lp_realpath(const char* file, char* name) { -#ifdef _WIN32 +#if defined(_WIN32) || defined(__QNX__) return ms_strdup(file); #else char * output = realpath(file, name); From 1ef7f7fabc28739886a58f454a68d782978a5f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Sat, 1 Aug 2015 20:44:07 +0200 Subject: [PATCH 012/134] Remove unuseful lines --- gtk/chat.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/gtk/chat.c b/gtk/chat.c index 2075a9fb7..5f6ebef6e 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -493,12 +493,10 @@ GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddres GtkWidget *entry = linphone_gtk_get_widget(chat_view,"text_entry"); MSList *messages; GHashTable *table; - char *with_str; GtkTextTag *tmp_tag; GtkWidget *link_ctx_menu = gtk_menu_new(); GtkWidget *link_ctx_menu_copy_item = gtk_menu_item_new_with_label(_("Copy")); - with_str=linphone_address_as_string_uri_only(with); gtk_notebook_append_page(notebook,chat_view,create_tab_chat_header(cr,with)); idx = gtk_notebook_page_num(notebook, chat_view); gtk_notebook_set_current_page(notebook, idx); @@ -558,7 +556,6 @@ GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddres g_signal_connect_swapped(G_OBJECT(entry),"activate",(GCallback)linphone_gtk_send_text,NULL); g_signal_connect_swapped(G_OBJECT(entry),"changed",(GCallback)linphone_gtk_compose_text,NULL); g_signal_connect(G_OBJECT(notebook),"switch_page",(GCallback)linphone_gtk_notebook_tab_select,NULL); - ms_free(with_str); return chat_view; } From e6c50db150c6a7538987bb282aea7af19ae76bb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Sat, 1 Aug 2015 22:39:02 +0200 Subject: [PATCH 013/134] Add a new function to load view from UI fils --- gtk/linphone.h | 1 + gtk/main.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/gtk/linphone.h b/gtk/linphone.h index 44f73a7f2..90f9e81a7 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -99,6 +99,7 @@ LINPHONE_PUBLIC void linphone_gtk_destroy_window(GtkWidget *window); LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_window(const char *window_name, GtkWidget *parent); LINPHONE_PUBLIC GtkWidget *linphone_gtk_get_widget(GtkWidget *window, const char *name); LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_widget(const char *filename, const char *widget_name); +LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_widget_2(const char *filename, const char *widget_name); const char *linphone_gtk_message_storage_get_db_file(const char *filename); LINPHONE_PUBLIC void linphone_gtk_show_assistant(GtkWidget* parent); diff --git a/gtk/main.c b/gtk/main.c index 1c6e6c663..850ba9fb9 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -441,6 +441,38 @@ GtkWidget *linphone_gtk_create_widget(const char *filename, const char *widget_n return w; } +GtkWidget *linphone_gtk_create_widget_2(const char *filename, const char *widget_name) { + char path[2048]; + GtkWidget *w = NULL; + GtkBuilder *builder = gtk_builder_new(); + GError *error = NULL; + GObject *obj; + + if(get_ui_file(filename, path, sizeof(path)) == -1) goto end; + + gtk_builder_set_translation_domain(builder, GETTEXT_PACKAGE); + + if(gtk_builder_add_from_file(builder, path, &error) == 0) { + g_error("Couldn't load builder file: %s", error->message); + g_error_free(error); + goto end; + } + + obj = gtk_builder_get_object(builder, widget_name); + if(obj == NULL) { + g_error("'%s' widget not found", widget_name); + goto end; + } + + w = GTK_WIDGET(obj); + g_object_set_data_full(obj, "builder", builder, g_object_unref); + gtk_widget_unparent(w); + + +end: + return w; +} + static void entry_unmapped(GtkWidget *widget){ ms_message("%s is unmapped, calling unrealize to workaround chinese bug.",G_OBJECT_TYPE_NAME(widget)); gtk_widget_unrealize(widget); From 3e5a6600d07d658d19e8c69e9bfa47ac68d7ba8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Sat, 1 Aug 2015 22:40:06 +0200 Subject: [PATCH 014/134] Move the definiton of the chat view in a dedicated UI file --- gtk/CMakeLists.txt | 1 + gtk/Makefile.am | 3 +- gtk/chat.c | 2 +- gtk/chat_view.ui | 118 +++++++++++++++++++++++++++++++++++++++++++++ gtk/main.ui | 115 +------------------------------------------ 5 files changed, 123 insertions(+), 116 deletions(-) create mode 100644 gtk/chat_view.ui diff --git a/gtk/CMakeLists.txt b/gtk/CMakeLists.txt index 981453497..7f54cff59 100644 --- a/gtk/CMakeLists.txt +++ b/gtk/CMakeLists.txt @@ -39,6 +39,7 @@ set(UI_FILES sip_account.ui tunnel_config.ui waiting.ui + chat_view.ui ) set(PIXMAPS stock_people.png) diff --git a/gtk/Makefile.am b/gtk/Makefile.am index f1200fce9..1103168aa 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -15,7 +15,8 @@ UI_FILES= about.ui \ ldap.ui \ config-uri.ui \ provisioning-fetch.ui \ - audio_assistant.ui + audio_assistant.ui \ + chat_view.ui PIXMAPS= \ stock_people.png diff --git a/gtk/chat.c b/gtk/chat.c index 5f6ebef6e..4b447e446 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -481,7 +481,7 @@ static gboolean copy_uri_into_clipboard_handler(GtkMenuItem *menuitem, gpointer } GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddress *with){ - GtkWidget *chat_view=linphone_gtk_create_widget("main","chatroom_frame"); + GtkWidget *chat_view=linphone_gtk_create_widget_2("chat_view","chatroom_frame"); GtkWidget *main_window=linphone_gtk_get_main_window(); GtkNotebook *notebook=(GtkNotebook *)linphone_gtk_get_widget(main_window,"viewswitch"); GtkWidget *text=linphone_gtk_get_widget(chat_view,"textview"); diff --git a/gtk/chat_view.ui b/gtk/chat_view.ui new file mode 100644 index 000000000..b9f1e2213 --- /dev/null +++ b/gtk/chat_view.ui @@ -0,0 +1,118 @@ + + + + + + False + + + True + False + 0 + none + + + True + False + + + True + True + never + + + True + True + 4 + False + word-char + False + + + + + True + True + 0 + + + + + True + False + + + True + True + + True + False + False + True + True + + + True + True + 0 + + + + + True + True + True + + + True + False + + + True + False + gtk-ok + + + True + True + 0 + + + + + True + False + Send + + + True + True + 7 + 1 + + + + + + + False + False + 1 + + + + + False + False + 1 + + + + + + + + + + + diff --git a/gtk/main.ui b/gtk/main.ui index 1c28c26f3..50f2a106f 100644 --- a/gtk/main.ui +++ b/gtk/main.ui @@ -96,119 +96,6 @@ - - False - - - True - False - 0 - none - - - True - False - - - True - True - never - - - True - True - 4 - False - word-char - False - - - - - True - True - 0 - - - - - True - False - - - True - True - True - - False - False - True - True - - - True - True - 0 - - - - - True - True - True - - - True - False - - - True - False - gtk-ok - - - True - True - 0 - - - - - True - False - Send - - - True - True - 7 - 1 - - - - - - - False - False - 1 - - - - - False - False - 1 - - - - - - - - - - False @@ -1111,8 +998,8 @@ audio-volume-medium False True - 4 end + 4 From ffe22a6d7d3fa89a545589181809355fb26731d1 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sun, 2 Aug 2015 10:55:25 +0200 Subject: [PATCH 015/134] fix regression in mkv file player test, introduced by 3f86b78b2a5aeac39273015e55ae5dbf24def9a6 (wav and mkv file swapped) --- tester/call_tester.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tester/call_tester.c b/tester/call_tester.c index 5e3ff9332..35a5197ea 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -2386,8 +2386,8 @@ static void call_with_mkv_file_player(void) { const double threshold = 0.9; #define DO_AUDIO_CMP #endif - hellomkv = bc_tester_res("sounds/hello8000_mkv_ref.wav"); - hellowav = bc_tester_res("sounds/hello8000.mkv"); + hellowav = bc_tester_res("sounds/hello8000_mkv_ref.wav"); + hellomkv = bc_tester_res("sounds/hello8000.mkv"); if (!is_format_supported(marie->lc,"mkv")){ ms_warning("Test skipped, no mkv support."); From a3c33f50369981bf296fa27fd6eca926684fff5c Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sun, 2 Aug 2015 11:31:32 +0200 Subject: [PATCH 016/134] fix build and robustize tests --- po/POTFILES.in | 1 + tester/call_tester.c | 101 +++++++++++++++++++----------------- tester/liblinphone_tester.h | 3 ++ tester/tester.c | 19 ++++++- 4 files changed, 74 insertions(+), 50 deletions(-) diff --git a/po/POTFILES.in b/po/POTFILES.in index 19003b0f6..6c37f4bbe 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -32,6 +32,7 @@ gtk/audio_assistant.c [type: gettext/glade]gtk/ldap.ui [type: gettext/glade]gtk/config-uri.ui [type: gettext/glade]gtk/provisioning-fetch.ui +[type: gettext/glade]gtk/chat_view.ui coreapi/linphonecore.c coreapi/misc.c coreapi/presence.c diff --git a/tester/call_tester.c b/tester/call_tester.c index 35a5197ea..2cd398dcd 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -634,7 +634,6 @@ static void multiple_answers_call_with_media_relay(void) { static void call_with_specified_codec_bitrate(void) { LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); - const LinphoneCallStats *pauline_stats,*marie_stats; bool_t call_ok; const char * codec = "opus"; int rate = 48000; @@ -676,13 +675,12 @@ static void call_with_specified_codec_bitrate(void) { /*wait a bit that bitstreams are stabilized*/ wait_for_until(marie->lc, pauline->lc, NULL, 0, 2000); - marie_stats=linphone_call_get_audio_stats(linphone_core_get_current_call(marie->lc)); - pauline_stats=linphone_call_get_audio_stats(linphone_core_get_current_call(pauline->lc)); - - BC_ASSERT_LOWER(marie_stats->download_bandwidth, min_bw+5+min_bw*.1, int, "%i"); - BC_ASSERT_GREATER(marie_stats->download_bandwidth, 10, int, "%i"); /*check that at least something is received */ - BC_ASSERT_GREATER(pauline_stats->download_bandwidth, (max_bw-5-max_bw*.1), int, "%i"); - + BC_ASSERT_LOWER(linphone_core_manager_get_mean_audio_down_bw(marie), min_bw+5+min_bw*.1, int, "%i"); + BC_ASSERT_GREATER(linphone_core_manager_get_mean_audio_down_bw(marie), 10, int, "%i"); /*check that at least something is received */ + BC_ASSERT_GREATER(linphone_core_manager_get_mean_audio_down_bw(pauline), (max_bw-5-max_bw*.1), int, "%i"); + linphone_core_terminate_all_calls(pauline->lc); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -2312,52 +2310,57 @@ static void call_with_file_player(void) { char *hellopath = bc_tester_res("sounds/ahbahouaismaisbon.wav"); char *recordpath = create_filepath(bc_tester_get_writable_dir_prefix(), "record-call_with_file_player", "wav"); bool_t call_ok; + int attempts; + double similar=1; + const double threshold = 0.9; + + /*this test is actually attempted three times in case of failure, because the audio comparison at the end is very sensitive to + * jitter buffer drifts, which sometimes happen if the machine is unable to run the test in good realtime conditions */ + for (attempts=0; attempts<3; attempts++){ + reset_counters(&marie->stat); + reset_counters(&pauline->stat); + /*make sure the record file doesn't already exists, otherwise this test will append new samples to it*/ + unlink(recordpath); + /*caller uses files instead of soundcard in order to avoid mixing soundcard input with file played using call's player*/ + linphone_core_use_files(marie->lc,TRUE); + linphone_core_set_play_file(marie->lc,NULL); - /*make sure the record file doesn't already exists, otherwise this test will append new samples to it*/ - unlink(recordpath); + /*callee is recording and plays file*/ + linphone_core_use_files(pauline->lc,TRUE); + linphone_core_set_play_file(pauline->lc,NULL); + linphone_core_set_record_file(pauline->lc,recordpath); - - /*caller uses files instead of soundcard in order to avoid mixing soundcard input with file played using call's player*/ - linphone_core_use_files(marie->lc,TRUE); - linphone_core_set_play_file(marie->lc,NULL); - - /*callee is recording and plays file*/ - linphone_core_use_files(pauline->lc,TRUE); - linphone_core_set_play_file(pauline->lc,NULL); - linphone_core_set_record_file(pauline->lc,recordpath); - - BC_ASSERT_TRUE((call_ok=call(marie,pauline))); - if (!call_ok) goto end; - player=linphone_call_get_player(linphone_core_get_current_call(marie->lc)); - BC_ASSERT_PTR_NOT_NULL(player); - if (player){ - BC_ASSERT_TRUE(linphone_player_open(player,hellopath,on_eof,marie)==0); - BC_ASSERT_TRUE(linphone_player_start(player)==0); - } - - /* This assert should be modified to be at least as long as the WAV file */ - BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,10000)); - - /*just to sleep*/ - linphone_core_terminate_all_calls(marie->lc); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); - /*cannot run on iphone simulator because locks main loop beyond permitted time (should run - on another thread) */ -#if !defined(__arm__) && !defined(__arm64__) && !TARGET_IPHONE_SIMULATOR && !defined(ANDROID) - { - double similar; - const int threshold = 90; - BC_ASSERT_EQUAL(ms_audio_diff(hellopath,recordpath,&similar,audio_cmp_max_shift,NULL,NULL), 0, int, "%d"); - BC_ASSERT_GREATER(100*similar, threshold, int, "%d"); - BC_ASSERT_LOWER(100*similar, 100, int, "%d"); - if (threshold < 100*similar && 100*similar < 100) { - remove(recordpath); + BC_ASSERT_TRUE((call_ok=call(marie,pauline))); + if (!call_ok) goto end; + player=linphone_call_get_player(linphone_core_get_current_call(marie->lc)); + BC_ASSERT_PTR_NOT_NULL(player); + if (player){ + BC_ASSERT_TRUE(linphone_player_open(player,hellopath,on_eof,marie)==0); + BC_ASSERT_TRUE(linphone_player_start(player)==0); } - } + + /* This assert should be modified to be at least as long as the WAV file */ + BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,10000)); + + /*just to sleep*/ + linphone_core_terminate_all_calls(marie->lc); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + /*cannot run on iphone simulator because locks main loop beyond permitted time (should run + on another thread) */ +#if !defined(__arm__) && !defined(__arm64__) && !TARGET_IPHONE_SIMULATOR && !defined(ANDROID) + BC_ASSERT_EQUAL(ms_audio_diff(hellopath,recordpath,&similar,audio_cmp_max_shift,NULL,NULL), 0, int, "%d"); + if (similar>=threshold) + break; #else - remove(recordpath); + remove(recordpath); #endif + } + BC_ASSERT_GREATER(similar, threshold, double, "%g"); + BC_ASSERT_LOWER(similar, 1.0, double, "%g"); + if (similar >= threshold && similar <= 1.0) { + remove(recordpath); + } end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index a86666f4f..98e2e146c 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -325,6 +325,9 @@ static const int audio_cmp_max_shift=20; * this function return max value in the last 3 seconds*/ int linphone_core_manager_get_max_audio_down_bw(const LinphoneCoreManager *mgr); int linphone_core_manager_get_max_audio_up_bw(const LinphoneCoreManager *mgr); +int linphone_core_manager_get_mean_audio_down_bw(const LinphoneCoreManager *mgr); +int linphone_core_manager_get_mean_audio_up_bw(const LinphoneCoreManager *mgr); + void video_call_base_2(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t using_policy,LinphoneMediaEncryption mode, bool_t callee_video_enabled, bool_t caller_video_enabled); int liblinphone_tester_setup(); diff --git a/tester/tester.c b/tester/tester.c index b3ffddec0..a41d634d8 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -431,7 +431,7 @@ void liblinphone_tester_add_suites() { bc_tester_add_suite(&proxy_config_test_suite); } -static bool_t linphone_core_manager_get_max_audio_bw_base(const int array[],int array_size) { +static int linphone_core_manager_get_max_audio_bw_base(const int array[],int array_size) { int i,result=0; for (i=0; istat.audio_download_bandwidth , sizeof(mgr->stat.audio_download_bandwidth)/sizeof(int)); @@ -448,6 +456,15 @@ int linphone_core_manager_get_max_audio_up_bw(const LinphoneCoreManager *mgr) { , sizeof(mgr->stat.audio_upload_bandwidth)/sizeof(int)); } +int linphone_core_manager_get_mean_audio_down_bw(const LinphoneCoreManager *mgr) { + return linphone_core_manager_get_mean_audio_bw_base(mgr->stat.audio_download_bandwidth + , sizeof(mgr->stat.audio_download_bandwidth)/sizeof(int)); +} +int linphone_core_manager_get_mean_audio_up_bw(const LinphoneCoreManager *mgr) { + return linphone_core_manager_get_mean_audio_bw_base(mgr->stat.audio_upload_bandwidth + , sizeof(mgr->stat.audio_upload_bandwidth)/sizeof(int)); +} + int liblinphone_tester_setup() { if (manager_count != 0) { // crash in some linphone core have not been destroyed because if we continue From fbc7b86f1ee40dd69ab23109987c3a29dd0c83c4 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sun, 2 Aug 2015 16:14:50 +0200 Subject: [PATCH 017/134] revert changes made into linphone_gtk_update_call_buttons() as they are totally breaking the management of start_call and add_call buttons. --- gtk/main.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/gtk/main.c b/gtk/main.c index 850ba9fb9..ea3a36d3e 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -870,27 +870,33 @@ static void linphone_gtk_update_call_buttons(LinphoneCall *call){ GtkWidget *mw=linphone_gtk_get_main_window(); const MSList *calls=linphone_core_get_calls(lc); GtkWidget *button; + bool_t start_active=TRUE; + //bool_t stop_active=FALSE; bool_t add_call=FALSE; int call_list_size=ms_list_size(calls); GtkWidget *conf_frame; - if (calls!=NULL){ + if (calls==NULL){ + start_active=TRUE; + //stop_active=FALSE; + }else{ + //stop_active=TRUE; + start_active=TRUE; add_call=TRUE; } button=linphone_gtk_get_widget(mw,"start_call"); - gtk_widget_set_visible(button,!add_call); - - button=linphone_gtk_get_widget(mw,"start_chat"); + gtk_widget_set_sensitive(button,start_active); gtk_widget_set_visible(button,!add_call); button=linphone_gtk_get_widget(mw,"add_call"); - gtk_widget_set_visible(button,add_call); + if (linphone_core_sound_resources_locked(lc) || (call && linphone_call_get_state(call)==LinphoneCallIncomingReceived)) { gtk_widget_set_sensitive(button,FALSE); } else { - gtk_widget_set_sensitive(button,TRUE); + gtk_widget_set_sensitive(button,start_active); } - + gtk_widget_set_visible(button,add_call); + //gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"terminate_call"),stop_active); conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame"); if(conf_frame==NULL){ From 6d3d8a8f3df5af1f2c608b6ae8c41a62119ddc6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Sun, 2 Aug 2015 23:16:10 +0200 Subject: [PATCH 018/134] Fix regression concerning the reading and the creation of .linphonerc The .linphonerc file was not created at the first launch of Linphone. The realpath function fails and returns NULL when passing a path which points on an empty file. --- coreapi/lpconfig.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/coreapi/lpconfig.c b/coreapi/lpconfig.c index 09889d06a..791823567 100644 --- a/coreapi/lpconfig.c +++ b/coreapi/lpconfig.c @@ -370,7 +370,15 @@ LpConfig *lp_config_new_with_factory(const char *config_filename, const char *fa LpConfig *lpconfig=lp_new0(LpConfig,1); lpconfig->refcnt=1; if (config_filename!=NULL){ - lpconfig->filename=lp_realpath(config_filename, NULL); + if(access(config_filename, F_OK) == 0) { + lpconfig->filename=lp_realpath(config_filename, NULL); + if(lpconfig->filename == NULL) { + ms_error("Could not find the real path of %s: %s", config_filename, strerror(errno)); + goto fail; + } + } else { + lpconfig->filename = ms_strdup(config_filename); + } lpconfig->tmpfilename=ortp_strdup_printf("%s.tmp",lpconfig->filename); ms_message("Using (r/w) config information from %s", lpconfig->filename); @@ -408,6 +416,10 @@ LpConfig *lp_config_new_with_factory(const char *config_filename, const char *fa lp_config_read_file(lpconfig, factory_config_filename); } return lpconfig; + +fail: + ms_free(lpconfig); + return NULL; } int lp_config_read_file(LpConfig *lpconfig, const char *filename){ From 668d125b4d6d9334c164fc27123e13d29e640983 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Mon, 3 Aug 2015 09:34:41 +0200 Subject: [PATCH 019/134] main.c: redo properly button management in linphone_gtk_update_call_buttons() --- .gitignore | 1 + gtk/main.c | 32 +++++++++++--------------------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index bceba742e..be3581420 100644 --- a/.gitignore +++ b/.gitignore @@ -89,3 +89,4 @@ tester/record_for_lc_*.wav tester/record-call_with_file_player.wav tester/ZIDCache*.xml +tester/stereo-record.wav diff --git a/gtk/main.c b/gtk/main.c index ea3a36d3e..f9bc2722d 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -447,28 +447,28 @@ GtkWidget *linphone_gtk_create_widget_2(const char *filename, const char *widget GtkBuilder *builder = gtk_builder_new(); GError *error = NULL; GObject *obj; - + if(get_ui_file(filename, path, sizeof(path)) == -1) goto end; - + gtk_builder_set_translation_domain(builder, GETTEXT_PACKAGE); - + if(gtk_builder_add_from_file(builder, path, &error) == 0) { g_error("Couldn't load builder file: %s", error->message); g_error_free(error); goto end; } - + obj = gtk_builder_get_object(builder, widget_name); if(obj == NULL) { g_error("'%s' widget not found", widget_name); goto end; } - + w = GTK_WIDGET(obj); g_object_set_data_full(obj, "builder", builder, g_object_unref); gtk_widget_unparent(w); - - + + end: return w; } @@ -870,22 +870,12 @@ static void linphone_gtk_update_call_buttons(LinphoneCall *call){ GtkWidget *mw=linphone_gtk_get_main_window(); const MSList *calls=linphone_core_get_calls(lc); GtkWidget *button; - bool_t start_active=TRUE; - //bool_t stop_active=FALSE; - bool_t add_call=FALSE; + bool_t add_call=(calls!=NULL); int call_list_size=ms_list_size(calls); GtkWidget *conf_frame; - if (calls==NULL){ - start_active=TRUE; - //stop_active=FALSE; - }else{ - //stop_active=TRUE; - start_active=TRUE; - add_call=TRUE; - } button=linphone_gtk_get_widget(mw,"start_call"); - gtk_widget_set_sensitive(button,start_active); + gtk_widget_set_sensitive(button,TRUE); gtk_widget_set_visible(button,!add_call); button=linphone_gtk_get_widget(mw,"add_call"); @@ -893,10 +883,10 @@ static void linphone_gtk_update_call_buttons(LinphoneCall *call){ if (linphone_core_sound_resources_locked(lc) || (call && linphone_call_get_state(call)==LinphoneCallIncomingReceived)) { gtk_widget_set_sensitive(button,FALSE); } else { - gtk_widget_set_sensitive(button,start_active); + gtk_widget_set_sensitive(button,TRUE); } gtk_widget_set_visible(button,add_call); - + //gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"terminate_call"),stop_active); conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame"); if(conf_frame==NULL){ From db380ed30468d9f5009e3854d3a63a0c8fb95361 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Mon, 3 Aug 2015 10:51:25 +0200 Subject: [PATCH 020/134] Fix build for Windows 10 with final version of Visual Studio 2015. --- .../liblinphone-tester/MainPage.xaml.cs | 1 + ...blinphone-tester-runtime-component.vcxproj | 4 +- .../liblinphone-tester-static.vcxproj | 4 +- .../liblinphone-tester.csproj | 53 +++++-------------- .../windows10/liblinphone-tester/project.json | 19 +++++++ .../windows10/liblinphone/liblinphone.vcxproj | 4 +- mediastreamer2 | 2 +- oRTP | 2 +- tester/liblinphone_tester_windows.cpp | 13 +++-- tester/liblinphone_tester_windows.h | 1 + 10 files changed, 54 insertions(+), 49 deletions(-) create mode 100644 build/windows10/liblinphone-tester/project.json diff --git a/build/windows10/liblinphone-tester/MainPage.xaml.cs b/build/windows10/liblinphone-tester/MainPage.xaml.cs index 043713796..005f38891 100644 --- a/build/windows10/liblinphone-tester/MainPage.xaml.cs +++ b/build/windows10/liblinphone-tester/MainPage.xaml.cs @@ -37,6 +37,7 @@ namespace liblinphone_tester protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); + LibLinphoneTester.Instance.setWritableDirectory(ApplicationData.Current.LocalFolder); _suites = UnitTestDataSource.GetSuites(LibLinphoneTester.Instance); TryAutoLaunch(); } diff --git a/build/windows10/liblinphone-tester/liblinphone-tester-runtime-component/liblinphone-tester-runtime-component.vcxproj b/build/windows10/liblinphone-tester/liblinphone-tester-runtime-component/liblinphone-tester-runtime-component.vcxproj index 9f1c02cff..a66c5e7ed 100644 --- a/build/windows10/liblinphone-tester/liblinphone-tester-runtime-component/liblinphone-tester-runtime-component.vcxproj +++ b/build/windows10/liblinphone-tester/liblinphone-tester-runtime-component/liblinphone-tester-runtime-component.vcxproj @@ -70,7 +70,9 @@ 14.0 true Windows Store - 8.2 + 10 + 10.0.10240.0 + 10.0.10069.0 diff --git a/build/windows10/liblinphone-tester/liblinphone-tester-static/liblinphone-tester-static.vcxproj b/build/windows10/liblinphone-tester/liblinphone-tester-static/liblinphone-tester-static.vcxproj index 73ce588be..80e57dedb 100644 --- a/build/windows10/liblinphone-tester/liblinphone-tester-static/liblinphone-tester-static.vcxproj +++ b/build/windows10/liblinphone-tester/liblinphone-tester-static/liblinphone-tester-static.vcxproj @@ -81,7 +81,9 @@ 14.0 true Windows Store - 8.2 + 10 + 10.0.10240.0 + 10.0.10069.0 diff --git a/build/windows10/liblinphone-tester/liblinphone-tester.csproj b/build/windows10/liblinphone-tester/liblinphone-tester.csproj index f3c30d0fb..d50b0c18e 100644 --- a/build/windows10/liblinphone-tester/liblinphone-tester.csproj +++ b/build/windows10/liblinphone-tester/liblinphone-tester.csproj @@ -11,7 +11,7 @@ liblinphone-tester en-US UAP - 10.0.10069.0 + 10.0.10240.0 10.0.10069.0 14 true @@ -24,7 +24,7 @@ true bin\ARM\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UAP + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP ;2008 full ARM @@ -34,7 +34,7 @@ bin\ARM\Release\ - TRACE;NETFX_CORE;WINDOWS_UAP + TRACE;NETFX_CORE;WINDOWS_UWP true ;2008 pdbonly @@ -47,7 +47,7 @@ true bin\x64\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UAP + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP ;2008 full x64 @@ -57,7 +57,7 @@ bin\x64\Release\ - TRACE;NETFX_CORE;WINDOWS_UAP + TRACE;NETFX_CORE;WINDOWS_UWP true ;2008 pdbonly @@ -70,7 +70,7 @@ true bin\x86\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UAP + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP ;2008 full x86 @@ -80,7 +80,7 @@ bin\x86\Release\ - TRACE;NETFX_CORE;WINDOWS_UAP + TRACE;NETFX_CORE;WINDOWS_UWP true ;2008 pdbonly @@ -90,6 +90,13 @@ true true + + + + PreserveNewest + + + App.xaml @@ -104,7 +111,6 @@ Designer - PreserveNewest @@ -281,28 +287,6 @@ Designer - - - packages\Microsoft.ApplicationInsights.0.14.3-build00177\lib\portable-win81+wpa81\Microsoft.ApplicationInsights.dll - True - - - packages\Microsoft.ApplicationInsights.WindowsApps.0.14.3-build00177\lib\win81\Microsoft.ApplicationInsights.Extensibility.Windows.dll - True - - - packages\Microsoft.ApplicationInsights.PersistenceChannel.0.14.3-build00177\lib\portable-win81+wpa81\Microsoft.ApplicationInsights.PersistenceChannel.dll - True - - - packages\System.Numerics.Vectors.4.0.0\lib\win8\System.Numerics.Vectors.dll - True - - - packages\System.Numerics.Vectors.4.0.0\lib\win8\System.Numerics.Vectors.WindowsRuntime.dll - True - - {1ce10f06-8fad-437f-b3d7-3b7a8909a190} @@ -314,15 +298,6 @@ 14.0 - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - XCopy /I /Y $(ProjectDir)..\..\..\tester\tester_hosts $(ProjectDir)Assets\ XCopy /I /Y $(ProjectDir)..\..\..\tester\certificates\altname $(ProjectDir)Assets\certificates\altname diff --git a/build/windows10/liblinphone-tester/project.json b/build/windows10/liblinphone-tester/project.json new file mode 100644 index 000000000..e3b2dba25 --- /dev/null +++ b/build/windows10/liblinphone-tester/project.json @@ -0,0 +1,19 @@ +{ + "dependencies": { + "Microsoft.ApplicationInsights": "1.0.0", + "Microsoft.ApplicationInsights.PersistenceChannel": "1.0.0", + "Microsoft.ApplicationInsights.WindowsApps": "1.0.0", + "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0" + }, + "frameworks": { + "uap10.0": {} + }, + "runtimes": { + "win10-arm": {}, + "win10-arm-aot": {}, + "win10-x86": {}, + "win10-x86-aot": {}, + "win10-x64": {}, + "win10-x64-aot": {} + } +} \ No newline at end of file diff --git a/build/windows10/liblinphone/liblinphone.vcxproj b/build/windows10/liblinphone/liblinphone.vcxproj index 5d1809af7..2be93aeb0 100644 --- a/build/windows10/liblinphone/liblinphone.vcxproj +++ b/build/windows10/liblinphone/liblinphone.vcxproj @@ -135,7 +135,9 @@ 14.0 true Windows Store - 8.2 + 10 + 10.0.10240.0 + 10.0.10069.0 diff --git a/mediastreamer2 b/mediastreamer2 index 8d06ddb2a..0b72fb676 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 8d06ddb2a723319efa263935eabe897201212c22 +Subproject commit 0b72fb676c24356a548710c5e3a1d0ee3a1dbd70 diff --git a/oRTP b/oRTP index 32f4e635d..5aa889bfe 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit 32f4e635db66d2acec21c4633d37776cd6ed34df +Subproject commit 5aa889bfe539f6b83962334adb9f49aa76bc8303 diff --git a/tester/liblinphone_tester_windows.cpp b/tester/liblinphone_tester_windows.cpp index a1e064da6..30b480a8c 100644 --- a/tester/liblinphone_tester_windows.cpp +++ b/tester/liblinphone_tester_windows.cpp @@ -53,13 +53,8 @@ static void libLinphoneNativeOutputTraceHandler(OrtpLogLevel lev, const char *fm LibLinphoneTester::LibLinphoneTester() { - char writable_dir[MAX_WRITABLE_DIR_SIZE]; - StorageFolder ^folder = ApplicationData::Current->LocalFolder; - const wchar_t *wwritable_dir = folder->Path->Data(); - wcstombs(writable_dir, wwritable_dir, sizeof(writable_dir)); liblinphone_tester_init(nativeOutputTraceHandler); bc_tester_set_resource_dir_prefix("Assets"); - bc_tester_set_writable_dir_prefix(writable_dir); } LibLinphoneTester::~LibLinphoneTester() @@ -67,6 +62,14 @@ LibLinphoneTester::~LibLinphoneTester() liblinphone_tester_uninit(); } +void LibLinphoneTester::setWritableDirectory(StorageFolder^ folder) +{ + char writable_dir[MAX_WRITABLE_DIR_SIZE] = { 0 }; + const wchar_t *wwritable_dir = folder->Path->Data(); + wcstombs(writable_dir, wwritable_dir, sizeof(writable_dir)); + bc_tester_set_writable_dir_prefix(writable_dir); +} + void LibLinphoneTester::setOutputTraceListener(OutputTraceListener^ traceListener) { sTraceListener = traceListener; diff --git a/tester/liblinphone_tester_windows.h b/tester/liblinphone_tester_windows.h index 959a6d1d9..08d60ddfd 100644 --- a/tester/liblinphone_tester_windows.h +++ b/tester/liblinphone_tester_windows.h @@ -14,6 +14,7 @@ namespace liblinphone_tester_runtime_component public ref class LibLinphoneTester sealed { public: + void setWritableDirectory(Windows::Storage::StorageFolder^ folder); void setOutputTraceListener(OutputTraceListener^ traceListener); unsigned int nbTestSuites(); unsigned int nbTests(Platform::String^ suiteName); From f3a4fc6b4a9962192ab3b64fb4096821d150e9e0 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Mon, 3 Aug 2015 11:35:25 +0200 Subject: [PATCH 021/134] Fix build with Visual Studio. --- coreapi/lpconfig.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreapi/lpconfig.c b/coreapi/lpconfig.c index 791823567..921c88997 100644 --- a/coreapi/lpconfig.c +++ b/coreapi/lpconfig.c @@ -370,7 +370,7 @@ LpConfig *lp_config_new_with_factory(const char *config_filename, const char *fa LpConfig *lpconfig=lp_new0(LpConfig,1); lpconfig->refcnt=1; if (config_filename!=NULL){ - if(access(config_filename, F_OK) == 0) { + if(ortp_file_exist(config_filename) == 0) { lpconfig->filename=lp_realpath(config_filename, NULL); if(lpconfig->filename == NULL) { ms_error("Could not find the real path of %s: %s", config_filename, strerror(errno)); From 53ccb2c5641dbe3cede40940352c6ac0eebd222c Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Mon, 3 Aug 2015 12:41:17 +0200 Subject: [PATCH 022/134] Handle and add test for AVPF generic NACK. --- coreapi/bellesip_sal/sal_sdp.c | 17 +++++++++-- coreapi/linphonecall.c | 26 ++++++++++++++++ coreapi/offeranswer.c | 5 ++++ include/sal/sal.h | 1 + mediastreamer2 | 2 +- oRTP | 2 +- tester/call_tester.c | 55 +++++++++++++++++++++++++++++++++- tester/liblinphone_tester.h | 1 + 8 files changed, 103 insertions(+), 6 deletions(-) diff --git a/coreapi/bellesip_sal/sal_sdp.c b/coreapi/bellesip_sal/sal_sdp.c index 2bc6afb5c..b9273f5fb 100644 --- a/coreapi/bellesip_sal/sal_sdp.c +++ b/coreapi/bellesip_sal/sal_sdp.c @@ -128,6 +128,12 @@ static void add_rtcp_fb_attributes(belle_sdp_media_description_t *media_desc, co if (general_trr_int == TRUE) { add_rtcp_fb_trr_int_attribute(media_desc, -1, trr_int); } + if (stream->rtcp_fb.generic_nack_enabled == TRUE) { + add_rtcp_fb_nack_attribute(media_desc, -1, BELLE_SDP_RTCP_FB_NONE); + } + if (stream->rtcp_fb.tmmbr_enabled == TRUE) { + add_rtcp_fb_ccm_attribute(media_desc, -1, BELLE_SDP_RTCP_FB_TMMBR); + } for (pt_it = stream->payloads; pt_it != NULL; pt_it = pt_it->next) { pt = (PayloadType *)pt_it->data; @@ -550,7 +556,7 @@ static void enable_avpf_for_stream(SalStreamDescription *stream) { } } -static void apply_rtcp_fb_attribute_to_payload(belle_sdp_rtcp_fb_attribute_t *fb_attribute, PayloadType *pt) { +static void apply_rtcp_fb_attribute_to_payload(belle_sdp_rtcp_fb_attribute_t *fb_attribute, SalStreamDescription *stream, PayloadType *pt) { PayloadTypeAvpfParams avpf_params = payload_type_get_avpf_params(pt); switch (belle_sdp_rtcp_fb_attribute_get_type(fb_attribute)) { case BELLE_SDP_RTCP_FB_ACK: @@ -574,6 +580,8 @@ static void apply_rtcp_fb_attribute_to_payload(belle_sdp_rtcp_fb_attribute_t *fb avpf_params.rpsi_compatibility = TRUE; break; case BELLE_SDP_RTCP_FB_NONE: + stream->rtcp_fb.generic_nack_enabled = TRUE; + break; default: break; } @@ -586,6 +594,9 @@ static void apply_rtcp_fb_attribute_to_payload(belle_sdp_rtcp_fb_attribute_t *fb case BELLE_SDP_RTCP_FB_FIR: avpf_params.features |= PAYLOAD_TYPE_AVPF_FIR; break; + case BELLE_SDP_RTCP_FB_TMMBR: + stream->rtcp_fb.tmmbr_enabled = TRUE; + break; default: break; } @@ -612,7 +623,7 @@ static void sdp_parse_rtcp_fb_parameters(belle_sdp_media_description_t *media_de if (belle_sdp_rtcp_fb_attribute_get_id(fb_attribute) == -1) { for (pt_it = stream->payloads; pt_it != NULL; pt_it = pt_it->next) { pt = (PayloadType *)pt_it->data; - apply_rtcp_fb_attribute_to_payload(fb_attribute, pt); + apply_rtcp_fb_attribute_to_payload(fb_attribute, stream, pt); } } } @@ -627,7 +638,7 @@ static void sdp_parse_rtcp_fb_parameters(belle_sdp_media_description_t *media_de for (pt_it = stream->payloads; pt_it != NULL; pt_it = pt_it->next) { pt = (PayloadType *)pt_it->data; if (payload_type_get_number(pt) == (int)pt_num) { - apply_rtcp_fb_attribute_to_payload(fb_attribute, pt); + apply_rtcp_fb_attribute_to_payload(fb_attribute, stream, pt); } } } diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index f92680316..46c301c44 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -485,10 +485,13 @@ static void setup_rtcp_fb(LinphoneCall *call, SalMediaDescription *md) { MSList *pt_it; PayloadType *pt; PayloadTypeAvpfParams avpf_params; + LinphoneCore *lc = call->core; int i; for (i = 0; i < md->nb_streams; i++) { if (!sal_stream_description_active(&md->streams[i])) continue; + md->streams[i].rtcp_fb.generic_nack_enabled = lp_config_get_int(lc->config, "rtp", "rtcp_fb_generic_nack_enabled", 0); + md->streams[i].rtcp_fb.tmmbr_enabled = lp_config_get_int(lc->config, "rtp", "rtcp_fb_tmmbr_enabled", 0); for (pt_it = md->streams[i].payloads; pt_it != NULL; pt_it = pt_it->next) { pt = (PayloadType *)pt_it->data; if (call->params->avpf_enabled == TRUE) { @@ -2392,6 +2395,27 @@ static int find_crypto_index_from_tag(const SalSrtpCryptoAlgo crypto[],unsigned return -1; } +static void configure_rtp_session_for_rtcp_fb(LinphoneCall *call, SalStreamDescription *stream) { + RtpSession *session = NULL; + + if (stream->type == SalAudio) { + session = call->audiostream->ms.sessions.rtp_session; + } else if (stream->type == SalVideo) { + session = call->videostream->ms.sessions.rtp_session; + } else { + // Do nothing for streams that are not audio or video + return; + } + if (stream->rtcp_fb.generic_nack_enabled) + rtp_session_enable_avpf_feature(session, ORTP_AVPF_FEATURE_GENERIC_NACK, TRUE); + else + rtp_session_enable_avpf_feature(session, ORTP_AVPF_FEATURE_GENERIC_NACK, FALSE); + if (stream->rtcp_fb.tmmbr_enabled) + rtp_session_enable_avpf_feature(session, ORTP_AVPF_FEATURE_TMMBR, TRUE); + else + rtp_session_enable_avpf_feature(session, ORTP_AVPF_FEATURE_TMMBR, FALSE); +} + static void configure_rtp_session_for_rtcp_xr(LinphoneCore *lc, LinphoneCall *call, SalStreamType type) { RtpSession *session; const OrtpRtcpXrConfiguration *localconfig; @@ -2622,6 +2646,7 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b ms_warning("Failed to find local crypto algo with tag: %d", stream->crypto_local_tag); } } + configure_rtp_session_for_rtcp_fb(call, stream); configure_rtp_session_for_rtcp_xr(lc, call, SalAudio); if (is_multicast) rtp_session_set_multicast_ttl(call->audiostream->ms.sessions.rtp_session,stream->ttl); @@ -2789,6 +2814,7 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu media_stream_set_srtp_send_key_b64(&(call->videostream->ms.sessions),vstream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key); } } + configure_rtp_session_for_rtcp_fb(call, vstream); configure_rtp_session_for_rtcp_xr(lc, call, SalVideo); call->log->video_enabled = TRUE; diff --git a/coreapi/offeranswer.c b/coreapi/offeranswer.c index 90ec2c665..0b0edb931 100644 --- a/coreapi/offeranswer.c +++ b/coreapi/offeranswer.c @@ -503,6 +503,8 @@ int offer_answer_initiate_outgoing(const SalMediaDescription *local_offer, if ((ls->rtcp_xr.enabled == TRUE) && (rs->rtcp_xr.enabled == FALSE)) { result->streams[i].rtcp_xr.enabled = FALSE; } + result->streams[i].rtcp_fb.generic_nack_enabled = ls->rtcp_fb.generic_nack_enabled & rs->rtcp_fb.generic_nack_enabled; + result->streams[i].rtcp_fb.tmmbr_enabled = ls->rtcp_fb.tmmbr_enabled & rs->rtcp_fb.tmmbr_enabled; ++j; } else ms_warning("No matching stream for %i",i); @@ -569,6 +571,9 @@ int offer_answer_initiate_incoming(const SalMediaDescription *local_capabilities }else ms_warning("Unknown protocol for mline %i, declining",i); if (ls){ initiate_incoming(ls,rs,&result->streams[i],one_matching_codec); + // Handle global RTCP FB attributes + result->streams[i].rtcp_fb.generic_nack_enabled = rs->rtcp_fb.generic_nack_enabled; + result->streams[i].rtcp_fb.tmmbr_enabled = rs->rtcp_fb.tmmbr_enabled; // Handle media RTCP XR attribute memset(&result->streams[i].rtcp_xr, 0, sizeof(result->streams[i].rtcp_xr)); if (rs->rtcp_xr.enabled == TRUE) { diff --git a/include/sal/sal.h b/include/sal/sal.h index 80f334835..12015b105 100644 --- a/include/sal/sal.h +++ b/include/sal/sal.h @@ -230,6 +230,7 @@ typedef struct SalStreamDescription{ SalSrtpCryptoAlgo crypto[SAL_CRYPTO_ALGO_MAX]; unsigned int crypto_local_tag; int max_rate; + OrtpRtcpFbConfiguration rtcp_fb; OrtpRtcpXrConfiguration rtcp_xr; SalIceCandidate ice_candidates[SAL_MEDIA_DESCRIPTION_MAX_ICE_CANDIDATES]; SalIceRemoteCandidate ice_remote_candidates[SAL_MEDIA_DESCRIPTION_MAX_ICE_REMOTE_CANDIDATES]; diff --git a/mediastreamer2 b/mediastreamer2 index 0b72fb676..dba58b24d 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 0b72fb676c24356a548710c5e3a1d0ee3a1dbd70 +Subproject commit dba58b24d9ae6772a17513d66aebf55f45e63030 diff --git a/oRTP b/oRTP index 5aa889bfe..79e8c769e 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit 5aa889bfe539f6b83962334adb9f49aa76bc8303 +Subproject commit 79e8c769eebb7a60ba55f5bcada0aa200507d017 diff --git a/tester/call_tester.c b/tester/call_tester.c index 2cd398dcd..26dc31426 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -4381,6 +4381,58 @@ end: ms_free(hellopath); } +static void generic_nack_received(const OrtpEventData *evd, stats *st) { + if (rtcp_is_RTPFB(evd->packet)) { + switch (rtcp_RTPFB_get_type(evd->packet)) { + case RTCP_RTPFB_NACK: + st->number_of_rtcp_generic_nack++; + break; + default: + break; + } + } +} + +static void call_with_generic_nack_rtcp_feedback(void) { + LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); + LpConfig *lp; + LinphoneCall *call_marie; + bool_t call_ok; + OrtpNetworkSimulatorParams params = { 0 }; + int dummy = 0; + + params.enabled = TRUE; + params.loss_rate = 10; + params.consecutive_loss_probability = 0.75; + params.mode = OrtpNetworkSimulatorOutbound; + linphone_core_set_avpf_mode(marie->lc, LinphoneAVPFEnabled); + linphone_core_set_avpf_mode(pauline->lc, LinphoneAVPFEnabled); + lp = linphone_core_get_config(pauline->lc); + lp_config_set_int(lp, "rtp", "rtcp_fb_generic_nack_enabled", 1); + + + BC_ASSERT_TRUE(call_ok = call(pauline, marie)); + if (!call_ok) goto end; + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 1)); + call_marie = linphone_core_get_current_call(marie->lc); + if (call_marie) { + rtp_session_enable_network_simulation(call_marie->audiostream->ms.sessions.rtp_session, ¶ms); + ortp_ev_dispatcher_connect(media_stream_get_event_dispatcher(&call_marie->audiostream->ms), + ORTP_EVENT_RTCP_PACKET_RECEIVED, RTCP_RTPFB, (OrtpEvDispatcherCb)generic_nack_received, &marie->stat); + } + + BC_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &marie->stat.number_of_rtcp_generic_nack, 5, 5000)); + linphone_core_terminate_all_calls(pauline->lc); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + +end: + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); +} + test_t call_tests[] = { { "Early declined call", early_declined_call }, { "Call declined", call_declined }, @@ -4507,7 +4559,8 @@ test_t call_tests[] = { { "Simple stereo call with opus", simple_stereo_call_opus }, { "Simple mono call with opus", simple_mono_call_opus }, { "Call with FQDN in SDP", call_with_fqdn_in_sdp}, - { "Call with RTP IO mode", call_with_rtp_io_mode } + { "Call with RTP IO mode", call_with_rtp_io_mode }, + { "Call with generic NACK RTCP feedback", call_with_generic_nack_rtcp_feedback } }; test_suite_t call_test_suite = { diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index 98e2e146c..340c0887b 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -224,6 +224,7 @@ typedef struct _stats { int video_upload_bandwidth[3]; int current_bandwidth_index; + int number_of_rtcp_generic_nack; }stats; From 7af50993098982c3a2dbd1e3719e17dd72f4ecbd Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Mon, 3 Aug 2015 11:24:19 +0200 Subject: [PATCH 023/134] ms_audio_diff: update ms2 and call tester --- mediastreamer2 | 2 +- tester/call_tester.c | 31 ++++++++++++++++--------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/mediastreamer2 b/mediastreamer2 index dba58b24d..c946c7c51 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit dba58b24d9ae6772a17513d66aebf55f45e63030 +Subproject commit c946c7c5181e2b0325e45474ca597d0b25425d2d diff --git a/tester/call_tester.c b/tester/call_tester.c index 26dc31426..f36682981 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -674,7 +674,7 @@ static void call_with_specified_codec_bitrate(void) { liblinphone_tester_check_rtcp(marie,pauline); /*wait a bit that bitstreams are stabilized*/ wait_for_until(marie->lc, pauline->lc, NULL, 0, 2000); - + BC_ASSERT_LOWER(linphone_core_manager_get_mean_audio_down_bw(marie), min_bw+5+min_bw*.1, int, "%i"); BC_ASSERT_GREATER(linphone_core_manager_get_mean_audio_down_bw(marie), 10, int, "%i"); /*check that at least something is received */ BC_ASSERT_GREATER(linphone_core_manager_get_mean_audio_down_bw(pauline), (max_bw-5-max_bw*.1), int, "%i"); @@ -2313,8 +2313,8 @@ static void call_with_file_player(void) { int attempts; double similar=1; const double threshold = 0.9; - - /*this test is actually attempted three times in case of failure, because the audio comparison at the end is very sensitive to + + /*this test is actually attempted three times in case of failure, because the audio comparison at the end is very sensitive to * jitter buffer drifts, which sometimes happen if the machine is unable to run the test in good realtime conditions */ for (attempts=0; attempts<3; attempts++){ reset_counters(&marie->stat); @@ -4197,6 +4197,11 @@ static void video_call_ice_params() { } #endif +static void completion_cb(void *user_data, int percentage){ + fprintf(stdout,"%i %% completed\r",percentage); + fflush(stdout); +} + static void simple_stereo_call(const char *codec_name, int clock_rate, int bitrate_override, bool_t stereo) { int begin; int leaked_objects; @@ -4247,20 +4252,16 @@ static void simple_stereo_call(const char *codec_name, int clock_rate, int bitra }else{ #if !defined(__arm__) && !defined(__arm64__) && !TARGET_IPHONE_SIMULATOR && !defined(ANDROID) double similar; - double min_threshold; - if (stereo){ - min_threshold = .7f; - BC_ASSERT_EQUAL(ms_audio_diff(stereo_file,recordpath,&similar,audio_cmp_max_shift,NULL,NULL), 0, int, "%d"); - BC_ASSERT_GREATER(similar, min_threshold, float, "%f"); - BC_ASSERT_LOWER(similar, 1.f, float, "%f"); - }else{ - double max_threshold = .6f; - min_threshold = .5f; + double min_threshold = .7f; + double max_threshold = 1.f; + if (!stereo){ /*when opus doesn't transmit stereo, the cross correlation is around 0.54 : as expected, it is not as good as in full stereo mode*/ - BC_ASSERT_EQUAL(ms_audio_diff(stereo_file,recordpath,&similar,audio_cmp_max_shift,NULL,NULL), 0, int, "%d"); - BC_ASSERT_GREATER(similar, min_threshold, float, "%f"); - BC_ASSERT_LOWER(similar, max_threshold, float, "%f"); + min_threshold = .5f; + max_threshold = .6f; } + BC_ASSERT_EQUAL(ms_audio_diff(recordpath, stereo_file,&similar,audio_cmp_max_shift,completion_cb,NULL), 0, int, "%d"); + BC_ASSERT_GREATER(similar, min_threshold, float, "%f"); + BC_ASSERT_LOWER(similar, max_threshold, float, "%f"); #endif } From f9a242f3f860629fda0094f38dbe97c923b55044 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 3 Aug 2015 16:21:07 +0200 Subject: [PATCH 024/134] fix test "call with rtp io mode" --- tester/call_tester.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tester/call_tester.c b/tester/call_tester.c index f36682981..00a21444f 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -4335,6 +4335,7 @@ static void call_with_rtp_io_mode(void) { linphone_core_use_files(marie->lc, TRUE); linphone_core_set_play_file(marie->lc, NULL); linphone_core_set_record_file(marie->lc, recordpath); + linphone_core_use_files(pauline->lc, FALSE); /* The callee uses the RTP IO mode with the PCMU codec to send back audio to the caller. */ disable_all_audio_codecs_except_one(pauline->lc, "pcmu", -1); From b280b12cb6ecca78ed9e0e2a6cf0ea05acc7b429 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 3 Aug 2015 16:26:20 +0200 Subject: [PATCH 025/134] fix compilation errors --- coreapi/linphonecall.c | 2 +- oRTP | 2 +- tester/call_tester.c | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 46c301c44..b942010c6 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -2395,7 +2395,7 @@ static int find_crypto_index_from_tag(const SalSrtpCryptoAlgo crypto[],unsigned return -1; } -static void configure_rtp_session_for_rtcp_fb(LinphoneCall *call, SalStreamDescription *stream) { +static void configure_rtp_session_for_rtcp_fb(LinphoneCall *call, const SalStreamDescription *stream) { RtpSession *session = NULL; if (stream->type == SalAudio) { diff --git a/oRTP b/oRTP index 79e8c769e..7383e9725 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit 79e8c769eebb7a60ba55f5bcada0aa200507d017 +Subproject commit 7383e9725b5861a7cb65f0be62d0eb0af7c2ede9 diff --git a/tester/call_tester.c b/tester/call_tester.c index 00a21444f..b0bb676c5 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -4402,7 +4402,6 @@ static void call_with_generic_nack_rtcp_feedback(void) { LinphoneCall *call_marie; bool_t call_ok; OrtpNetworkSimulatorParams params = { 0 }; - int dummy = 0; params.enabled = TRUE; params.loss_rate = 10; From 15fcd2487dc5b222152bec5ab67c7264e535b752 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 3 Aug 2015 17:10:43 +0200 Subject: [PATCH 026/134] fix test "Call with specified codec bitrate". --- tester/call_tester.c | 108 +++++++++++++++++++++++-------------------- 1 file changed, 59 insertions(+), 49 deletions(-) diff --git a/tester/call_tester.c b/tester/call_tester.c index b0bb676c5..4a07bd9a2 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -158,7 +158,6 @@ void linphone_call_cb(LinphoneCall *call,void * user_data) { void liblinphone_tester_check_rtcp(LinphoneCoreManager* caller, LinphoneCoreManager* callee) { LinphoneCall *c1,*c2; - int dummy=0; MSTimeSpec ts; c1=linphone_core_get_current_call(caller->lc); @@ -173,15 +172,15 @@ void liblinphone_tester_check_rtcp(LinphoneCoreManager* caller, LinphoneCoreMana liblinphone_tester_clock_start(&ts); do { - if (linphone_call_get_audio_stats(c1)->round_trip_delay >0.0 - && linphone_call_get_audio_stats(c2)->round_trip_delay >0.0 + if (linphone_call_get_audio_stats(c1)->round_trip_delay > 0.0 + && linphone_call_get_audio_stats(c2)->round_trip_delay > 0.0 && (!linphone_call_log_video_enabled(linphone_call_get_call_log(c1)) || linphone_call_get_video_stats(c1)->round_trip_delay>0.0) && (!linphone_call_log_video_enabled(linphone_call_get_call_log(c2)) || linphone_call_get_video_stats(c2)->round_trip_delay>0.0)) { break; } - wait_for_until(caller->lc,callee->lc,&dummy,1,20); /*just to sleep while iterating*/ - }while (!liblinphone_tester_clock_elapsed(&ts,12000)); + wait_for_until(caller->lc,callee->lc,NULL,0,20); /*just to sleep while iterating*/ + }while (!liblinphone_tester_clock_elapsed(&ts,15000)); BC_ASSERT_TRUE(linphone_call_get_audio_stats(c1)->round_trip_delay>0.0); BC_ASSERT_TRUE(linphone_call_get_audio_stats(c2)->round_trip_delay>0.0); if (linphone_call_log_video_enabled(linphone_call_get_call_log(c1))) { @@ -653,6 +652,9 @@ static void call_with_specified_codec_bitrate(void) { #endif } #endif + /*Force marie to play from file: if soundcard is used and it is silient, then vbr mode will drop down the bitrate + Note that a play file is already set by linphone_core_manager_new() (but not used)*/ + linphone_core_set_use_files(marie->lc, TRUE); if (linphone_core_find_payload_type(marie->lc,codec,rate,-1)==NULL){ BC_PASS("opus codec not supported, test skipped."); @@ -4325,55 +4327,63 @@ static void call_with_rtp_io_mode(void) { LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); LinphonePlayer *player; char *hellopath = bc_tester_res("sounds/ahbahouaismaisbon.wav"); - char *recordpath = create_filepath(bc_tester_get_writable_dir_prefix(), "record-call_with_file_player", "wav"); + char *recordpath = create_filepath(bc_tester_get_writable_dir_prefix(), "record-call_with_rtp_io_mode", "wav"); bool_t call_ok; + int attempts; + double similar=1; + const double threshold = 0.9; - /* Make sure that the record file doesn't already exists, otherwise this test will append new samples to it. */ - unlink(recordpath); + /*this test is actually attempted three times in case of failure, because the audio comparison at the end is very sensitive to + * jitter buffer drifts, which sometimes happen if the machine is unable to run the test in good realtime conditions */ + for (attempts=0; attempts<3; attempts++){ + /* Make sure that the record file doesn't already exists, otherwise this test will append new samples to it. */ + unlink(recordpath); + reset_counters(&marie->stat); + reset_counters(&pauline->stat); + + /* The caller uses files instead of soundcard in order to avoid mixing soundcard input with file played using call's player. */ + linphone_core_use_files(marie->lc, TRUE); + linphone_core_set_play_file(marie->lc, NULL); + linphone_core_set_record_file(marie->lc, recordpath); + linphone_core_use_files(pauline->lc, FALSE); - /* The caller uses files instead of soundcard in order to avoid mixing soundcard input with file played using call's player. */ - linphone_core_use_files(marie->lc, TRUE); - linphone_core_set_play_file(marie->lc, NULL); - linphone_core_set_record_file(marie->lc, recordpath); - linphone_core_use_files(pauline->lc, FALSE); + /* The callee uses the RTP IO mode with the PCMU codec to send back audio to the caller. */ + disable_all_audio_codecs_except_one(pauline->lc, "pcmu", -1); + lp_config_set_int(pauline->lc->config, "sound", "rtp_io", 1); + lp_config_set_string(pauline->lc->config, "sound", "rtp_local_addr", "127.0.0.1"); + lp_config_set_string(pauline->lc->config, "sound", "rtp_remote_addr", "127.0.0.1"); + lp_config_set_int(pauline->lc->config, "sound", "rtp_local_port", 17076); + lp_config_set_int(pauline->lc->config, "sound", "rtp_remote_port", 17076); + lp_config_set_string(pauline->lc->config, "sound", "rtp_map", "pcmu/8000/1"); - /* The callee uses the RTP IO mode with the PCMU codec to send back audio to the caller. */ - disable_all_audio_codecs_except_one(pauline->lc, "pcmu", -1); - lp_config_set_int(pauline->lc->config, "sound", "rtp_io", 1); - lp_config_set_string(pauline->lc->config, "sound", "rtp_local_addr", "127.0.0.1"); - lp_config_set_string(pauline->lc->config, "sound", "rtp_remote_addr", "127.0.0.1"); - lp_config_set_int(pauline->lc->config, "sound", "rtp_local_port", 17076); - lp_config_set_int(pauline->lc->config, "sound", "rtp_remote_port", 17076); - lp_config_set_string(pauline->lc->config, "sound", "rtp_map", "pcmu/8000/1"); - - BC_ASSERT_TRUE((call_ok = call(marie, pauline))); - if (!call_ok) goto end; - player = linphone_call_get_player(linphone_core_get_current_call(marie->lc)); - BC_ASSERT_PTR_NOT_NULL(player); - if (player) { - BC_ASSERT_TRUE(linphone_player_open(player, hellopath, on_eof, marie) == 0); - BC_ASSERT_TRUE(linphone_player_start(player) == 0); - } - - /* This assert should be modified to be at least as long as the WAV file */ - BC_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &marie->stat.number_of_player_eof, 1, 10000)); - - linphone_core_terminate_all_calls(marie->lc); - BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); - BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); - - if (ms_tags_list_contains_tag(ms_factory_get_platform_tags(ms_factory_get_fallback()), "embedded")) { - ms_warning("Cannot run audio diff on embedded platform"); - remove(recordpath); - } else { - double similar; - const int threshold = 90; - BC_ASSERT_EQUAL(ms_audio_diff(hellopath, recordpath, &similar, audio_cmp_max_shift, NULL, NULL), 0, int, "%d"); - BC_ASSERT_GREATER(100 * similar, threshold, int, "%d"); - BC_ASSERT_LOWER(100 * similar, 100, int, "%d"); - if ((threshold < (100 * similar)) && ((100 * similar) < 100)) { - remove(recordpath); + BC_ASSERT_TRUE((call_ok = call(marie, pauline))); + if (!call_ok) goto end; + player = linphone_call_get_player(linphone_core_get_current_call(marie->lc)); + BC_ASSERT_PTR_NOT_NULL(player); + if (player) { + BC_ASSERT_TRUE(linphone_player_open(player, hellopath, on_eof, marie) == 0); + BC_ASSERT_TRUE(linphone_player_start(player) == 0); } + + /* This assert should be modified to be at least as long as the WAV file */ + BC_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &marie->stat.number_of_player_eof, 1, 10000)); + + linphone_core_terminate_all_calls(marie->lc); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + + if (ms_tags_list_contains_tag(ms_factory_get_platform_tags(ms_factory_get_fallback()), "embedded")) { + ms_warning("Cannot run audio diff on embedded platform"); + remove(recordpath); + } else { + BC_ASSERT_EQUAL(ms_audio_diff(hellopath, recordpath, &similar, audio_cmp_max_shift, NULL, NULL), 0, int, "%d"); + if (similar>=threshold) break; + } + } + BC_ASSERT_GREATER(similar, threshold, double, "%g"); + BC_ASSERT_LOWER(similar, 1.0, double, "%g"); + if (similar >= threshold && similar <= 1.0) { + remove(recordpath); } end: From 2a3e4c46abc32f9f44e82a8af7738d323ff0976d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Mon, 3 Aug 2015 17:21:29 +0200 Subject: [PATCH 027/134] Use icons designed by Kerosine for speaker and microphone icons --- gtk/incall_view.c | 43 ++++----- gtk/main.c | 11 +++ gtk/main.ui | 11 +-- pixmaps/CMakeLists.txt | 5 + pixmaps/Makefile.am | 11 +-- .../16x16/status/linphone-micro-enabled.png | Bin 0 -> 505 bytes .../16x16/status/linphone-micro-muted.png | Bin 0 -> 620 bytes .../16x16/status/linphone-speaker-enabled.png | Bin 0 -> 562 bytes .../16x16/status/linphone-speaker-muted.png | Bin 0 -> 722 bytes pixmaps/hicolor/24x24/status/.directory | 4 + .../24x24/status/linphone-micro-enabled.png | Bin 0 -> 767 bytes .../24x24/status/linphone-micro-muted.png | Bin 0 -> 948 bytes .../24x24/status/linphone-speaker-enabled.png | Bin 0 -> 766 bytes .../24x24/status/linphone-speaker-muted.png | Bin 0 -> 1084 bytes .../32x32/status/linphone-micro-enabled.png | Bin 0 -> 963 bytes .../32x32/status/linphone-micro-muted.png | Bin 0 -> 1217 bytes .../32x32/status/linphone-speaker-enabled.png | Bin 0 -> 1024 bytes .../32x32/status/linphone-speaker-muted.png | Bin 0 -> 1465 bytes .../48x48/status/linphone-micro-enabled.png | Bin 0 -> 1463 bytes .../48x48/status/linphone-micro-muted.png | Bin 0 -> 1906 bytes .../48x48/status/linphone-speaker-enabled.png | Bin 0 -> 1442 bytes .../48x48/status/linphone-speaker-muted.png | Bin 0 -> 2160 bytes pixmaps/mic_active.png | Bin 3523 -> 0 bytes pixmaps/mic_muted.png | Bin 3716 -> 0 bytes pixmaps/speaker.png | Bin 455 -> 0 bytes pixmaps/svg/.directory | 4 + pixmaps/svg/linphone-micro-enabled.svg | 78 +++++++++++++++ pixmaps/svg/linphone-micro-muted.svg | 90 ++++++++++++++++++ pixmaps/svg/linphone-speaker-enabled.svg | 87 +++++++++++++++++ pixmaps/svg/linphone-speaker-muted.svg | 76 +++++++++++++++ 30 files changed, 384 insertions(+), 36 deletions(-) create mode 100644 pixmaps/hicolor/16x16/status/linphone-micro-enabled.png create mode 100644 pixmaps/hicolor/16x16/status/linphone-micro-muted.png create mode 100644 pixmaps/hicolor/16x16/status/linphone-speaker-enabled.png create mode 100644 pixmaps/hicolor/16x16/status/linphone-speaker-muted.png create mode 100644 pixmaps/hicolor/24x24/status/.directory create mode 100644 pixmaps/hicolor/24x24/status/linphone-micro-enabled.png create mode 100644 pixmaps/hicolor/24x24/status/linphone-micro-muted.png create mode 100644 pixmaps/hicolor/24x24/status/linphone-speaker-enabled.png create mode 100644 pixmaps/hicolor/24x24/status/linphone-speaker-muted.png create mode 100644 pixmaps/hicolor/32x32/status/linphone-micro-enabled.png create mode 100644 pixmaps/hicolor/32x32/status/linphone-micro-muted.png create mode 100644 pixmaps/hicolor/32x32/status/linphone-speaker-enabled.png create mode 100644 pixmaps/hicolor/32x32/status/linphone-speaker-muted.png create mode 100644 pixmaps/hicolor/48x48/status/linphone-micro-enabled.png create mode 100644 pixmaps/hicolor/48x48/status/linphone-micro-muted.png create mode 100644 pixmaps/hicolor/48x48/status/linphone-speaker-enabled.png create mode 100644 pixmaps/hicolor/48x48/status/linphone-speaker-muted.png delete mode 100644 pixmaps/mic_active.png delete mode 100644 pixmaps/mic_muted.png delete mode 100644 pixmaps/speaker.png create mode 100644 pixmaps/svg/.directory create mode 100644 pixmaps/svg/linphone-micro-enabled.svg create mode 100644 pixmaps/svg/linphone-micro-muted.svg create mode 100644 pixmaps/svg/linphone-speaker-enabled.svg create mode 100644 pixmaps/svg/linphone-speaker-muted.svg diff --git a/gtk/incall_view.c b/gtk/incall_view.c index 15b1396bb..db056fdc8 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -646,16 +646,26 @@ static void volume_control_value_changed(GtkScaleButton *button, gdouble value, } } +static void volume_control_button_update_value(GtkWidget *widget) { + LinphoneCall *call = (LinphoneCall *)g_object_get_data(G_OBJECT(widget), "call"); + VolumeControlType type = (VolumeControlType)g_object_get_data(G_OBJECT(widget), "type"); + + if(type == VOLUME_CTRL_PLAYBACK) { + gtk_scale_button_set_value(GTK_SCALE_BUTTON(widget), linphone_call_get_speaker_volume_gain(call)); + } else if(type == VOLUME_CTRL_RECORD) { + gtk_scale_button_set_value(GTK_SCALE_BUTTON(widget), linphone_call_get_microphone_volume_gain(call)); + } +} + +static gboolean volume_control_button_enter_event_handler(GtkWidget *widget) { + volume_control_button_update_value(widget); + return FALSE; +} + static void volume_control_init(GtkWidget *vol_ctrl, VolumeControlType type, LinphoneCall *call) { g_object_set_data(G_OBJECT(vol_ctrl), "call", call); g_object_set_data(G_OBJECT(vol_ctrl), "type", (gpointer)type); - - if(type == VOLUME_CTRL_PLAYBACK) { - gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_speaker_volume_gain(call)); - } else if(type == VOLUME_CTRL_RECORD) { - gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_microphone_volume_gain(call)); - } - + g_signal_connect(G_OBJECT(vol_ctrl), "enter-notify-event", G_CALLBACK(volume_control_button_enter_event_handler), NULL); g_signal_connect(G_OBJECT(vol_ctrl), "value-changed", G_CALLBACK(volume_control_value_changed), NULL); } @@ -864,22 +874,11 @@ void linphone_gtk_in_call_view_set_transfer_status(LinphoneCall *call,LinphoneCa } void linphone_gtk_draw_mute_button(GtkButton *button, gboolean active){ + const char *icon_name = active ? "linphone-micro-muted" : "linphone-micro-enabled"; + GtkWidget *image = gtk_image_new_from_icon_name(icon_name, GTK_ICON_SIZE_BUTTON); + gtk_button_set_image(button, image); + gtk_widget_show(image); g_object_set_data(G_OBJECT(button),"active",GINT_TO_POINTER(active)); - if (active){ - GtkWidget *image=create_pixmap("mic_muted.png"); - /*gtk_button_set_label(GTK_BUTTON(button),_("Unmute"));*/ - if (image!=NULL) { - gtk_button_set_image(GTK_BUTTON(button),image); - gtk_widget_show(image); - } - }else{ - GtkWidget *image=create_pixmap("mic_active.png"); - /*gtk_button_set_label(GTK_BUTTON(button),_("Mute"));*/ - if (image!=NULL) { - gtk_button_set_image(GTK_BUTTON(button),image); - gtk_widget_show(image); - } - } } void linphone_gtk_mute_clicked(GtkButton *button){ diff --git a/gtk/main.c b/gtk/main.c index f9bc2722d..5a03ac033 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -2124,6 +2124,17 @@ int main(int argc, char *argv[]){ /*for pulseaudio:*/ g_setenv("PULSE_PROP_media.role", "phone", TRUE); #endif + + /* Add the data directory of Linphone to XDG_DATA_DIRS to enable GTK+ to find + the Linphone specific icons */ + tmp = g_getenv("XDG_DATA_DIRS"); + if(tmp && strlen(tmp) > 0) { + char *xdg_data_dirs = g_strdup_printf("%s:%s", tmp, PACKAGE_DATA_DIR "/linphone"); + g_setenv("XDG_DATA_DIRS", xdg_data_dirs, TRUE); + g_free(xdg_data_dirs); + } else { + g_setenv("XDG_DATA_DIRS", PACKAGE_DATA_DIR "/linphone", FALSE); + } lang=linphone_gtk_get_lang(config_file); if (lang == NULL || lang[0]=='\0'){ diff --git a/gtk/main.ui b/gtk/main.ui index 50f2a106f..3f9d7fbe5 100644 --- a/gtk/main.ui +++ b/gtk/main.ui @@ -2,6 +2,7 @@ + True False @@ -304,10 +305,7 @@ none False vertical - audio-volume-muted -audio-volume-high -audio-volume-low -audio-volume-medium + linphone-micro-enabled False @@ -350,10 +348,7 @@ audio-volume-medium none False vertical - audio-volume-muted -audio-volume-high -audio-volume-low -audio-volume-medium + linphone-speaker-enabled False diff --git a/pixmaps/CMakeLists.txt b/pixmaps/CMakeLists.txt index 800869425..8ad2c4485 100644 --- a/pixmaps/CMakeLists.txt +++ b/pixmaps/CMakeLists.txt @@ -27,6 +27,11 @@ install(FILES ${PIXMAPS} PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ ) +install(DIRECTORY hicolor DESTINATION ${PACKAGE_DATA_DIR}/linphone/icons + FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ + DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE +) + install(FILES linphone.png DESTINATION ${PACKAGE_DATA_DIR}/icons/hicolor/48x48/apps PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am index b0fb73d8a..2b26e25f0 100644 --- a/pixmaps/Makefile.am +++ b/pixmaps/Makefile.am @@ -1,6 +1,5 @@ pixmapdir=$(datadir)/pixmaps/linphone - -pixmap_DATA= \ +dist_pixmap_DATA= \ hold_on.png hold_off.png \ mic_muted.png mic_active.png \ linphone.png linphone-banner.png \ @@ -21,9 +20,9 @@ pixmap_DATA= \ notok.png -iconsdir=$(datadir)/icons/hicolor/48x48/apps +appicondir=$(datadir)/icons/hicolor/48x48/apps +dist_appicon_DATA= linphone.png -icons_DATA= linphone.png +iconsdir=$(datadir)/linphone/icons +dist_icons_DATA=hicolor - -EXTRA_DIST=$(pixmap_DATA) $(icons_DATA) diff --git a/pixmaps/hicolor/16x16/status/linphone-micro-enabled.png b/pixmaps/hicolor/16x16/status/linphone-micro-enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..c0aae0a2a8cb3ab28eee75d9036e7f0d849ac377 GIT binary patch literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ zFm424#>5#Kd_Y0T64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1TqL5e~$ zOL9^fax;^Q^5aud(-KQ_N;rz5oq>jhd%8G=SoAKPXz0!CDA0QU_TKKPTumLNTpO=h z3FVnf3FsbbbXvn=y|KHub?PLiHEaL!%c-a>jfl7r(J5Hpz?O4HF#ot#!V^80+Pi1! zexE%cAj#R3(48Xc@Mey6_V(N6nRC3drINK&!fWoY?>I5<+OHK6I(j|23>)75{+B4? zTDbaZ6>GqEoAr~}swA6EYINOWZ|&IAdE!jInS`}7Q})|)8arb2{3Vmkj9Ha}WK}yJ zSBM?RTJ}KSQ*?sQA%iQ;w=ADeelvLvgFrf$hn;k?7~`GN-FLS-#%J&4dl06%)#cN} z-}4t5cb#BucwD!C|Le+oOShVdOw4?Kr~BG3E6+*Vlcb%U>(}M?++^RNqhz{t%DJaS z@_Xa*=RMgOwCY}l$t`78h5)UpT<3N&GZZULnoy%uc`L_E{_>AAERF%j$7Tec*?)e; rX1O(6)ft>7wbt1EzxlG{-Q^wnE1ws&dM|VW#Q=k+tDnm{r-UW|ZiC6M literal 0 HcmV?d00001 diff --git a/pixmaps/hicolor/16x16/status/linphone-micro-muted.png b/pixmaps/hicolor/16x16/status/linphone-micro-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..335a2532c4bbfda8522779280e68d36542a8714f GIT binary patch literal 620 zcmV-y0+aoTP)@=LjV8)%1J~)R5*=| zk-uvcQ5?i)_U&>A{@`pxhyl|`>f?&DF~`1Li%V>-QHUrh0)mx=Hfcl$=-TQOv38M*!DInnt6sn`PNa5!o=t+>YaTrxFl` z;pw6%o&i`i#>|MwLsdPIWm!q`3(4zo9Dm-o7Xb8ny=I>0uK-+4lH}{e^nL#($#+ST zBvoVo9kJbR?*LeuF8{AsX9PiTS5=ot{sQo5I2=B$%KZT_*Sdyxdzyp*0000E=yQ0JZ00E9kL_t(I zjh#_FXcR#hec%2dM>OQXBB>&GMZi)^Q%tcl$5kdln-tcfg<_FL8!N$9B7%sG78X`k z+1)#~u{_dR4Twz$31=fGH@ow!BFE(<)ubuPHbthIgw zAR~Eu9v?Ls`~ChU=iFtq>-E;0a|M82zB}o_X(|U%0{?ycdzXWm%>GZvIcebrCs=%#5r8TPf)7cO{GQPrj>qGtqtVFK0|tY^V`I#c_x?&8$1kF)scV>i_@%07*qoM6N<$g5N0i A3IG5A literal 0 HcmV?d00001 diff --git a/pixmaps/hicolor/16x16/status/linphone-speaker-muted.png b/pixmaps/hicolor/16x16/status/linphone-speaker-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..897024cd994e4f60daea3931fffd6324f1f2ec15 GIT binary patch literal 722 zcmV;@0xkWCP)E=yQ0JZ00J&aL_t(I zjg65%Xj4%X#=mpleUuBpX0v+$ToXbRwAQZyK!#y>ftmOA0@5@+OGLM|);9of z7=|FC5$D{bl=8&l;^I;iMF-!16rlh5ZX%zO;MW3BZUrPNZV)0rfqtIoN~R$m~c)GZ<^5z#Dw zl{I~ih|1R57{F-XFO_bG<^nHJbnZN%t!CH6@K-OAY ztX8Yby*@L4?RLBOopVzF79@aF2=P!U^@oT=tJOLTV5Qw|A89t5D;pcsYPHKz6zy=% z?eu;Bx=hn_!t=ag00Yci0q_>Uawd~m2!h~rk|f_YLgG071z-XIM5EDoW37D-V2YXF zS!+XM%mfitrIatDC>q`3&=93kX_u7J0Qiv0<<2EZVgaz$dIrE1=iF0f9@`YKy1F_= zM0I1##p&s3*J~PMo&X2|9AIYGAF+)Jf?zNRg5CYRzc<+St_IFzQvd(}07*qoM6N<$ Eg4BFGI{*Lx literal 0 HcmV?d00001 diff --git a/pixmaps/hicolor/24x24/status/.directory b/pixmaps/hicolor/24x24/status/.directory new file mode 100644 index 000000000..c8a3bf660 --- /dev/null +++ b/pixmaps/hicolor/24x24/status/.directory @@ -0,0 +1,4 @@ +[Dolphin] +PreviewsShown=true +Timestamp=2015,8,3,15,21,55 +Version=3 diff --git a/pixmaps/hicolor/24x24/status/linphone-micro-enabled.png b/pixmaps/hicolor/24x24/status/linphone-micro-enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..0406019040d65df08e0e4b42fb58019e3b3e10b5 GIT binary patch literal 767 zcmV@=LjV8*T}ebiR7i=v zl+R04Q545N=e`*j41yUm!!pRIRYf$E3ke42J;`KRM7C(zk3~h`CMZafmVvYs`UeDq zl5C22j!Fd~IGe~#p^Fw-8>eaGb9~*?A_XyNj z5m11ho}T3L^74#`-0^*XxSHNnYxef`I;wg`MDDJc1LX7hlBx~@XKO836;LjhTL3dY zKK^NAPeeYb>cPJPgkfk{xA_Ku65)ue0{%s9J)pC*bGPfdWA&K0uDjQD-O)&Zcs#xX zNY?`}#xw!PA_4w&Z9O0i!xbP7V2r7C6&1i*8wXY*0TPMC0+7n(at))l0oleJ7 zsnj{(K9KL|=(sj8FktHf0OWGHh9C%Tsp<_?{br2$sHzFzFz{7G`hDMjRL!I2Z@9K` zGMQ`#9;oWHwRUK7a&k6`wyttrchq&=EA?pp`%8{=MA>Y%*>Rjb*4jbfwJ~P2QmM>N xO-%*0w2=~sNT0QK1ZV{=SZhZd$2l2A`xAip>0O|^KEVJ0002ovPDHLkV1l-rR2BdL literal 0 HcmV?d00001 diff --git a/pixmaps/hicolor/24x24/status/linphone-micro-muted.png b/pixmaps/hicolor/24x24/status/linphone-micro-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..4f930da9a042daff78d76fb03cf62deb54c89d2d GIT binary patch literal 948 zcmV;l155mgP)@=LjV8+5=lfsR7i=X zR844eHoZeq#^YWs)DAFO3A!j*WK#%8OHz>1P#2lR&4grp$AvQ*CgaQ(JiGVqx#!&b?&As) zpu4*}-O$i5OtM`>UXXkg$MM4?xj{WbZ*T8*0Dq9&2VhD>UMi)|x3si;Ha|cAAc;v$ zSZi-?yuAD|02M{iv&xu={6(_0d^W~(le|yzhw<_8=ZOr8#iCkYd4&N{ zdN!?f7l16upW-`4mO&C|t-C~I48X}aj&D`Q-`8Nbh&&XLVdvc4YJ?3>)YH?m z%NR3OPnqN{09#0&AUSP}$tE&LrBd4fwAB(1!|))0s{o$HaXhM&+7950Lj4|H( zF_Jfv@HaIBt+fR(Dk4Lrm2t3M&V~+(#o`)(6aXlt-h4%CZ73q6A~NKh`>jML0C?|H z0M-&2q|@mI03Qtu3}o{8{6a~5h~!<8$IId*KOs2>03xynz<-Gha=Ba{z-*yV_;O}u zW=%w%kh}rlyEu-s01$>@BY-od{}1ndAIZnn464pRM1CfDPHVkNvb|K@urX#UfDgU* zKZ?ko&bgaf>sApt>b>8er~?34TwJ^kAP|uUB###gg--!YXliOQ0QLfSDk7&dnasb=xl84ETU%SoTKhGC%K&nnot+n>D5@s)cE^`t zt?eUuo8-5dOlD$bW#uf%QzVy^Qh$?71Na=k{~~h!T`Quhfib2Zz%2mBqA1F(ueiCn zxgEe2lGEP%Ym<|cv$cdbKx^GE=yQ0JZ00LS`L_t(Y ziLH}AXj4%b#ees`7Ypi;6uWfr&tNI&(29dXhmgGc(vYR2wSrC#Eu!GoO>s~MCs8Z9 zh*C>+5rro2B}AzTf>snnIw*pF1|g+_Li_UW=TIvJ)8@72z@6@Q&bf#0T-YEonamE) z^Y%8Ivo<2`x^B+0teGf^ZnxY(YkeAc1f-NwiDvUoT;Y5^-?q58cuho(0TVzQ(AA6= zD}mO!GYrGWN~xp3nIH%TfnRaBO%r6Z*@Gf-AK0pt8t{GpK^)<~23qUgKu@DfW6Un4 z)LG!8h@^ucm|c%JfFmNefCG&#l~S;@(4lgO!E-WkzZ|I|~g3G{2e}DhZQmOPFm3%Ps14U3aVj zFEYm5s8lMini-VK#sZ$O)N{ANIb>PZbT*qEikrmu{jaud_xAPm zjRL5(hI6@GyD{djh-lz?y@h};CeL{T(g+x95`n_wk;-yb)|q=C)0Z9fC{#o?{1rj<(Ng>BpW wfpE=yQ0JZ00WpwL_t(Y ziM5nZXdP7)#(!t-#7L`NadGls7J3IS4@Qrsp;$av*=y~4BJkO65x!&I1jz**L zuBtu@th#1{D2ny~p8_Qj=_s81hEl0?3>Z<>=d85{{dR>12M0SB78VYw>UQ9Lpc7cr z;)jQaS2P-p<3J=LyOSi@571VED2i5PSvDmi+kh96BpCtbT70!yT{$;5_c0Ivk6UZ^ zx45e&2!h~#Rs9gSNkleTYd>1dm&@fY=iHcxY!H#{*4iuj;zv<*2e57_ap&A>5qS~# zMODj5lAI}&_{NwzaF>WYY^^3ip1z^X&+6{DGG@Xp1Xw}Tj z%!Qtw9%(chCxGtG&dxQh9{iOg$@C7i~wn4R8?G=$J zK=M2ffZ4^o=XoChl4V(IV9o%ywPg^7VV`rZrmBBB=Qd7GPX17=$@6^eWutQdB616G z@u~)47?y!C;C!Cv8*8=NPfOK_$Ua~?%d&5))#^%BtpHywYY>Lv5HKbpXN@tHdcA(` zziL(WHC272UavQub1wm1z=75jtq;TSP+?Dxh*VVdv~%tOYwaJ)9VSiFx8TyVqN=-q zSCS+-=>eZ}Y0kq%YZDNtssmO71IvjohPC#*F=l;VU*BE;DHcRg^rWi32~2sOw@p@=LjV8+AxT6*R9J=W zmraNqMHI(>uewgeZbv!JO0>*h5e<)7{hUUewDV@!%;6f`{Nq(8zeui%3qn zh=_=yxE>NPEX;Phg}Q9egNP;~l4y_^{KD~L$IVPvKM%Gb!I^aL8WGI@(!73E|M#oc z4OJzqL+y6^YM@gT#SUN%c+WZambEso>m_w3L{W4Acm|jP&H$T$t-wiD?POVYvW}mr zS^Qz(5b(OHUX!NjjcJ;06Okq`B_dhboyw}*fo8MW@O}Rba4b#J`!CGLaeQr26dwa` zq-pw4Ro}`T@H{U8wm9dW`n!Cu*ZT^15$I53VU+cX@ zz!Wf=XlBe1!1w*Be;nXa=`z4rfVsK3E0QFs{4RY)#u_kp1E**7=|t2J`s5VpzPGWs(K92u?roS0EnXK72vKs z&u_BU_QNo|Q$!Yl&w;LptQ1Aj5Rne>81P}9=Yh3$EsCNCf#;1edwad!JGDCiV2n8k zTL^E{8OwQF%4?*yI&j!r6m(GCE#+wFa- z`YQ0+>gwwLm6es>0Kzc5MMQS0>cBa7+*{r#p zz!xHNu+eB7ou8i{{&h@}B-@>Hj{=W~$SGC5J5AHm7xS)sb_;@F*7LkWs=5dG2{^8* z=ZrDas=5Q%1&l=G@L(|LE-x?tQpLCSy&wpJJ)Y;?qpG(8A#e_OUsc~W#vEB(T>QGO z=eiX|(RX1OKD`l-|MXt){{UFe<+KUxE5iqXPk|3aWNkDWJ#MZ2wT_=(7eGX=Q`OyN lc%ppn2F`n)Hv`lH_#HWIJ&K)oWGVmv002ovPDHLkV1n6{zI*@x literal 0 HcmV?d00001 diff --git a/pixmaps/hicolor/32x32/status/linphone-micro-muted.png b/pixmaps/hicolor/32x32/status/linphone-micro-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..98d9a36dafddd48faba4d6854311cbb1ba985c5e GIT binary patch literal 1217 zcmV;y1U~zTP)@=LjV8-A4x<(R9J<* zmraZmMHI(>ue!5h7Rbs0{J4k;dP0%Nfh@^vcg;+=Cwu@&3eG7A(^gr$HWzaClkRK#g7;yU|`mdSzvd%p9f~iAltjli2J{Es^07O|8>>$ z>l&dA<@5O)fl`{L3xIRL7fF(QQmItxt=5uOZ?M*`1-1emz%Rf|U@mY}RZDRkA8nRf$*TrSrIyaMcV&aH~$_~dvjilWbrF#&L` zs`gD$qdfr6^NPUiBuQSFC|)j?e+AwHN=&e|*4lNx@1G9CaA8{jA~GL1KR7t}T~>~& zehqYmVK}FGJ`BV4z-z$XIF7$>7oYrimR;*ZYO|e*< zlNFyr7tM>s;`NgyW&(_kjy|6x$zUt4s=Byw-R+!P69mCMNs=75*51-GfQZZjW?iYd zwe~5X7r^)ZEr1$hW&@(CGg}5|MPV2|3+w<|`VL$b0Bdcph-?*+w}CCw3J`|j)4+CM zPZUL~MI`gr-VQ(lcv(Sf?Isb~2E6W^dz^oDxQ0A{G)EYW5A4_o}SwqMZN+2YPGsgMEZeU&bf6> z=BR3qs{VZ7z=1y-Q+EN?N~LnTWq^9UUIs=z&np284-dz{DWD`GZ#16#q6&pV06Zun zdjU$Nk_W6*)lZptdw@x{pi-#}TWbe^wYgmGP2cyQ;KI=>0m3j0?>EMLS+Ccx^E|JV zrs)RYaJ^pN2~e$8R{`@q&wC`x1Ex3=77B&=X__7Zjsv#=uNq@MOw)7^7nXNibrE@2 zM4l{{%e6wGa7UV^hk%N6Ze`m50M^;2}7Lg+GlZb5Y>gxJvU|?XhIk#9W-jF28dSH!+ z98=YMopV1<^?;cG*4h_=O(L>AilPlc5G?gPZrsT0Rwv$jz#{q%l0wxGn+C fd!E+`v;^=EjfJd`%m8&U00000NkvXXu0mjfyILs+ literal 0 HcmV?d00001 diff --git a/pixmaps/hicolor/32x32/status/linphone-speaker-enabled.png b/pixmaps/hicolor/32x32/status/linphone-speaker-enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..79ab7b1b8d91e46d864addc35e762a21ee7b149b GIT binary patch literal 1024 zcmV+b1poVqP)E=yQ0JZ00Ue}L_t(o zg~gRmXdG1>$3Ji8Z81i)SPKEsKm}7h_Mp;)Iy=1GP+}-3>z`g!G*+!BLZu!Qwio}< zn|e?|yonHc&^;u(^L8C;L=B>(6+CpI1*Is&EEMhTCbRSNu(PEgS+bk#`h{U0@ArPc z?`M9@d(UMDmCNOJjgOCyR;$(KR&$)4GEb+|6SZ1xWn*LGVm6x{9V&qD`-ffE{T|p4 z+?qT?0Z^Gt=A`2|1ztT1u(cMdUePUoUm~>VWV2w`;A> zCgxX^QV$0~@GisXfbaVU9mhEXi~$#bBS8@S+H0MTdg?$XlX=#0oUec}rPM+cMfX{2 z`!c0l zjJ5XjAP9Ok%jI%ztyX(gDHR4m@FTQ4a8DAy3^cmr{{FN86#bWi^Pbeafm&@gE`YpbheBU3BD!rz(rtJy`B6F0|%(r>!*NG z5&3#yVc`lu9LI-}@Gk=g0Oo*(h`a{id7f5E9ZzCk^nD#~RU&d&L|TII-&E`Qe@w&b8K0c%JuY7>298KyPClRC)=ugvISj+dTKh6^42Xb}OG`^%8e?u53P4BJ+K&Mr z_!F1`en_X&6GHE=yQ0JZ00k9EL_t(o zg~gX|h*VV=#((GDv!xc9g<*sR1!~ckG%DQHc4yBW+t#5!HWfmcl>MP7BEz6Qj9>aE zNKqfGh`vN6B4}HUv-iw+HCM~Bu!24)BvDdOJE3lOcD!@mKFo~hHV(V%LJwTHocB5B zd3f%Sd7g~(>J=bbolVp=|*Kh}1kqA02WOe%p?Ds_d{dUr$om{RKQFbrR%MFPf{Zs7BV_~vrCd{A(1nWfPQUIk?&RV+>>TTCKSBs+P zS8MGL#+VO*l}VDk2i!UpolqHLHi*b8rv{XIzj^O@-hQq1L1WC-0Mn;WUjrOfN-a&N z)2XTGgs%f@fhzFFSb~TQQg6*000ssI{t=P40Gx9xCT$>_&HBce_eA6=U=+9)I5C!| zwSKx$U!KWiW;BMIpTxpR8CbMvQAfF4{s>qNi~!56wcA^93x&ck@H22;9LIA2eBb}Q zQJy{FPT1GicmBzfCqD-61pao;^_NPey=UWRGMO219M1)69UUEi0yJM%V0c0aWHOl< zNs;N~tFrwe90F(BI!bYjkup58Mp=qLeaW7#XsBA<0Yv1>88yy|>wANdI zZeXu5=0R)i)`^-Ji~oFv#+VzNbGv~nfL(DM_ZA9;;V6p!Op+u3-UKcLwishx$>nnA z)XvYC90b9QKnToMO65mJM*4<^hE6^6D2ftm?Nh*`Kmx4WvuDpI#+aGsY#^OZFBOp@ za4GPK*7~k}`}W1HCRuCW0aDaApMK!0o}QlhlQz)X+k2aHZU=A?@L`f9EAsjLXuFBl z+C5t9TSVj_FyHt6Az=1|4W!fQ1xl%Hz;s|!S69~qtqzZ^uw%!LBfjr<0$ZpjchN)* z=p;#E&+~p$N^K6q@C9q_S^sWYq45uRpE2fpU_Ic~YPIS_jZ6tl9jpHr@yX&}eK0j0 TJP!C_00000NkvXXu0mjfo<+0@ literal 0 HcmV?d00001 diff --git a/pixmaps/hicolor/48x48/status/linphone-micro-enabled.png b/pixmaps/hicolor/48x48/status/linphone-micro-enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..a54697ad1c64372b1f0ef14fe47c5bbc5e9a336a GIT binary patch literal 1463 zcmV;o1xWgdP)@=LjV8;6-h)vRA_IqwLdschl7`apokm{g+l9FT3XDNCMFVz zE>(R7Kt!I3L?U&S8n1{zQ&Uq=RhI#%>V~$qwt=B!LZQ%h;3ROpZQDyKu@4mzm^g9b zO+X!hWm!o-G9Jl&Uh~dM>_g=t)ZmrB#pCe{WylrRNW)cU`9MVkM5MS03>i9u?mhAtDftm6B(tS_mmmRDYu=&~$pvR6IhSC?PI#TV36O1?s&Q252GPFTEn zajjpYUd9f~vQC%w8)F*1>W_YP`8|pIxD-Y;uIt`f;>a=J4?z0+`{((zDIzl8)BF9P zu~}Yu+@~&o1X8Kg8K4`Wn1ukyWHJ|lycfdg7{$(zg`#Vd~($Zqt zw!H?}4NL}lYHMp(_4M>y1c*c;<1EW+1I7WHve|6LuU}`v$N`CGcWx_%!K z0+C2$if!A6fhj<$P$(?QWHQAR36A5e5RnbQjDHcosH&SqqI zkxVAnmg~>3PS$8Nx)#_5SgLwRMAjse$#4D2M&!Vxkww1cSjv?d|P%SIRX?}Vzj@I7XE8=#v~kT7sM;>n)YKHLtE+oRL~ii9<^YeV>QNDSqd3nPlPbN5RtjI) zX+M}WY0`th&cXd6G7Z>TY+IJq3CypS-Kr5V#_Si7k40qs)#j<{2i39(@E7^=%38+t RpLzfQ002ovPDHLkV1o2zwnG2_ literal 0 HcmV?d00001 diff --git a/pixmaps/hicolor/48x48/status/linphone-micro-muted.png b/pixmaps/hicolor/48x48/status/linphone-micro-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..7856153ddc7b01f8c2f48a94c0ac0191a670c96c GIT binary patch literal 1906 zcmV-&2aWiNP)@=LjV8<&`Cr=RA_9wSj!Lr%x$GW<@9#T~g zFg3$Rf$yI^d-m~(iHUNj*6f%7-}k=;d=KaX5Rq4bBdU5ea3kOVsOodw-QAxZ85ud* ziFG?7!1w)ofgb{hNI^ut5r*MJWjvqH_gZW3Rn>0-^F(Cd`Sa)9J$v?)+FiS=-2k~< z?grr3K$oiiX#M*2o40P=dc4}_z<~p$g9i^jyK?2qF<=w0Jd?@Dp+kp??XF*YozBJ{ z05T%7ueZ1NzTx3v+sLs{DC}0%uL6k3S6tWanJM_%wQJv*&*xV)8gEO$z`#I8RW|^r z>UVeS*pbXMr?iM;M3H7JPe}`dsp@n&sJk`bz&2D%xd9{G5P7>;R+H^ z4?YaT=VzMd%stx776d_`suqEpX#pOt00Exo^{Z;Esy73#TWfVhy=xA@%OC+c)JC7>G5CI+QC-gp-BPh2K%w9J`>0B)2%KtgPk?Tw&feq>!IUn`f-GxhRTWNZYpq8$_fRXi7j+X|(Ew z)mGX~H*5iTU)nWNEEX&9SZiBe=d#@gT-RMJB1Pb)PR6|~0N!mn0fHd7&RRPLtOQP}suzY~$1a;{YxWGBNsqmkOg5(S{`+Q}8u*i{ z>cw$<3B0PB^ms|3%NTP_`tx*?Tuq;W${W;Trp|%_OioUo>gwtOxO!-4XkNKo?oZ)Y z04D)2j^jVq22<635y2R9qPpK&yF^3)jx{TwsWV`$J(@yy2SM=uDv(!z{{T`hmp3!@ zuDb#_VT{Q}QS=sgKt$xWH11z(##X1tBOMhG$MI=kB8A>i=^q~-e*+jzn_H{ky)X>_ zQZJV8`x{fgN#Hk?e%E!c6_Hy3thHfB1*GcC;B}tNP1fLec9!r}~ z#Buy)rNMEWO-#KbA1M}#e`pq}X#tMoJPlj~K9tMlHUSI{4lYlUn~(xm<2bTCqD(DwS64-o5)=vrH}B z$dV*^2si~?Z;bg}1zuINg+k#=s(L5zGE>=YJ#d$Z+>ye+p{iSeTdLtb&)cl3_ovMV zTY-mJRHr@9+bkm6)20=XH8qb1;(6XjjWO$hepS5y{H;_f6>8zqSWg1)0JcR@bWf{1 zEeQyM;Jwz`abQ`cPgP$Ok-HkC%(~{f?p2vg=3A9QFEF0TWClk@M*iCh540e__x%-2 z<@sg6KSbm^s`@an0I;h1Q^#>0*|~G)i;ZGP8w4a0E1=Xp1Y$fLj~s@xBWNKsW^Womyc0G5czhk=jt|8n99;K3-0o|p}I z(*jcXG2lAjc#z&d753`c>VluD&7t!~(QHm!hsKEEnSk|NW< zS6dJSeMyqs0jw60TYxpd8C88oL=GEcM#C_CfewDHY$#xGaBz9KTpmkP%Gzg_ zhUWYJJ-}8G*;gnO*0hgW-|9Y%rgzv~BC-@XrmEREj$fK9h<2>*^;#~M?^4yJz%dc| zAr`0+~H7_$qwtyAlE sOn|laSrPfAh%A`SPgS4l)S3YQ10i+GTj;WK_y7O^07*qoM6N<$f~zE%z5oCK literal 0 HcmV?d00001 diff --git a/pixmaps/hicolor/48x48/status/linphone-speaker-enabled.png b/pixmaps/hicolor/48x48/status/linphone-speaker-enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..2b65cb0576f6936cacfab1892b05c6d8096f9103 GIT binary patch literal 1442 zcmV;T1zq}yP)E=yQ0JZ00jO?L_t(& zf$dpeh*VV=|9xlg>>^v*YG?*NlweU7QEs%c(a62$Zi^a}E-V=Opcxds^iPSh@uASN zhyDpEM6f+%f?B!e?m1@~akd9@dK9}IK8 z-?``ez8`bXIo~-0{Kr9!4wz1-om49I5`bHSAb2gC&Hh}AKPREQW`&-fp7}u#>}O^V z0E7?$fTwEl*)RdV?=KI6;4pxt5l2MxYxOH?bub%vp0~;v#tQgQ0?3;4dj#9Dj2BKe~L?q}v7l8lwO0M~UN zveupga9>Cc=qu!T-WCAw14xC`A4K$|QtA_}b&{d}LLvhC`ubXn z#o`A5Hb)#0odxiiQtDI^F{VS!0@CU9jbmeD2Z$&gqx06{P(t@kFLJtDK*69B0a-7mGzzC=^PGWI7E>rP67~aV}!A9J!sD2LL<@ zR0trVlS-)r^-N|a_`bi8nSCL|(V?NCA^_xaxwEe8_7l+&04+qcMoQ@`rG^_)jaCC| z?bpma5Cp-A-rnB15pRq+MnrE%HZ#8tG^m`e5(~obJ0>P3-idd#wzlpBFdmvKR<2xm zTQdsS1i%6S5p8f?cUjaiI5;>4;ETw19A|aY3D8;(0*L0JAfm@B9vO-n%zSUt2?%j8 z*1kL5!OTC!%$u8105ks@Gv`%w$4m0LO(_7tvRHdcO+`fUjrV-h3CLtJf`~T9sLG9X zdDLL$vrQ*pWMm`*U`1$-x3#q$u6Sfs)DS`(Z#n_Y{6f?wqD;7S0+_s80w6;(u-1On zbOHbz3co*6O1&H7$y&P`Kuc)vH^y9OIssbi^;fQ3nX9$lgxDRDlyV1vp3p2=YqtXx z#T+x=>3N?U3Y^qrgGU!1jd;C|HeDHT<#YD>#xPBl+tJBPXTlQ zxSog(dY<=YcX#*8nM}skkngNf(<-Et8n)JU64Cb|MF6(u^ZC!?hmm@s=4CXS&5o8z zr3aY#P>fz(DwXoS@843Z|Cx};K9I}hemBOfC8BKz4VlBcgLewEfJPGj*$C|3@S6Cvh9?Cg(P@YybcN07*qoM6N<$f=nEjHvj+t literal 0 HcmV?d00001 diff --git a/pixmaps/hicolor/48x48/status/linphone-speaker-muted.png b/pixmaps/hicolor/48x48/status/linphone-speaker-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b8bf6d6896e0f3357d13b27d99d1bb7726daf7 GIT binary patch literal 2160 zcmV-$2#@!PP)E=yQ0JZ00+!TL_t(& zf$dsQ)-yKYwtyCn^6tb#~UENE=Eam`3(`+iKvwpeIaQKT4)ZBT2Xf^7`c ztww1Th_x63n>3n&(l!*NKejXP-r1?0)fl>sF;)pk*C-|kva^WnmYsR`^N)S6^Eym- zXLe^cG4UjuefPY3zB%8%cklh~ohAH_Vd>JP(YCg>n>^1u)8F5JhGyG9JRUcq(df4T zywCHz?_@HWe^jeovu4elv9Ym301^Ps2_Y664RcxniA18^^Su4cYyp4}!UM3m8f`L} zoI5%?dYFiA@TqqIxMbE6a2#ie=Xp;9xGLa?sJ$9(B9Uk>7K?pEv^+%LlTN4qI4cQQ zmbFT2{WyS2YSlW9Grw3YritjoKE=#@ms09M01)*wS^;F+_I3b=Q8LffiW7;%0%p#H z%>(#aU>*P(_5>WqX=Uc0G4uKm{XBqP06&^azhcFT_j;bEPvF;7Iq%&P#j_|!On zEmF!ytBt|Ti-_nDN@M14kx0Z$rBZ*XHii+2MDAwhZ&dBP^x@&=D*)C>DRVW3Sq>m5 zD2Id)W-65$D({p`CYy`J;v>wwKx_TwOeXVUa8Cf3U*m_C<1~PdX_yB}=KoAYv2;59 zHuC^bEEW^Yd^-R~2yw)+tn(#F`5@jyL?>%7@aFLFusb+7Sg1j>uB?5!SS%*8+3deA zCMXmNrwzk+9TVlq2bg&ufExjTOw;ToqB{V9h;DOT_putx)CAkMw=(n2piM-1A;kMr zsnl@5IgT@*nH?d-u`q9%=1L+u0wCgR6Rzu~8(qwu_iEer17Y(3z|1GYCILWe-OtSX zJkL9sOeTXh0ZOUkMD##N`+cDC)hGavWm&r`O%y~_tk6GLg|8hSAKx9m(bUwm6Tpby zT-MdqbxlJP=0n5MZGz?KmGyD4NF0cZdqq79~LE)H%SJ$f_`;F+Lp7{=;`CD7g7 z-83>X@&plmAw>TIz+8cem^nPvF06Y3j^nfz3WXy8J{6)La$Wb%o}M0EO$=s!HPkHMhK5V> zxphq-9*92*>ynT1g>^|N{!4Y)55(i~%RSFa1Gp}TO+;UpQtqBiR|x|H13dti`OT5$ z=H{o%x~vK=gb*iYoPcFn?*SkITI5)xwxqSTgU``g z_s!@PavbMM09lmG7l`PyQp#zW_wkhfd#~%dKMC=qwZ0#IDFI-=QtGv7Ctz9D2esBY z09X3dTg?1v*L4q0rke^<%3H_A#^y>XHzG9fZQI^~i8E0EC}^#>17+1HGk?gktnds{ z5nAi3F|i;8Q`{&suT@I9Gcg}vU|`^laND-+Wz2j}h}seC3ChR7HveZ*2ywxKD+(dj zr_<@Wn6Ct_bqf&%dxry3${(Eff(sXh>A=uh?{OSw$<$q^2c^_WX1;})zga96Z%63W zGCa?_-!O~?n0jY+84+F2%mM(2Xq=f1O#Bh9(pvwcdfN0gt&s4p8(JX;9W#?$g->-#$vH=S6epB6jRPZmSug8nV$sE z3;@jhSFLrIQtElvb<uu5A;Dy3elCZOxO2mOjP*mxMsywfzzeVv`1Et6@dgKz?5n&yw0 z`Q8wBd~|elWnW+4ziSDql==fRcQAA2d~l-Ax3;z_A;je~H62C-nAm(TT)428i0%w- zF!N#0^Va8bxpUJAJTx>k*52O!%a)dwc>p?mdJ%vmN@qKNI(zo)jA|zV0Qr3WVE|tY z@sE3+cXKwIotF6kgM)(wDdkrHY{JChFHkzjtqX!zXl;n=jm2Ucve|5$s=}=QuS92OXUm*9bM7Oe mD~RZB*L7c*Z4duPJ@H=@#ZbH_NT@yl0000*~ literal 0 HcmV?d00001 diff --git a/pixmaps/mic_active.png b/pixmaps/mic_active.png deleted file mode 100644 index ee6b9038c4df8945da8ea80203ef8a4e1101b4d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3523 zcmV;!4LtIRP)X+uL$Nkc;*P;zf(X>4Tx07wm;mUmQB*%pV-y*Itk5+Wca^cs2zAksTX z6$DXM^`x7XQc?|s+008spb1j2M!0f022SQPH-!CVp(%f$Br7!UytSOLJ{W@ZFO z_(THK{JlMynW#v{v-a*TfMmPdEWc1DbJqWVks>!kBnAKqMb$PuekK>?0+ds;#ThdH z1j_W4DKdsJG8Ul;qO2n0#IJ1jr{*iW$(WZWsE0n`c;fQ!l&-AnmjxZO1uWyz`0VP>&nP`#i ztsL#`S=Q!g`M=rU9)45(J;-|dRq-b5&z?byo>|{)?5r=n76A4nTALlSzLiw~v~31J z<>9PP?;rs31pu_(obw)rY+jPY;tVGXi|p)da{-@gE-UCa`=5eu%D;v=_nFJ?`&K)q z7e9d`Nfk3?MdhZarb|T3%nS~f&t(1g5dY)AIcd$w!z`Siz!&j_=v7hZlnI21XuE|x zfmo0(WD10T)!}~_HYW!eew}L+XmwuzeT6wtxJd`dZ#@7*BLgIEKY9Xv>st^p3dp{^ zXswa2bB{85{^$B13tWnB;Y>jyQ|9&zk7RNsqAVGs--K+z0uqo1bf5|}fi5rtEMN^B zfHQCd-XH*kfJhJnmIE$G0%<@5vOzxB0181d*a3EfYH$G5fqKvcPJ%XY23!PJzzuK< z41h;K3WmW;Fah3yX$XSw5EY_9s*o0>51B&N5F1(uc|$=^I1~fLLy3?Ol0f;;Ca4%H zgQ}rJP(Ab`bQ-z{U4#0d2hboi2K@njgb|nm(_szR0JebHusa+GN5aeCM0gdP2N%HG z;Yzp`J`T6S7vUT504#-H!jlL<$Or?`Mpy_N@kBz9SR?@vA#0H$qyni$nvf2p8@Y{0 zk#Xb$28W?xm>3qu8RLgpjNxKdVb)?wFx8l2m{v>|<~C*!GlBVnrDD~wrdTJeKXwT= z5u1%I#8zOBU|X=4u>;s)>^mF|$G{ol9B_WP7+f-LHLe7=57&&lfa}8z;U@8Tyei%l z?}87(bMRt(A-)QK9Dg3)j~~XrCy)tR1Z#p1A(kK{Y$Q|=8VKhI{e%(1G*N-5Pjn)N z5P8I0VkxnX*g?EW941ba6iJ387g8iCnY4jaNopcpCOsy-A(P2EWJhusSwLP-t|Xrz zUnLKcKTwn?CKOLf97RIePB}`sKzTrUL#0v;sBY9)s+hW+T2H-1eM)^VN0T#`^Oxhv zt&^*fYnAJldnHel*OzyfUoM{~Um<@={-*r60#U(0!Bc^wuvVc);k3d%g-J!4qLpHZ zVwz%!VuRu}#Ze`^l7W)95>Kf>>9Eozr6C$Z)1`URxU@~QI@)F0FdauXr2Es8>BaOP z=)Lp_WhG@>R;lZ?BJkMlIuMhw8Ap ziF&yDYW2hFJ?fJhni{?u85&g@mo&yT8JcdI$(rSw=QPK(Xj%)k1X|@<=e1rim6`6$ zRAwc!i#egKuI;BS(LSWzt39n_sIypSqfWEV6J3%nTQ@-4ii$R;gsG*9XzhRzXqv2yCs*$VFDx+GXJH|L;wsDH_KI2;^ zu!)^Xl1YupO;gy^-c(?^&$Q1BYvyPsG^;hc$D**@Sy`+`)}T4VJji^bd7Jqw3q6Zi zi=7tT7GEswEK@D(EFW1ZSp`^awCb?>!`j4}Yh7b~$A)U-W3$et-R8BesV(1jzwLcH znq9En7Q0Tn&-M=XBKs!$F$X<|c!#|X_tWYh)GZit(Q)Cp9CDE^WG;+fcyOWARoj*0TI>4EP1lX*cEoMO-Pk?Z z{kZ!p4@(b`M~lalr<3Oz&kJ6Nm#vN_+kA5 z{dW4@^Vjg_`q%qU1ULk&3Fr!>1V#i_2R;ij2@(Z$1jE4r!MlPVFVbHmT+|iPIq0wy5aS{>yK?9ZAjVh%SOwMWgFja zir&;wpi!{CU}&@N=Eg#~LQ&zpEzVmGY{hI9Z0+4-0x zS$$Xe-OToc?Y*V;rTcf_b_jRe-RZjXSeas3UfIyD;9afd%<`i0x4T#DzE)vdabOQ= zk7SRuGN`h>O0Q~1)u-yD>VX=Mn&!Rgd$;YK+Q-}1zu#?t(*cbG#Ronf6db&N$oEid ztwC+YVcg-Y!_VuY>bk#Ye_ww@?MU&F&qswvrN_dLb=5o6*Egs)ls3YRlE$&)amR1{ z;Ppd$6RYV^Go!iq1UMl%@#4q$AMc(FJlT1QeX8jv{h#)>&{~RGq1N2iiMFIRX?sk2 z-|2wUogK~{EkB$8eDsX=nVPf8XG_nK&J~=SIiGia@9y}|z3FhX{g&gc zj=lwb=lWgyFW&aLedUh-of`v-2Kw$UzI*>(+&$@i-u=-BsSjR1%z8NeX#HdC`Hh-Z(6xI-`hmHDqv!v)W&&nrf>M(RhcN6(D;jNN*% z^u_SYjF;2ng}*8Ow)d6MtDk;%`@Lsk$;9w$(d(H%O5UixIr`T2ZRcd@(7L_7m6MZ`7UIWzZxQJH{JdJL)jpTY<+qk) z&7vrh`Ft*15hMtvuX$da4~IkV`uh6o@$vC{U_3b4Y&O5YzyD=xYirMid7h^diG-qY zU0PaFsZ>hgm07tDfgwvL zMhiv^Ad`hee2msE56}MD~ICJnkRv@!rNPjZ6*M5K8+Gh)g(y zj)U5aLS#+K&5s-T`Kv2))TP_)N-m!l-%}DmS`=eol`_cw*EXF`+-NlD_OEe@+W;{?wm)W2-eJ0Nc&Y#Z002ovPDHLkV1nC;%dr3e diff --git a/pixmaps/mic_muted.png b/pixmaps/mic_muted.png deleted file mode 100644 index 60fd187611676958aacee6bbbb942533c7784242..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3716 zcmV-~4tw#5P)X+uL$Nkc;*P;zf(X>4Tx07wm;mUmQB*%pV-y*Itk5+Wca^cs2zAksTX z6$DXM^`x7XQc?|s+008spb1j2M!0f022SQPH-!CVp(%f$Br7!UytSOLJ{W@ZFO z_(THK{JlMynW#v{v-a*TfMmPdEWc1DbJqWVks>!kBnAKqMb$PuekK>?0+ds;#ThdH z1j_W4DKdsJG8Ul;qO2n0#IJ1jr{*iW$(WZWsE0n`c;fQ!l&-AnmjxZO1uWyz`0VP>&nP`#i ztsL#`S=Q!g`M=rU9)45(J;-|dRq-b5&z?byo>|{)?5r=n76A4nTALlSzLiw~v~31J z<>9PP?;rs31pu_(obw)rY+jPY;tVGXi|p)da{-@gE-UCa`=5eu%D;v=_nFJ?`&K)q z7e9d`Nfk3?MdhZarb|T3%nS~f&t(1g5dY)AIcd$w!z`Siz!&j_=v7hZlnI21XuE|x zfmo0(WD10T)!}~_HYW!eew}L+XmwuzeT6wtxJd`dZ#@7*BLgIEKY9Xv>st^p3dp{^ zXswa2bB{85{^$B13tWnB;Y>jyQ|9&zk7RNsqAVGs--K+z0uqo1bf5|}fi5rtEMN^B zfHQCd-XH*kfJhJnmIE$G0%<@5vOzxB0181d*a3EfYH$G5fqKvcPJ%XY23!PJzzuK< z41h;K3WmW;Fah3yX$XSw5EY_9s*o0>51B&N5F1(uc|$=^I1~fLLy3?Ol0f;;Ca4%H zgQ}rJP(Ab`bQ-z{U4#0d2hboi2K@njgb|nm(_szR0JebHusa+GN5aeCM0gdP2N%HG z;Yzp`J`T6S7vUT504#-H!jlL<$Or?`Mpy_N@kBz9SR?@vA#0H$qyni$nvf2p8@Y{0 zk#Xb$28W?xm>3qu8RLgpjNxKdVb)?wFx8l2m{v>|<~C*!GlBVnrDD~wrdTJeKXwT= z5u1%I#8zOBU|X=4u>;s)>^mF|$G{ol9B_WP7+f-LHLe7=57&&lfa}8z;U@8Tyei%l z?}87(bMRt(A-)QK9Dg3)j~~XrCy)tR1Z#p1A(kK{Y$Q|=8VKhI{e%(1G*N-5Pjn)N z5P8I0VkxnX*g?EW941ba6iJ387g8iCnY4jaNopcpCOsy-A(P2EWJhusSwLP-t|Xrz zUnLKcKTwn?CKOLf97RIePB}`sKzTrUL#0v;sBY9)s+hW+T2H-1eM)^VN0T#`^Oxhv zt&^*fYnAJldnHel*OzyfUoM{~Um<@={-*r60#U(0!Bc^wuvVc);k3d%g-J!4qLpHZ zVwz%!VuRu}#Ze`^l7W)95>Kf>>9Eozr6C$Z)1`URxU@~QI@)F0FdauXr2Es8>BaOP z=)Lp_WhG@>R;lZ?BJkMlIuMhw8Ap ziF&yDYW2hFJ?fJhni{?u85&g@mo&yT8JcdI$(rSw=QPK(Xj%)k1X|@<=e1rim6`6$ zRAwc!i#egKuI;BS(LSWzt39n_sIypSqfWEV6J3%nTQ@-4ii$R;gsG*9XzhRzXqv2yCs*$VFDx+GXJH|L;wsDH_KI2;^ zu!)^Xl1YupO;gy^-c(?^&$Q1BYvyPsG^;hc$D**@Sy`+`)}T4VJji^bd7Jqw3q6Zi zi=7tT7GEswEK@D(EFW1ZSp`^awCb?>!`j4}Yh7b~$A)U-W3$et-R8BesV(1jzwLcH znq9En7Q0Tn&-M=XBKs!$F$X<|c!#|X_tWYh)GZit(Q)Cp9CDE^WG;+fcyOWARoj*0TI>4EP1lX*cEoMO-Pk?Z z{kZ!p4@(b`M~lalr<3Oz&kJ6Nm#vN_+kA5 z{dW4@^Vjg_`q%qU1ULk&3Fr!>1V#i_2R;ij2@(Z$1jE4r!MlPVFVbHmT+|iPIq0wy5aS{>yK?9ZAjVh%SOwMWgFja zir&;wpi!{CU}&@N=Eg#~LQ&zpEzVmGY{hI9Z0+4-0x zS$$Xe-OToc?Y*V;rTcf_b_jRe-RZjXSeas3UfIyD;9afd%<`i0x4T#DzE)vdabOQ= zk7SRuGN`h>O0Q~1)u-yD>VX=Mn&!Rgd$;YK+Q-}1zu#?t(*cbG#Ronf6db&N$oEid ztwC+YVcg-Y!_VuY>bk#Ye_ww@?MU&F&qswvrN_dLb=5o6*Egs)ls3YRlE$&)amR1{ z;Ppd$6RYV^Go!iq1UMl%@#4q$AMc(FJlT1QeX8jv{h#)>&{~RGq1N2iiMFIRX?sk2 z-|2wUogK~{EkB$8eDsX=nVPf8XG_nK&J~=SIiGia@9y}|z3FhX{g&gc zj=lwb=lWgyFW&aLedUh-of`v-2Kw$UzI*>(+&$@i-u=-BsSjR1%z8NeX#HdC`Hh-Z(6xI-`hmHDqv!v)W&&nrf>M(RhcN6(D;jNN*% z^u_SYjF;2ng}*8Ow)d6MtDk;%`@Lsk$;9w$(d(H%O5UixIr`T2ZRcd@~4}Z*@T9eR;3AzE;Nd7#fTs^ zEi@p;1`0li=!2zD?1L?R^G&4&3Xwh(O7MqD`w%b>jcG`_c~Al=D)x`mXozc?xRT9e zGc!B?{k}<4+7IUM{+xU6Ip>au;}~3*o;=BY5QcfPR!hEJ*G280cW&7Fj-n{`t5soA z|EaaLzv6S}9PXEVyDY>TZ;y{((e~~=+$w|@`aXg%L`auU?=+c*CEtPP0ji4C)z#Ej zQ&ZmxAwDHCFXi{8Qqw!d;??%~`NP<@4VnG>4O%_{VgQvUF(9)Oj3xwpMM1;k$H?dN zr!HQ&P$jVQvQRF!<_m=$U(?`SyB4n7wxSgZP=f$6m4Zg?T&`P#Z9DJ?+@G02{q%Gs zPn=M*PoEy6?k^O}wngmwuGqaBW^b=z4h@ObnHjO}c|ui%a9u})Q6N&Olz3Jyi?w1= z(1K#Vr$<>b48)cdcXV_>p&g@2;#JFKcsqB(Ier|<@G$JzS(r74SXi(f3l(Pr&X40r zkBnfczaLAP3|=fOV7*$6ySln!#Ut_f@_8$yh1|0T=6ihzZ{CFc+pqAYpzQ?kex60c zPt#aAdKBLF?Z~nLq!sID+cqSFa0C=;3#nsZ`pue=AE0Ib=HyUNLmky5GcxrXY9eGDIc|@!5GOQU@&$PM*#{ z1j02pH}`)=%t{iN5S#22wqH*}N!JnM6fp;7Duj_X5;uAL7FZHUM&-OHw1TGV@Zt#8 z{rhO0Dx&SmAR^bpGBNWGyalDB6X`U|qkx?JSCT~REubVfb#>UdcMtm57_5N-`1uxC zO?kXHbO=p9+<`XtC-htn1}$ii{ae~fwx3HQbf2EVg9k{D-9hmF0G6~Afyu z-kyld^P(e1;I*`fMbh&5qer9E^ipt!$immZ9vr;bRw(ouQqo^!^Vh+rpHs_Eoy6s_ zAu;7cSTW7`m&wVIFK^uVoZ6QYAVOrY`o4n)n=6%yaLJ9u#YL>Fte~IHm1&xon3&*U i|1HktGJzyNw!Z<(Gv*&o7Db={0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipl7 z6cPu+ni_uq00BoyL_t(I%k7lEO2beThrb&|MAE_FkWGhBap=-fmu6_8;L@R^#3xX2 zb12<9**EFp&^Pb_ickVs;+8G31SIXv&2=dbYP7A6{lS65J)95DJ%3=UpX4|W0IgQb z_%p0ls{zn#HqXK^eA*aPtyUS2#{dk6!;8se@)iU^0_?90ab5SzTfg7G_I+RazOSd# z>1!EKltFvFp4(_NPL)z*S$6I?&XtrB0HxHdUa#9g_Bn62glBX*okyiqMQe@Lnlw#6 zf?Dg+>dJt7Ns<&od|$vOK(Z|3Ux89eQ5416Q?XO_hk2eK#c@0j!|)}JV{O~^;bO5s zDMe8f^U-MZ0OTuo8K?l}(m!su+xOjW_tG#7LkKbRJa4To1EfnsYaIz8ZlWj(JkPr` xP4nN@*|IF_b}$$`ueB+^=m0nYjP1Du;2jAJgl;WPqa^?U002ovPDHLkV1jF=y>I{k diff --git a/pixmaps/svg/.directory b/pixmaps/svg/.directory new file mode 100644 index 000000000..c99a6191a --- /dev/null +++ b/pixmaps/svg/.directory @@ -0,0 +1,4 @@ +[Dolphin] +PreviewsShown=true +Timestamp=2015,8,3,13,7,36 +Version=3 diff --git a/pixmaps/svg/linphone-micro-enabled.svg b/pixmaps/svg/linphone-micro-enabled.svg new file mode 100644 index 000000000..a23354bc1 --- /dev/null +++ b/pixmaps/svg/linphone-micro-enabled.svg @@ -0,0 +1,78 @@ + + + + + + image/svg+xml + + micro_default + + + + + + micro_default + Created with Sketch. + + + + + + diff --git a/pixmaps/svg/linphone-micro-muted.svg b/pixmaps/svg/linphone-micro-muted.svg new file mode 100644 index 000000000..09d505c59 --- /dev/null +++ b/pixmaps/svg/linphone-micro-muted.svg @@ -0,0 +1,90 @@ + + + + + + image/svg+xml + + micro_default + + + + + + micro_default + Created with Sketch. + + + + + + + + + + diff --git a/pixmaps/svg/linphone-speaker-enabled.svg b/pixmaps/svg/linphone-speaker-enabled.svg new file mode 100644 index 000000000..8a122795d --- /dev/null +++ b/pixmaps/svg/linphone-speaker-enabled.svg @@ -0,0 +1,87 @@ + + + + + + image/svg+xml + + speaker_default + + + + + + speaker_default + Created with Sketch. + + + + + + + + + + diff --git a/pixmaps/svg/linphone-speaker-muted.svg b/pixmaps/svg/linphone-speaker-muted.svg new file mode 100644 index 000000000..1e85b85be --- /dev/null +++ b/pixmaps/svg/linphone-speaker-muted.svg @@ -0,0 +1,76 @@ + + + + + + image/svg+xml + + speaker_default + + + + + + speaker_default + Created with Sketch. + + + + + From 620c175aab7d31c52b011ff5023edc0684ff7fff Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 3 Aug 2015 18:11:11 +0200 Subject: [PATCH 028/134] robustize tests --- tester/call_tester.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/tester/call_tester.c b/tester/call_tester.c index 4a07bd9a2..491eeb4c1 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -2340,14 +2340,12 @@ static void call_with_file_player(void) { BC_ASSERT_TRUE(linphone_player_open(player,hellopath,on_eof,marie)==0); BC_ASSERT_TRUE(linphone_player_start(player)==0); } - /* This assert should be modified to be at least as long as the WAV file */ BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,10000)); + /*wait one second more for transmission to be fully ended (transmission time + jitter buffer)*/ + wait_for_until(pauline->lc,marie->lc,NULL,0,1000); - /*just to sleep*/ - linphone_core_terminate_all_calls(marie->lc); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + end_call(marie, pauline); /*cannot run on iphone simulator because locks main loop beyond permitted time (should run on another thread) */ #if !defined(__arm__) && !defined(__arm64__) && !TARGET_IPHONE_SIMULATOR && !defined(ANDROID) @@ -2363,6 +2361,7 @@ static void call_with_file_player(void) { if (similar >= threshold && similar <= 1.0) { remove(recordpath); } + end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -2425,12 +2424,10 @@ static void call_with_mkv_file_player(void) { BC_ASSERT_TRUE(linphone_player_start(player)==0); BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,12000)); linphone_player_close(player); + /*wait for one second more so that last RTP packets can arrive*/ + wait_for_until(pauline->lc,marie->lc,NULL,0,1000); } - - /*just to sleep*/ - linphone_core_terminate_all_calls(marie->lc); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + end_call(marie, pauline); #ifdef DO_AUDIO_CMP BC_ASSERT_TRUE(ms_audio_diff(hellowav,recordpath,&similar,audio_cmp_max_shift,NULL,NULL)==0); BC_ASSERT_TRUE(similar>threshold); @@ -4367,10 +4364,9 @@ static void call_with_rtp_io_mode(void) { /* This assert should be modified to be at least as long as the WAV file */ BC_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &marie->stat.number_of_player_eof, 1, 10000)); - - linphone_core_terminate_all_calls(marie->lc); - BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); - BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + /*wait for one second more so that last RTP packets can arrive*/ + wait_for_until(pauline->lc,marie->lc,NULL,0,1000); + end_call(pauline,marie); if (ms_tags_list_contains_tag(ms_factory_get_platform_tags(ms_factory_get_fallback()), "embedded")) { ms_warning("Cannot run audio diff on embedded platform"); From 4bc7428d3093b49aeb42bf49a6312f2083cccc04 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 3 Aug 2015 18:15:30 +0200 Subject: [PATCH 029/134] Revert "Use icons designed by Kerosine for speaker and microphone icons" This reverts commit 2a3e4c46abc32f9f44e82a8af7738d323ff0976d. --- gtk/incall_view.c | 43 +++++---- gtk/main.c | 11 --- gtk/main.ui | 11 ++- pixmaps/CMakeLists.txt | 5 - pixmaps/Makefile.am | 11 ++- .../16x16/status/linphone-micro-enabled.png | Bin 505 -> 0 bytes .../16x16/status/linphone-micro-muted.png | Bin 620 -> 0 bytes .../16x16/status/linphone-speaker-enabled.png | Bin 562 -> 0 bytes .../16x16/status/linphone-speaker-muted.png | Bin 722 -> 0 bytes pixmaps/hicolor/24x24/status/.directory | 4 - .../24x24/status/linphone-micro-enabled.png | Bin 767 -> 0 bytes .../24x24/status/linphone-micro-muted.png | Bin 948 -> 0 bytes .../24x24/status/linphone-speaker-enabled.png | Bin 766 -> 0 bytes .../24x24/status/linphone-speaker-muted.png | Bin 1084 -> 0 bytes .../32x32/status/linphone-micro-enabled.png | Bin 963 -> 0 bytes .../32x32/status/linphone-micro-muted.png | Bin 1217 -> 0 bytes .../32x32/status/linphone-speaker-enabled.png | Bin 1024 -> 0 bytes .../32x32/status/linphone-speaker-muted.png | Bin 1465 -> 0 bytes .../48x48/status/linphone-micro-enabled.png | Bin 1463 -> 0 bytes .../48x48/status/linphone-micro-muted.png | Bin 1906 -> 0 bytes .../48x48/status/linphone-speaker-enabled.png | Bin 1442 -> 0 bytes .../48x48/status/linphone-speaker-muted.png | Bin 2160 -> 0 bytes pixmaps/mic_active.png | Bin 0 -> 3523 bytes pixmaps/mic_muted.png | Bin 0 -> 3716 bytes pixmaps/speaker.png | Bin 0 -> 455 bytes pixmaps/svg/.directory | 4 - pixmaps/svg/linphone-micro-enabled.svg | 78 --------------- pixmaps/svg/linphone-micro-muted.svg | 90 ------------------ pixmaps/svg/linphone-speaker-enabled.svg | 87 ----------------- pixmaps/svg/linphone-speaker-muted.svg | 76 --------------- 30 files changed, 36 insertions(+), 384 deletions(-) delete mode 100644 pixmaps/hicolor/16x16/status/linphone-micro-enabled.png delete mode 100644 pixmaps/hicolor/16x16/status/linphone-micro-muted.png delete mode 100644 pixmaps/hicolor/16x16/status/linphone-speaker-enabled.png delete mode 100644 pixmaps/hicolor/16x16/status/linphone-speaker-muted.png delete mode 100644 pixmaps/hicolor/24x24/status/.directory delete mode 100644 pixmaps/hicolor/24x24/status/linphone-micro-enabled.png delete mode 100644 pixmaps/hicolor/24x24/status/linphone-micro-muted.png delete mode 100644 pixmaps/hicolor/24x24/status/linphone-speaker-enabled.png delete mode 100644 pixmaps/hicolor/24x24/status/linphone-speaker-muted.png delete mode 100644 pixmaps/hicolor/32x32/status/linphone-micro-enabled.png delete mode 100644 pixmaps/hicolor/32x32/status/linphone-micro-muted.png delete mode 100644 pixmaps/hicolor/32x32/status/linphone-speaker-enabled.png delete mode 100644 pixmaps/hicolor/32x32/status/linphone-speaker-muted.png delete mode 100644 pixmaps/hicolor/48x48/status/linphone-micro-enabled.png delete mode 100644 pixmaps/hicolor/48x48/status/linphone-micro-muted.png delete mode 100644 pixmaps/hicolor/48x48/status/linphone-speaker-enabled.png delete mode 100644 pixmaps/hicolor/48x48/status/linphone-speaker-muted.png create mode 100644 pixmaps/mic_active.png create mode 100644 pixmaps/mic_muted.png create mode 100644 pixmaps/speaker.png delete mode 100644 pixmaps/svg/.directory delete mode 100644 pixmaps/svg/linphone-micro-enabled.svg delete mode 100644 pixmaps/svg/linphone-micro-muted.svg delete mode 100644 pixmaps/svg/linphone-speaker-enabled.svg delete mode 100644 pixmaps/svg/linphone-speaker-muted.svg diff --git a/gtk/incall_view.c b/gtk/incall_view.c index db056fdc8..15b1396bb 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -646,26 +646,16 @@ static void volume_control_value_changed(GtkScaleButton *button, gdouble value, } } -static void volume_control_button_update_value(GtkWidget *widget) { - LinphoneCall *call = (LinphoneCall *)g_object_get_data(G_OBJECT(widget), "call"); - VolumeControlType type = (VolumeControlType)g_object_get_data(G_OBJECT(widget), "type"); - - if(type == VOLUME_CTRL_PLAYBACK) { - gtk_scale_button_set_value(GTK_SCALE_BUTTON(widget), linphone_call_get_speaker_volume_gain(call)); - } else if(type == VOLUME_CTRL_RECORD) { - gtk_scale_button_set_value(GTK_SCALE_BUTTON(widget), linphone_call_get_microphone_volume_gain(call)); - } -} - -static gboolean volume_control_button_enter_event_handler(GtkWidget *widget) { - volume_control_button_update_value(widget); - return FALSE; -} - static void volume_control_init(GtkWidget *vol_ctrl, VolumeControlType type, LinphoneCall *call) { g_object_set_data(G_OBJECT(vol_ctrl), "call", call); g_object_set_data(G_OBJECT(vol_ctrl), "type", (gpointer)type); - g_signal_connect(G_OBJECT(vol_ctrl), "enter-notify-event", G_CALLBACK(volume_control_button_enter_event_handler), NULL); + + if(type == VOLUME_CTRL_PLAYBACK) { + gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_speaker_volume_gain(call)); + } else if(type == VOLUME_CTRL_RECORD) { + gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_microphone_volume_gain(call)); + } + g_signal_connect(G_OBJECT(vol_ctrl), "value-changed", G_CALLBACK(volume_control_value_changed), NULL); } @@ -874,11 +864,22 @@ void linphone_gtk_in_call_view_set_transfer_status(LinphoneCall *call,LinphoneCa } void linphone_gtk_draw_mute_button(GtkButton *button, gboolean active){ - const char *icon_name = active ? "linphone-micro-muted" : "linphone-micro-enabled"; - GtkWidget *image = gtk_image_new_from_icon_name(icon_name, GTK_ICON_SIZE_BUTTON); - gtk_button_set_image(button, image); - gtk_widget_show(image); g_object_set_data(G_OBJECT(button),"active",GINT_TO_POINTER(active)); + if (active){ + GtkWidget *image=create_pixmap("mic_muted.png"); + /*gtk_button_set_label(GTK_BUTTON(button),_("Unmute"));*/ + if (image!=NULL) { + gtk_button_set_image(GTK_BUTTON(button),image); + gtk_widget_show(image); + } + }else{ + GtkWidget *image=create_pixmap("mic_active.png"); + /*gtk_button_set_label(GTK_BUTTON(button),_("Mute"));*/ + if (image!=NULL) { + gtk_button_set_image(GTK_BUTTON(button),image); + gtk_widget_show(image); + } + } } void linphone_gtk_mute_clicked(GtkButton *button){ diff --git a/gtk/main.c b/gtk/main.c index 5a03ac033..f9bc2722d 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -2124,17 +2124,6 @@ int main(int argc, char *argv[]){ /*for pulseaudio:*/ g_setenv("PULSE_PROP_media.role", "phone", TRUE); #endif - - /* Add the data directory of Linphone to XDG_DATA_DIRS to enable GTK+ to find - the Linphone specific icons */ - tmp = g_getenv("XDG_DATA_DIRS"); - if(tmp && strlen(tmp) > 0) { - char *xdg_data_dirs = g_strdup_printf("%s:%s", tmp, PACKAGE_DATA_DIR "/linphone"); - g_setenv("XDG_DATA_DIRS", xdg_data_dirs, TRUE); - g_free(xdg_data_dirs); - } else { - g_setenv("XDG_DATA_DIRS", PACKAGE_DATA_DIR "/linphone", FALSE); - } lang=linphone_gtk_get_lang(config_file); if (lang == NULL || lang[0]=='\0'){ diff --git a/gtk/main.ui b/gtk/main.ui index 3f9d7fbe5..50f2a106f 100644 --- a/gtk/main.ui +++ b/gtk/main.ui @@ -2,7 +2,6 @@ - True False @@ -305,7 +304,10 @@ none False vertical - linphone-micro-enabled + audio-volume-muted +audio-volume-high +audio-volume-low +audio-volume-medium False @@ -348,7 +350,10 @@ none False vertical - linphone-speaker-enabled + audio-volume-muted +audio-volume-high +audio-volume-low +audio-volume-medium False diff --git a/pixmaps/CMakeLists.txt b/pixmaps/CMakeLists.txt index 8ad2c4485..800869425 100644 --- a/pixmaps/CMakeLists.txt +++ b/pixmaps/CMakeLists.txt @@ -27,11 +27,6 @@ install(FILES ${PIXMAPS} PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ ) -install(DIRECTORY hicolor DESTINATION ${PACKAGE_DATA_DIR}/linphone/icons - FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ - DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE -) - install(FILES linphone.png DESTINATION ${PACKAGE_DATA_DIR}/icons/hicolor/48x48/apps PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am index 2b26e25f0..b0fb73d8a 100644 --- a/pixmaps/Makefile.am +++ b/pixmaps/Makefile.am @@ -1,5 +1,6 @@ pixmapdir=$(datadir)/pixmaps/linphone -dist_pixmap_DATA= \ + +pixmap_DATA= \ hold_on.png hold_off.png \ mic_muted.png mic_active.png \ linphone.png linphone-banner.png \ @@ -20,9 +21,9 @@ dist_pixmap_DATA= \ notok.png -appicondir=$(datadir)/icons/hicolor/48x48/apps -dist_appicon_DATA= linphone.png +iconsdir=$(datadir)/icons/hicolor/48x48/apps -iconsdir=$(datadir)/linphone/icons -dist_icons_DATA=hicolor +icons_DATA= linphone.png + +EXTRA_DIST=$(pixmap_DATA) $(icons_DATA) diff --git a/pixmaps/hicolor/16x16/status/linphone-micro-enabled.png b/pixmaps/hicolor/16x16/status/linphone-micro-enabled.png deleted file mode 100644 index c0aae0a2a8cb3ab28eee75d9036e7f0d849ac377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ zFm424#>5#Kd_Y0T64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1TqL5e~$ zOL9^fax;^Q^5aud(-KQ_N;rz5oq>jhd%8G=SoAKPXz0!CDA0QU_TKKPTumLNTpO=h z3FVnf3FsbbbXvn=y|KHub?PLiHEaL!%c-a>jfl7r(J5Hpz?O4HF#ot#!V^80+Pi1! zexE%cAj#R3(48Xc@Mey6_V(N6nRC3drINK&!fWoY?>I5<+OHK6I(j|23>)75{+B4? zTDbaZ6>GqEoAr~}swA6EYINOWZ|&IAdE!jInS`}7Q})|)8arb2{3Vmkj9Ha}WK}yJ zSBM?RTJ}KSQ*?sQA%iQ;w=ADeelvLvgFrf$hn;k?7~`GN-FLS-#%J&4dl06%)#cN} z-}4t5cb#BucwD!C|Le+oOShVdOw4?Kr~BG3E6+*Vlcb%U>(}M?++^RNqhz{t%DJaS z@_Xa*=RMgOwCY}l$t`78h5)UpT<3N&GZZULnoy%uc`L_E{_>AAERF%j$7Tec*?)e; rX1O(6)ft>7wbt1EzxlG{-Q^wnE1ws&dM|VW#Q=k+tDnm{r-UW|ZiC6M diff --git a/pixmaps/hicolor/16x16/status/linphone-micro-muted.png b/pixmaps/hicolor/16x16/status/linphone-micro-muted.png deleted file mode 100644 index 335a2532c4bbfda8522779280e68d36542a8714f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)@=LjV8)%1J~)R5*=| zk-uvcQ5?i)_U&>A{@`pxhyl|`>f?&DF~`1Li%V>-QHUrh0)mx=Hfcl$=-TQOv38M*!DInnt6sn`PNa5!o=t+>YaTrxFl` z;pw6%o&i`i#>|MwLsdPIWm!q`3(4zo9Dm-o7Xb8ny=I>0uK-+4lH}{e^nL#($#+ST zBvoVo9kJbR?*LeuF8{AsX9PiTS5=ot{sQo5I2=B$%KZT_*Sdyxdzyp*0000E=yQ0JZ00E9kL_t(I zjh#_FXcR#hec%2dM>OQXBB>&GMZi)^Q%tcl$5kdln-tcfg<_FL8!N$9B7%sG78X`k z+1)#~u{_dR4Twz$31=fGH@ow!BFE(<)ubuPHbthIgw zAR~Eu9v?Ls`~ChU=iFtq>-E;0a|M82zB}o_X(|U%0{?ycdzXWm%>GZvIcebrCs=%#5r8TPf)7cO{GQPrj>qGtqtVFK0|tY^V`I#c_x?&8$1kF)scV>i_@%07*qoM6N<$g5N0i A3IG5A diff --git a/pixmaps/hicolor/16x16/status/linphone-speaker-muted.png b/pixmaps/hicolor/16x16/status/linphone-speaker-muted.png deleted file mode 100644 index 897024cd994e4f60daea3931fffd6324f1f2ec15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 722 zcmV;@0xkWCP)E=yQ0JZ00J&aL_t(I zjg65%Xj4%X#=mpleUuBpX0v+$ToXbRwAQZyK!#y>ftmOA0@5@+OGLM|);9of z7=|FC5$D{bl=8&l;^I;iMF-!16rlh5ZX%zO;MW3BZUrPNZV)0rfqtIoN~R$m~c)GZ<^5z#Dw zl{I~ih|1R57{F-XFO_bG<^nHJbnZN%t!CH6@K-OAY ztX8Yby*@L4?RLBOopVzF79@aF2=P!U^@oT=tJOLTV5Qw|A89t5D;pcsYPHKz6zy=% z?eu;Bx=hn_!t=ag00Yci0q_>Uawd~m2!h~rk|f_YLgG071z-XIM5EDoW37D-V2YXF zS!+XM%mfitrIatDC>q`3&=93kX_u7J0Qiv0<<2EZVgaz$dIrE1=iF0f9@`YKy1F_= zM0I1##p&s3*J~PMo&X2|9AIYGAF+)Jf?zNRg5CYRzc<+St_IFzQvd(}07*qoM6N<$ Eg4BFGI{*Lx diff --git a/pixmaps/hicolor/24x24/status/.directory b/pixmaps/hicolor/24x24/status/.directory deleted file mode 100644 index c8a3bf660..000000000 --- a/pixmaps/hicolor/24x24/status/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -PreviewsShown=true -Timestamp=2015,8,3,15,21,55 -Version=3 diff --git a/pixmaps/hicolor/24x24/status/linphone-micro-enabled.png b/pixmaps/hicolor/24x24/status/linphone-micro-enabled.png deleted file mode 100644 index 0406019040d65df08e0e4b42fb58019e3b3e10b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 767 zcmV@=LjV8*T}ebiR7i=v zl+R04Q545N=e`*j41yUm!!pRIRYf$E3ke42J;`KRM7C(zk3~h`CMZafmVvYs`UeDq zl5C22j!Fd~IGe~#p^Fw-8>eaGb9~*?A_XyNj z5m11ho}T3L^74#`-0^*XxSHNnYxef`I;wg`MDDJc1LX7hlBx~@XKO836;LjhTL3dY zKK^NAPeeYb>cPJPgkfk{xA_Ku65)ue0{%s9J)pC*bGPfdWA&K0uDjQD-O)&Zcs#xX zNY?`}#xw!PA_4w&Z9O0i!xbP7V2r7C6&1i*8wXY*0TPMC0+7n(at))l0oleJ7 zsnj{(K9KL|=(sj8FktHf0OWGHh9C%Tsp<_?{br2$sHzFzFz{7G`hDMjRL!I2Z@9K` zGMQ`#9;oWHwRUK7a&k6`wyttrchq&=EA?pp`%8{=MA>Y%*>Rjb*4jbfwJ~P2QmM>N xO-%*0w2=~sNT0QK1ZV{=SZhZd$2l2A`xAip>0O|^KEVJ0002ovPDHLkV1l-rR2BdL diff --git a/pixmaps/hicolor/24x24/status/linphone-micro-muted.png b/pixmaps/hicolor/24x24/status/linphone-micro-muted.png deleted file mode 100644 index 4f930da9a042daff78d76fb03cf62deb54c89d2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmV;l155mgP)@=LjV8+5=lfsR7i=X zR844eHoZeq#^YWs)DAFO3A!j*WK#%8OHz>1P#2lR&4grp$AvQ*CgaQ(JiGVqx#!&b?&As) zpu4*}-O$i5OtM`>UXXkg$MM4?xj{WbZ*T8*0Dq9&2VhD>UMi)|x3si;Ha|cAAc;v$ zSZi-?yuAD|02M{iv&xu={6(_0d^W~(le|yzhw<_8=ZOr8#iCkYd4&N{ zdN!?f7l16upW-`4mO&C|t-C~I48X}aj&D`Q-`8Nbh&&XLVdvc4YJ?3>)YH?m z%NR3OPnqN{09#0&AUSP}$tE&LrBd4fwAB(1!|))0s{o$HaXhM&+7950Lj4|H( zF_Jfv@HaIBt+fR(Dk4Lrm2t3M&V~+(#o`)(6aXlt-h4%CZ73q6A~NKh`>jML0C?|H z0M-&2q|@mI03Qtu3}o{8{6a~5h~!<8$IId*KOs2>03xynz<-Gha=Ba{z-*yV_;O}u zW=%w%kh}rlyEu-s01$>@BY-od{}1ndAIZnn464pRM1CfDPHVkNvb|K@urX#UfDgU* zKZ?ko&bgaf>sApt>b>8er~?34TwJ^kAP|uUB###gg--!YXliOQ0QLfSDk7&dnasb=xl84ETU%SoTKhGC%K&nnot+n>D5@s)cE^`t zt?eUuo8-5dOlD$bW#uf%QzVy^Qh$?71Na=k{~~h!T`Quhfib2Zz%2mBqA1F(ueiCn zxgEe2lGEP%Ym<|cv$cdbKx^GE=yQ0JZ00LS`L_t(Y ziLH}AXj4%b#ees`7Ypi;6uWfr&tNI&(29dXhmgGc(vYR2wSrC#Eu!GoO>s~MCs8Z9 zh*C>+5rro2B}AzTf>snnIw*pF1|g+_Li_UW=TIvJ)8@72z@6@Q&bf#0T-YEonamE) z^Y%8Ivo<2`x^B+0teGf^ZnxY(YkeAc1f-NwiDvUoT;Y5^-?q58cuho(0TVzQ(AA6= zD}mO!GYrGWN~xp3nIH%TfnRaBO%r6Z*@Gf-AK0pt8t{GpK^)<~23qUgKu@DfW6Un4 z)LG!8h@^ucm|c%JfFmNefCG&#l~S;@(4lgO!E-WkzZ|I|~g3G{2e}DhZQmOPFm3%Ps14U3aVj zFEYm5s8lMini-VK#sZ$O)N{ANIb>PZbT*qEikrmu{jaud_xAPm zjRL5(hI6@GyD{djh-lz?y@h};CeL{T(g+x95`n_wk;-yb)|q=C)0Z9fC{#o?{1rj<(Ng>BpW wfpE=yQ0JZ00WpwL_t(Y ziM5nZXdP7)#(!t-#7L`NadGls7J3IS4@Qrsp;$av*=y~4BJkO65x!&I1jz**L zuBtu@th#1{D2ny~p8_Qj=_s81hEl0?3>Z<>=d85{{dR>12M0SB78VYw>UQ9Lpc7cr z;)jQaS2P-p<3J=LyOSi@571VED2i5PSvDmi+kh96BpCtbT70!yT{$;5_c0Ivk6UZ^ zx45e&2!h~#Rs9gSNkleTYd>1dm&@fY=iHcxY!H#{*4iuj;zv<*2e57_ap&A>5qS~# zMODj5lAI}&_{NwzaF>WYY^^3ip1z^X&+6{DGG@Xp1Xw}Tj z%!Qtw9%(chCxGtG&dxQh9{iOg$@C7i~wn4R8?G=$J zK=M2ffZ4^o=XoChl4V(IV9o%ywPg^7VV`rZrmBBB=Qd7GPX17=$@6^eWutQdB616G z@u~)47?y!C;C!Cv8*8=NPfOK_$Ua~?%d&5))#^%BtpHywYY>Lv5HKbpXN@tHdcA(` zziL(WHC272UavQub1wm1z=75jtq;TSP+?Dxh*VVdv~%tOYwaJ)9VSiFx8TyVqN=-q zSCS+-=>eZ}Y0kq%YZDNtssmO71IvjohPC#*F=l;VU*BE;DHcRg^rWi32~2sOw@p@=LjV8+AxT6*R9J=W zmraNqMHI(>uewgeZbv!JO0>*h5e<)7{hUUewDV@!%;6f`{Nq(8zeui%3qn zh=_=yxE>NPEX;Phg}Q9egNP;~l4y_^{KD~L$IVPvKM%Gb!I^aL8WGI@(!73E|M#oc z4OJzqL+y6^YM@gT#SUN%c+WZambEso>m_w3L{W4Acm|jP&H$T$t-wiD?POVYvW}mr zS^Qz(5b(OHUX!NjjcJ;06Okq`B_dhboyw}*fo8MW@O}Rba4b#J`!CGLaeQr26dwa` zq-pw4Ro}`T@H{U8wm9dW`n!Cu*ZT^15$I53VU+cX@ zz!Wf=XlBe1!1w*Be;nXa=`z4rfVsK3E0QFs{4RY)#u_kp1E**7=|t2J`s5VpzPGWs(K92u?roS0EnXK72vKs z&u_BU_QNo|Q$!Yl&w;LptQ1Aj5Rne>81P}9=Yh3$EsCNCf#;1edwad!JGDCiV2n8k zTL^E{8OwQF%4?*yI&j!r6m(GCE#+wFa- z`YQ0+>gwwLm6es>0Kzc5MMQS0>cBa7+*{r#p zz!xHNu+eB7ou8i{{&h@}B-@>Hj{=W~$SGC5J5AHm7xS)sb_;@F*7LkWs=5dG2{^8* z=ZrDas=5Q%1&l=G@L(|LE-x?tQpLCSy&wpJJ)Y;?qpG(8A#e_OUsc~W#vEB(T>QGO z=eiX|(RX1OKD`l-|MXt){{UFe<+KUxE5iqXPk|3aWNkDWJ#MZ2wT_=(7eGX=Q`OyN lc%ppn2F`n)Hv`lH_#HWIJ&K)oWGVmv002ovPDHLkV1n6{zI*@x diff --git a/pixmaps/hicolor/32x32/status/linphone-micro-muted.png b/pixmaps/hicolor/32x32/status/linphone-micro-muted.png deleted file mode 100644 index 98d9a36dafddd48faba4d6854311cbb1ba985c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1217 zcmV;y1U~zTP)@=LjV8-A4x<(R9J<* zmraZmMHI(>ue!5h7Rbs0{J4k;dP0%Nfh@^vcg;+=Cwu@&3eG7A(^gr$HWzaClkRK#g7;yU|`mdSzvd%p9f~iAltjli2J{Es^07O|8>>$ z>l&dA<@5O)fl`{L3xIRL7fF(QQmItxt=5uOZ?M*`1-1emz%Rf|U@mY}RZDRkA8nRf$*TrSrIyaMcV&aH~$_~dvjilWbrF#&L` zs`gD$qdfr6^NPUiBuQSFC|)j?e+AwHN=&e|*4lNx@1G9CaA8{jA~GL1KR7t}T~>~& zehqYmVK}FGJ`BV4z-z$XIF7$>7oYrimR;*ZYO|e*< zlNFyr7tM>s;`NgyW&(_kjy|6x$zUt4s=Byw-R+!P69mCMNs=75*51-GfQZZjW?iYd zwe~5X7r^)ZEr1$hW&@(CGg}5|MPV2|3+w<|`VL$b0Bdcph-?*+w}CCw3J`|j)4+CM zPZUL~MI`gr-VQ(lcv(Sf?Isb~2E6W^dz^oDxQ0A{G)EYW5A4_o}SwqMZN+2YPGsgMEZeU&bf6> z=BR3qs{VZ7z=1y-Q+EN?N~LnTWq^9UUIs=z&np284-dz{DWD`GZ#16#q6&pV06Zun zdjU$Nk_W6*)lZptdw@x{pi-#}TWbe^wYgmGP2cyQ;KI=>0m3j0?>EMLS+Ccx^E|JV zrs)RYaJ^pN2~e$8R{`@q&wC`x1Ex3=77B&=X__7Zjsv#=uNq@MOw)7^7nXNibrE@2 zM4l{{%e6wGa7UV^hk%N6Ze`m50M^;2}7Lg+GlZb5Y>gxJvU|?XhIk#9W-jF28dSH!+ z98=YMopV1<^?;cG*4h_=O(L>AilPlc5G?gPZrsT0Rwv$jz#{q%l0wxGn+C fd!E+`v;^=EjfJd`%m8&U00000NkvXXu0mjfyILs+ diff --git a/pixmaps/hicolor/32x32/status/linphone-speaker-enabled.png b/pixmaps/hicolor/32x32/status/linphone-speaker-enabled.png deleted file mode 100644 index 79ab7b1b8d91e46d864addc35e762a21ee7b149b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmV+b1poVqP)E=yQ0JZ00Ue}L_t(o zg~gRmXdG1>$3Ji8Z81i)SPKEsKm}7h_Mp;)Iy=1GP+}-3>z`g!G*+!BLZu!Qwio}< zn|e?|yonHc&^;u(^L8C;L=B>(6+CpI1*Is&EEMhTCbRSNu(PEgS+bk#`h{U0@ArPc z?`M9@d(UMDmCNOJjgOCyR;$(KR&$)4GEb+|6SZ1xWn*LGVm6x{9V&qD`-ffE{T|p4 z+?qT?0Z^Gt=A`2|1ztT1u(cMdUePUoUm~>VWV2w`;A> zCgxX^QV$0~@GisXfbaVU9mhEXi~$#bBS8@S+H0MTdg?$XlX=#0oUec}rPM+cMfX{2 z`!c0l zjJ5XjAP9Ok%jI%ztyX(gDHR4m@FTQ4a8DAy3^cmr{{FN86#bWi^Pbeafm&@gE`YpbheBU3BD!rz(rtJy`B6F0|%(r>!*NG z5&3#yVc`lu9LI-}@Gk=g0Oo*(h`a{id7f5E9ZzCk^nD#~RU&d&L|TII-&E`Qe@w&b8K0c%JuY7>298KyPClRC)=ugvISj+dTKh6^42Xb}OG`^%8e?u53P4BJ+K&Mr z_!F1`en_X&6GHE=yQ0JZ00k9EL_t(o zg~gX|h*VV=#((GDv!xc9g<*sR1!~ckG%DQHc4yBW+t#5!HWfmcl>MP7BEz6Qj9>aE zNKqfGh`vN6B4}HUv-iw+HCM~Bu!24)BvDdOJE3lOcD!@mKFo~hHV(V%LJwTHocB5B zd3f%Sd7g~(>J=bbolVp=|*Kh}1kqA02WOe%p?Ds_d{dUr$om{RKQFbrR%MFPf{Zs7BV_~vrCd{A(1nWfPQUIk?&RV+>>TTCKSBs+P zS8MGL#+VO*l}VDk2i!UpolqHLHi*b8rv{XIzj^O@-hQq1L1WC-0Mn;WUjrOfN-a&N z)2XTGgs%f@fhzFFSb~TQQg6*000ssI{t=P40Gx9xCT$>_&HBce_eA6=U=+9)I5C!| zwSKx$U!KWiW;BMIpTxpR8CbMvQAfF4{s>qNi~!56wcA^93x&ck@H22;9LIA2eBb}Q zQJy{FPT1GicmBzfCqD-61pao;^_NPey=UWRGMO219M1)69UUEi0yJM%V0c0aWHOl< zNs;N~tFrwe90F(BI!bYjkup58Mp=qLeaW7#XsBA<0Yv1>88yy|>wANdI zZeXu5=0R)i)`^-Ji~oFv#+VzNbGv~nfL(DM_ZA9;;V6p!Op+u3-UKcLwishx$>nnA z)XvYC90b9QKnToMO65mJM*4<^hE6^6D2ftm?Nh*`Kmx4WvuDpI#+aGsY#^OZFBOp@ za4GPK*7~k}`}W1HCRuCW0aDaApMK!0o}QlhlQz)X+k2aHZU=A?@L`f9EAsjLXuFBl z+C5t9TSVj_FyHt6Az=1|4W!fQ1xl%Hz;s|!S69~qtqzZ^uw%!LBfjr<0$ZpjchN)* z=p;#E&+~p$N^K6q@C9q_S^sWYq45uRpE2fpU_Ic~YPIS_jZ6tl9jpHr@yX&}eK0j0 TJP!C_00000NkvXXu0mjfo<+0@ diff --git a/pixmaps/hicolor/48x48/status/linphone-micro-enabled.png b/pixmaps/hicolor/48x48/status/linphone-micro-enabled.png deleted file mode 100644 index a54697ad1c64372b1f0ef14fe47c5bbc5e9a336a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1463 zcmV;o1xWgdP)@=LjV8;6-h)vRA_IqwLdschl7`apokm{g+l9FT3XDNCMFVz zE>(R7Kt!I3L?U&S8n1{zQ&Uq=RhI#%>V~$qwt=B!LZQ%h;3ROpZQDyKu@4mzm^g9b zO+X!hWm!o-G9Jl&Uh~dM>_g=t)ZmrB#pCe{WylrRNW)cU`9MVkM5MS03>i9u?mhAtDftm6B(tS_mmmRDYu=&~$pvR6IhSC?PI#TV36O1?s&Q252GPFTEn zajjpYUd9f~vQC%w8)F*1>W_YP`8|pIxD-Y;uIt`f;>a=J4?z0+`{((zDIzl8)BF9P zu~}Yu+@~&o1X8Kg8K4`Wn1ukyWHJ|lycfdg7{$(zg`#Vd~($Zqt zw!H?}4NL}lYHMp(_4M>y1c*c;<1EW+1I7WHve|6LuU}`v$N`CGcWx_%!K z0+C2$if!A6fhj<$P$(?QWHQAR36A5e5RnbQjDHcosH&SqqI zkxVAnmg~>3PS$8Nx)#_5SgLwRMAjse$#4D2M&!Vxkww1cSjv?d|P%SIRX?}Vzj@I7XE8=#v~kT7sM;>n)YKHLtE+oRL~ii9<^YeV>QNDSqd3nPlPbN5RtjI) zX+M}WY0`th&cXd6G7Z>TY+IJq3CypS-Kr5V#_Si7k40qs)#j<{2i39(@E7^=%38+t RpLzfQ002ovPDHLkV1o2zwnG2_ diff --git a/pixmaps/hicolor/48x48/status/linphone-micro-muted.png b/pixmaps/hicolor/48x48/status/linphone-micro-muted.png deleted file mode 100644 index 7856153ddc7b01f8c2f48a94c0ac0191a670c96c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1906 zcmV-&2aWiNP)@=LjV8<&`Cr=RA_9wSj!Lr%x$GW<@9#T~g zFg3$Rf$yI^d-m~(iHUNj*6f%7-}k=;d=KaX5Rq4bBdU5ea3kOVsOodw-QAxZ85ud* ziFG?7!1w)ofgb{hNI^ut5r*MJWjvqH_gZW3Rn>0-^F(Cd`Sa)9J$v?)+FiS=-2k~< z?grr3K$oiiX#M*2o40P=dc4}_z<~p$g9i^jyK?2qF<=w0Jd?@Dp+kp??XF*YozBJ{ z05T%7ueZ1NzTx3v+sLs{DC}0%uL6k3S6tWanJM_%wQJv*&*xV)8gEO$z`#I8RW|^r z>UVeS*pbXMr?iM;M3H7JPe}`dsp@n&sJk`bz&2D%xd9{G5P7>;R+H^ z4?YaT=VzMd%stx776d_`suqEpX#pOt00Exo^{Z;Esy73#TWfVhy=xA@%OC+c)JC7>G5CI+QC-gp-BPh2K%w9J`>0B)2%KtgPk?Tw&feq>!IUn`f-GxhRTWNZYpq8$_fRXi7j+X|(Ew z)mGX~H*5iTU)nWNEEX&9SZiBe=d#@gT-RMJB1Pb)PR6|~0N!mn0fHd7&RRPLtOQP}suzY~$1a;{YxWGBNsqmkOg5(S{`+Q}8u*i{ z>cw$<3B0PB^ms|3%NTP_`tx*?Tuq;W${W;Trp|%_OioUo>gwtOxO!-4XkNKo?oZ)Y z04D)2j^jVq22<635y2R9qPpK&yF^3)jx{TwsWV`$J(@yy2SM=uDv(!z{{T`hmp3!@ zuDb#_VT{Q}QS=sgKt$xWH11z(##X1tBOMhG$MI=kB8A>i=^q~-e*+jzn_H{ky)X>_ zQZJV8`x{fgN#Hk?e%E!c6_Hy3thHfB1*GcC;B}tNP1fLec9!r}~ z#Buy)rNMEWO-#KbA1M}#e`pq}X#tMoJPlj~K9tMlHUSI{4lYlUn~(xm<2bTCqD(DwS64-o5)=vrH}B z$dV*^2si~?Z;bg}1zuINg+k#=s(L5zGE>=YJ#d$Z+>ye+p{iSeTdLtb&)cl3_ovMV zTY-mJRHr@9+bkm6)20=XH8qb1;(6XjjWO$hepS5y{H;_f6>8zqSWg1)0JcR@bWf{1 zEeQyM;Jwz`abQ`cPgP$Ok-HkC%(~{f?p2vg=3A9QFEF0TWClk@M*iCh540e__x%-2 z<@sg6KSbm^s`@an0I;h1Q^#>0*|~G)i;ZGP8w4a0E1=Xp1Y$fLj~s@xBWNKsW^Womyc0G5czhk=jt|8n99;K3-0o|p}I z(*jcXG2lAjc#z&d753`c>VluD&7t!~(QHm!hsKEEnSk|NW< zS6dJSeMyqs0jw60TYxpd8C88oL=GEcM#C_CfewDHY$#xGaBz9KTpmkP%Gzg_ zhUWYJJ-}8G*;gnO*0hgW-|9Y%rgzv~BC-@XrmEREj$fK9h<2>*^;#~M?^4yJz%dc| zAr`0+~H7_$qwtyAlE sOn|laSrPfAh%A`SPgS4l)S3YQ10i+GTj;WK_y7O^07*qoM6N<$f~zE%z5oCK diff --git a/pixmaps/hicolor/48x48/status/linphone-speaker-enabled.png b/pixmaps/hicolor/48x48/status/linphone-speaker-enabled.png deleted file mode 100644 index 2b65cb0576f6936cacfab1892b05c6d8096f9103..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1442 zcmV;T1zq}yP)E=yQ0JZ00jO?L_t(& zf$dpeh*VV=|9xlg>>^v*YG?*NlweU7QEs%c(a62$Zi^a}E-V=Opcxds^iPSh@uASN zhyDpEM6f+%f?B!e?m1@~akd9@dK9}IK8 z-?``ez8`bXIo~-0{Kr9!4wz1-om49I5`bHSAb2gC&Hh}AKPREQW`&-fp7}u#>}O^V z0E7?$fTwEl*)RdV?=KI6;4pxt5l2MxYxOH?bub%vp0~;v#tQgQ0?3;4dj#9Dj2BKe~L?q}v7l8lwO0M~UN zveupga9>Cc=qu!T-WCAw14xC`A4K$|QtA_}b&{d}LLvhC`ubXn z#o`A5Hb)#0odxiiQtDI^F{VS!0@CU9jbmeD2Z$&gqx06{P(t@kFLJtDK*69B0a-7mGzzC=^PGWI7E>rP67~aV}!A9J!sD2LL<@ zR0trVlS-)r^-N|a_`bi8nSCL|(V?NCA^_xaxwEe8_7l+&04+qcMoQ@`rG^_)jaCC| z?bpma5Cp-A-rnB15pRq+MnrE%HZ#8tG^m`e5(~obJ0>P3-idd#wzlpBFdmvKR<2xm zTQdsS1i%6S5p8f?cUjaiI5;>4;ETw19A|aY3D8;(0*L0JAfm@B9vO-n%zSUt2?%j8 z*1kL5!OTC!%$u8105ks@Gv`%w$4m0LO(_7tvRHdcO+`fUjrV-h3CLtJf`~T9sLG9X zdDLL$vrQ*pWMm`*U`1$-x3#q$u6Sfs)DS`(Z#n_Y{6f?wqD;7S0+_s80w6;(u-1On zbOHbz3co*6O1&H7$y&P`Kuc)vH^y9OIssbi^;fQ3nX9$lgxDRDlyV1vp3p2=YqtXx z#T+x=>3N?U3Y^qrgGU!1jd;C|HeDHT<#YD>#xPBl+tJBPXTlQ zxSog(dY<=YcX#*8nM}skkngNf(<-Et8n)JU64Cb|MF6(u^ZC!?hmm@s=4CXS&5o8z zr3aY#P>fz(DwXoS@843Z|Cx};K9I}hemBOfC8BKz4VlBcgLewEfJPGj*$C|3@S6Cvh9?Cg(P@YybcN07*qoM6N<$f=nEjHvj+t diff --git a/pixmaps/hicolor/48x48/status/linphone-speaker-muted.png b/pixmaps/hicolor/48x48/status/linphone-speaker-muted.png deleted file mode 100644 index c7b8bf6d6896e0f3357d13b27d99d1bb7726daf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2160 zcmV-$2#@!PP)E=yQ0JZ00+!TL_t(& zf$dsQ)-yKYwtyCn^6tb#~UENE=Eam`3(`+iKvwpeIaQKT4)ZBT2Xf^7`c ztww1Th_x63n>3n&(l!*NKejXP-r1?0)fl>sF;)pk*C-|kva^WnmYsR`^N)S6^Eym- zXLe^cG4UjuefPY3zB%8%cklh~ohAH_Vd>JP(YCg>n>^1u)8F5JhGyG9JRUcq(df4T zywCHz?_@HWe^jeovu4elv9Ym301^Ps2_Y664RcxniA18^^Su4cYyp4}!UM3m8f`L} zoI5%?dYFiA@TqqIxMbE6a2#ie=Xp;9xGLa?sJ$9(B9Uk>7K?pEv^+%LlTN4qI4cQQ zmbFT2{WyS2YSlW9Grw3YritjoKE=#@ms09M01)*wS^;F+_I3b=Q8LffiW7;%0%p#H z%>(#aU>*P(_5>WqX=Uc0G4uKm{XBqP06&^azhcFT_j;bEPvF;7Iq%&P#j_|!On zEmF!ytBt|Ti-_nDN@M14kx0Z$rBZ*XHii+2MDAwhZ&dBP^x@&=D*)C>DRVW3Sq>m5 zD2Id)W-65$D({p`CYy`J;v>wwKx_TwOeXVUa8Cf3U*m_C<1~PdX_yB}=KoAYv2;59 zHuC^bEEW^Yd^-R~2yw)+tn(#F`5@jyL?>%7@aFLFusb+7Sg1j>uB?5!SS%*8+3deA zCMXmNrwzk+9TVlq2bg&ufExjTOw;ToqB{V9h;DOT_putx)CAkMw=(n2piM-1A;kMr zsnl@5IgT@*nH?d-u`q9%=1L+u0wCgR6Rzu~8(qwu_iEer17Y(3z|1GYCILWe-OtSX zJkL9sOeTXh0ZOUkMD##N`+cDC)hGavWm&r`O%y~_tk6GLg|8hSAKx9m(bUwm6Tpby zT-MdqbxlJP=0n5MZGz?KmGyD4NF0cZdqq79~LE)H%SJ$f_`;F+Lp7{=;`CD7g7 z-83>X@&plmAw>TIz+8cem^nPvF06Y3j^nfz3WXy8J{6)La$Wb%o}M0EO$=s!HPkHMhK5V> zxphq-9*92*>ynT1g>^|N{!4Y)55(i~%RSFa1Gp}TO+;UpQtqBiR|x|H13dti`OT5$ z=H{o%x~vK=gb*iYoPcFn?*SkITI5)xwxqSTgU``g z_s!@PavbMM09lmG7l`PyQp#zW_wkhfd#~%dKMC=qwZ0#IDFI-=QtGv7Ctz9D2esBY z09X3dTg?1v*L4q0rke^<%3H_A#^y>XHzG9fZQI^~i8E0EC}^#>17+1HGk?gktnds{ z5nAi3F|i;8Q`{&suT@I9Gcg}vU|`^laND-+Wz2j}h}seC3ChR7HveZ*2ywxKD+(dj zr_<@Wn6Ct_bqf&%dxry3${(Eff(sXh>A=uh?{OSw$<$q^2c^_WX1;})zga96Z%63W zGCa?_-!O~?n0jY+84+F2%mM(2Xq=f1O#Bh9(pvwcdfN0gt&s4p8(JX;9W#?$g->-#$vH=S6epB6jRPZmSug8nV$sE z3;@jhSFLrIQtElvb<uu5A;Dy3elCZOxO2mOjP*mxMsywfzzeVv`1Et6@dgKz?5n&yw0 z`Q8wBd~|elWnW+4ziSDql==fRcQAA2d~l-Ax3;z_A;je~H62C-nAm(TT)428i0%w- zF!N#0^Va8bxpUJAJTx>k*52O!%a)dwc>p?mdJ%vmN@qKNI(zo)jA|zV0Qr3WVE|tY z@sE3+cXKwIotF6kgM)(wDdkrHY{JChFHkzjtqX!zXl;n=jm2Ucve|5$s=}=QuS92OXUm*9bM7Oe mD~RZB*L7c*Z4duPJ@H=@#ZbH_NT@yl0000*~ diff --git a/pixmaps/mic_active.png b/pixmaps/mic_active.png new file mode 100644 index 0000000000000000000000000000000000000000..ee6b9038c4df8945da8ea80203ef8a4e1101b4d2 GIT binary patch literal 3523 zcmV;!4LtIRP)X+uL$Nkc;*P;zf(X>4Tx07wm;mUmQB*%pV-y*Itk5+Wca^cs2zAksTX z6$DXM^`x7XQc?|s+008spb1j2M!0f022SQPH-!CVp(%f$Br7!UytSOLJ{W@ZFO z_(THK{JlMynW#v{v-a*TfMmPdEWc1DbJqWVks>!kBnAKqMb$PuekK>?0+ds;#ThdH z1j_W4DKdsJG8Ul;qO2n0#IJ1jr{*iW$(WZWsE0n`c;fQ!l&-AnmjxZO1uWyz`0VP>&nP`#i ztsL#`S=Q!g`M=rU9)45(J;-|dRq-b5&z?byo>|{)?5r=n76A4nTALlSzLiw~v~31J z<>9PP?;rs31pu_(obw)rY+jPY;tVGXi|p)da{-@gE-UCa`=5eu%D;v=_nFJ?`&K)q z7e9d`Nfk3?MdhZarb|T3%nS~f&t(1g5dY)AIcd$w!z`Siz!&j_=v7hZlnI21XuE|x zfmo0(WD10T)!}~_HYW!eew}L+XmwuzeT6wtxJd`dZ#@7*BLgIEKY9Xv>st^p3dp{^ zXswa2bB{85{^$B13tWnB;Y>jyQ|9&zk7RNsqAVGs--K+z0uqo1bf5|}fi5rtEMN^B zfHQCd-XH*kfJhJnmIE$G0%<@5vOzxB0181d*a3EfYH$G5fqKvcPJ%XY23!PJzzuK< z41h;K3WmW;Fah3yX$XSw5EY_9s*o0>51B&N5F1(uc|$=^I1~fLLy3?Ol0f;;Ca4%H zgQ}rJP(Ab`bQ-z{U4#0d2hboi2K@njgb|nm(_szR0JebHusa+GN5aeCM0gdP2N%HG z;Yzp`J`T6S7vUT504#-H!jlL<$Or?`Mpy_N@kBz9SR?@vA#0H$qyni$nvf2p8@Y{0 zk#Xb$28W?xm>3qu8RLgpjNxKdVb)?wFx8l2m{v>|<~C*!GlBVnrDD~wrdTJeKXwT= z5u1%I#8zOBU|X=4u>;s)>^mF|$G{ol9B_WP7+f-LHLe7=57&&lfa}8z;U@8Tyei%l z?}87(bMRt(A-)QK9Dg3)j~~XrCy)tR1Z#p1A(kK{Y$Q|=8VKhI{e%(1G*N-5Pjn)N z5P8I0VkxnX*g?EW941ba6iJ387g8iCnY4jaNopcpCOsy-A(P2EWJhusSwLP-t|Xrz zUnLKcKTwn?CKOLf97RIePB}`sKzTrUL#0v;sBY9)s+hW+T2H-1eM)^VN0T#`^Oxhv zt&^*fYnAJldnHel*OzyfUoM{~Um<@={-*r60#U(0!Bc^wuvVc);k3d%g-J!4qLpHZ zVwz%!VuRu}#Ze`^l7W)95>Kf>>9Eozr6C$Z)1`URxU@~QI@)F0FdauXr2Es8>BaOP z=)Lp_WhG@>R;lZ?BJkMlIuMhw8Ap ziF&yDYW2hFJ?fJhni{?u85&g@mo&yT8JcdI$(rSw=QPK(Xj%)k1X|@<=e1rim6`6$ zRAwc!i#egKuI;BS(LSWzt39n_sIypSqfWEV6J3%nTQ@-4ii$R;gsG*9XzhRzXqv2yCs*$VFDx+GXJH|L;wsDH_KI2;^ zu!)^Xl1YupO;gy^-c(?^&$Q1BYvyPsG^;hc$D**@Sy`+`)}T4VJji^bd7Jqw3q6Zi zi=7tT7GEswEK@D(EFW1ZSp`^awCb?>!`j4}Yh7b~$A)U-W3$et-R8BesV(1jzwLcH znq9En7Q0Tn&-M=XBKs!$F$X<|c!#|X_tWYh)GZit(Q)Cp9CDE^WG;+fcyOWARoj*0TI>4EP1lX*cEoMO-Pk?Z z{kZ!p4@(b`M~lalr<3Oz&kJ6Nm#vN_+kA5 z{dW4@^Vjg_`q%qU1ULk&3Fr!>1V#i_2R;ij2@(Z$1jE4r!MlPVFVbHmT+|iPIq0wy5aS{>yK?9ZAjVh%SOwMWgFja zir&;wpi!{CU}&@N=Eg#~LQ&zpEzVmGY{hI9Z0+4-0x zS$$Xe-OToc?Y*V;rTcf_b_jRe-RZjXSeas3UfIyD;9afd%<`i0x4T#DzE)vdabOQ= zk7SRuGN`h>O0Q~1)u-yD>VX=Mn&!Rgd$;YK+Q-}1zu#?t(*cbG#Ronf6db&N$oEid ztwC+YVcg-Y!_VuY>bk#Ye_ww@?MU&F&qswvrN_dLb=5o6*Egs)ls3YRlE$&)amR1{ z;Ppd$6RYV^Go!iq1UMl%@#4q$AMc(FJlT1QeX8jv{h#)>&{~RGq1N2iiMFIRX?sk2 z-|2wUogK~{EkB$8eDsX=nVPf8XG_nK&J~=SIiGia@9y}|z3FhX{g&gc zj=lwb=lWgyFW&aLedUh-of`v-2Kw$UzI*>(+&$@i-u=-BsSjR1%z8NeX#HdC`Hh-Z(6xI-`hmHDqv!v)W&&nrf>M(RhcN6(D;jNN*% z^u_SYjF;2ng}*8Ow)d6MtDk;%`@Lsk$;9w$(d(H%O5UixIr`T2ZRcd@(7L_7m6MZ`7UIWzZxQJH{JdJL)jpTY<+qk) z&7vrh`Ft*15hMtvuX$da4~IkV`uh6o@$vC{U_3b4Y&O5YzyD=xYirMid7h^diG-qY zU0PaFsZ>hgm07tDfgwvL zMhiv^Ad`hee2msE56}MD~ICJnkRv@!rNPjZ6*M5K8+Gh)g(y zj)U5aLS#+K&5s-T`Kv2))TP_)N-m!l-%}DmS`=eol`_cw*EXF`+-NlD_OEe@+W;{?wm)W2-eJ0Nc&Y#Z002ovPDHLkV1nC;%dr3e literal 0 HcmV?d00001 diff --git a/pixmaps/mic_muted.png b/pixmaps/mic_muted.png new file mode 100644 index 0000000000000000000000000000000000000000..60fd187611676958aacee6bbbb942533c7784242 GIT binary patch literal 3716 zcmV-~4tw#5P)X+uL$Nkc;*P;zf(X>4Tx07wm;mUmQB*%pV-y*Itk5+Wca^cs2zAksTX z6$DXM^`x7XQc?|s+008spb1j2M!0f022SQPH-!CVp(%f$Br7!UytSOLJ{W@ZFO z_(THK{JlMynW#v{v-a*TfMmPdEWc1DbJqWVks>!kBnAKqMb$PuekK>?0+ds;#ThdH z1j_W4DKdsJG8Ul;qO2n0#IJ1jr{*iW$(WZWsE0n`c;fQ!l&-AnmjxZO1uWyz`0VP>&nP`#i ztsL#`S=Q!g`M=rU9)45(J;-|dRq-b5&z?byo>|{)?5r=n76A4nTALlSzLiw~v~31J z<>9PP?;rs31pu_(obw)rY+jPY;tVGXi|p)da{-@gE-UCa`=5eu%D;v=_nFJ?`&K)q z7e9d`Nfk3?MdhZarb|T3%nS~f&t(1g5dY)AIcd$w!z`Siz!&j_=v7hZlnI21XuE|x zfmo0(WD10T)!}~_HYW!eew}L+XmwuzeT6wtxJd`dZ#@7*BLgIEKY9Xv>st^p3dp{^ zXswa2bB{85{^$B13tWnB;Y>jyQ|9&zk7RNsqAVGs--K+z0uqo1bf5|}fi5rtEMN^B zfHQCd-XH*kfJhJnmIE$G0%<@5vOzxB0181d*a3EfYH$G5fqKvcPJ%XY23!PJzzuK< z41h;K3WmW;Fah3yX$XSw5EY_9s*o0>51B&N5F1(uc|$=^I1~fLLy3?Ol0f;;Ca4%H zgQ}rJP(Ab`bQ-z{U4#0d2hboi2K@njgb|nm(_szR0JebHusa+GN5aeCM0gdP2N%HG z;Yzp`J`T6S7vUT504#-H!jlL<$Or?`Mpy_N@kBz9SR?@vA#0H$qyni$nvf2p8@Y{0 zk#Xb$28W?xm>3qu8RLgpjNxKdVb)?wFx8l2m{v>|<~C*!GlBVnrDD~wrdTJeKXwT= z5u1%I#8zOBU|X=4u>;s)>^mF|$G{ol9B_WP7+f-LHLe7=57&&lfa}8z;U@8Tyei%l z?}87(bMRt(A-)QK9Dg3)j~~XrCy)tR1Z#p1A(kK{Y$Q|=8VKhI{e%(1G*N-5Pjn)N z5P8I0VkxnX*g?EW941ba6iJ387g8iCnY4jaNopcpCOsy-A(P2EWJhusSwLP-t|Xrz zUnLKcKTwn?CKOLf97RIePB}`sKzTrUL#0v;sBY9)s+hW+T2H-1eM)^VN0T#`^Oxhv zt&^*fYnAJldnHel*OzyfUoM{~Um<@={-*r60#U(0!Bc^wuvVc);k3d%g-J!4qLpHZ zVwz%!VuRu}#Ze`^l7W)95>Kf>>9Eozr6C$Z)1`URxU@~QI@)F0FdauXr2Es8>BaOP z=)Lp_WhG@>R;lZ?BJkMlIuMhw8Ap ziF&yDYW2hFJ?fJhni{?u85&g@mo&yT8JcdI$(rSw=QPK(Xj%)k1X|@<=e1rim6`6$ zRAwc!i#egKuI;BS(LSWzt39n_sIypSqfWEV6J3%nTQ@-4ii$R;gsG*9XzhRzXqv2yCs*$VFDx+GXJH|L;wsDH_KI2;^ zu!)^Xl1YupO;gy^-c(?^&$Q1BYvyPsG^;hc$D**@Sy`+`)}T4VJji^bd7Jqw3q6Zi zi=7tT7GEswEK@D(EFW1ZSp`^awCb?>!`j4}Yh7b~$A)U-W3$et-R8BesV(1jzwLcH znq9En7Q0Tn&-M=XBKs!$F$X<|c!#|X_tWYh)GZit(Q)Cp9CDE^WG;+fcyOWARoj*0TI>4EP1lX*cEoMO-Pk?Z z{kZ!p4@(b`M~lalr<3Oz&kJ6Nm#vN_+kA5 z{dW4@^Vjg_`q%qU1ULk&3Fr!>1V#i_2R;ij2@(Z$1jE4r!MlPVFVbHmT+|iPIq0wy5aS{>yK?9ZAjVh%SOwMWgFja zir&;wpi!{CU}&@N=Eg#~LQ&zpEzVmGY{hI9Z0+4-0x zS$$Xe-OToc?Y*V;rTcf_b_jRe-RZjXSeas3UfIyD;9afd%<`i0x4T#DzE)vdabOQ= zk7SRuGN`h>O0Q~1)u-yD>VX=Mn&!Rgd$;YK+Q-}1zu#?t(*cbG#Ronf6db&N$oEid ztwC+YVcg-Y!_VuY>bk#Ye_ww@?MU&F&qswvrN_dLb=5o6*Egs)ls3YRlE$&)amR1{ z;Ppd$6RYV^Go!iq1UMl%@#4q$AMc(FJlT1QeX8jv{h#)>&{~RGq1N2iiMFIRX?sk2 z-|2wUogK~{EkB$8eDsX=nVPf8XG_nK&J~=SIiGia@9y}|z3FhX{g&gc zj=lwb=lWgyFW&aLedUh-of`v-2Kw$UzI*>(+&$@i-u=-BsSjR1%z8NeX#HdC`Hh-Z(6xI-`hmHDqv!v)W&&nrf>M(RhcN6(D;jNN*% z^u_SYjF;2ng}*8Ow)d6MtDk;%`@Lsk$;9w$(d(H%O5UixIr`T2ZRcd@~4}Z*@T9eR;3AzE;Nd7#fTs^ zEi@p;1`0li=!2zD?1L?R^G&4&3Xwh(O7MqD`w%b>jcG`_c~Al=D)x`mXozc?xRT9e zGc!B?{k}<4+7IUM{+xU6Ip>au;}~3*o;=BY5QcfPR!hEJ*G280cW&7Fj-n{`t5soA z|EaaLzv6S}9PXEVyDY>TZ;y{((e~~=+$w|@`aXg%L`auU?=+c*CEtPP0ji4C)z#Ej zQ&ZmxAwDHCFXi{8Qqw!d;??%~`NP<@4VnG>4O%_{VgQvUF(9)Oj3xwpMM1;k$H?dN zr!HQ&P$jVQvQRF!<_m=$U(?`SyB4n7wxSgZP=f$6m4Zg?T&`P#Z9DJ?+@G02{q%Gs zPn=M*PoEy6?k^O}wngmwuGqaBW^b=z4h@ObnHjO}c|ui%a9u})Q6N&Olz3Jyi?w1= z(1K#Vr$<>b48)cdcXV_>p&g@2;#JFKcsqB(Ier|<@G$JzS(r74SXi(f3l(Pr&X40r zkBnfczaLAP3|=fOV7*$6ySln!#Ut_f@_8$yh1|0T=6ihzZ{CFc+pqAYpzQ?kex60c zPt#aAdKBLF?Z~nLq!sID+cqSFa0C=;3#nsZ`pue=AE0Ib=HyUNLmky5GcxrXY9eGDIc|@!5GOQU@&$PM*#{ z1j02pH}`)=%t{iN5S#22wqH*}N!JnM6fp;7Duj_X5;uAL7FZHUM&-OHw1TGV@Zt#8 z{rhO0Dx&SmAR^bpGBNWGyalDB6X`U|qkx?JSCT~REubVfb#>UdcMtm57_5N-`1uxC zO?kXHbO=p9+<`XtC-htn1}$ii{ae~fwx3HQbf2EVg9k{D-9hmF0G6~Afyu z-kyld^P(e1;I*`fMbh&5qer9E^ipt!$immZ9vr;bRw(ouQqo^!^Vh+rpHs_Eoy6s_ zAu;7cSTW7`m&wVIFK^uVoZ6QYAVOrY`o4n)n=6%yaLJ9u#YL>Fte~IHm1&xon3&*U i|1HktGJzyNw!Z<(Gv*&o7Db={0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipl7 z6cPu+ni_uq00BoyL_t(I%k7lEO2beThrb&|MAE_FkWGhBap=-fmu6_8;L@R^#3xX2 zb12<9**EFp&^Pb_ickVs;+8G31SIXv&2=dbYP7A6{lS65J)95DJ%3=UpX4|W0IgQb z_%p0ls{zn#HqXK^eA*aPtyUS2#{dk6!;8se@)iU^0_?90ab5SzTfg7G_I+RazOSd# z>1!EKltFvFp4(_NPL)z*S$6I?&XtrB0HxHdUa#9g_Bn62glBX*okyiqMQe@Lnlw#6 zf?Dg+>dJt7Ns<&od|$vOK(Z|3Ux89eQ5416Q?XO_hk2eK#c@0j!|)}JV{O~^;bO5s zDMe8f^U-MZ0OTuo8K?l}(m!su+xOjW_tG#7LkKbRJa4To1EfnsYaIz8ZlWj(JkPr` xP4nN@*|IF_b}$$`ueB+^=m0nYjP1Du;2jAJgl;WPqa^?U002ovPDHLkV1jF=y>I{k literal 0 HcmV?d00001 diff --git a/pixmaps/svg/.directory b/pixmaps/svg/.directory deleted file mode 100644 index c99a6191a..000000000 --- a/pixmaps/svg/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -PreviewsShown=true -Timestamp=2015,8,3,13,7,36 -Version=3 diff --git a/pixmaps/svg/linphone-micro-enabled.svg b/pixmaps/svg/linphone-micro-enabled.svg deleted file mode 100644 index a23354bc1..000000000 --- a/pixmaps/svg/linphone-micro-enabled.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - image/svg+xml - - micro_default - - - - - - micro_default - Created with Sketch. - - - - - - diff --git a/pixmaps/svg/linphone-micro-muted.svg b/pixmaps/svg/linphone-micro-muted.svg deleted file mode 100644 index 09d505c59..000000000 --- a/pixmaps/svg/linphone-micro-muted.svg +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - image/svg+xml - - micro_default - - - - - - micro_default - Created with Sketch. - - - - - - - - - - diff --git a/pixmaps/svg/linphone-speaker-enabled.svg b/pixmaps/svg/linphone-speaker-enabled.svg deleted file mode 100644 index 8a122795d..000000000 --- a/pixmaps/svg/linphone-speaker-enabled.svg +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - image/svg+xml - - speaker_default - - - - - - speaker_default - Created with Sketch. - - - - - - - - - - diff --git a/pixmaps/svg/linphone-speaker-muted.svg b/pixmaps/svg/linphone-speaker-muted.svg deleted file mode 100644 index 1e85b85be..000000000 --- a/pixmaps/svg/linphone-speaker-muted.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - image/svg+xml - - speaker_default - - - - - - speaker_default - Created with Sketch. - - - - - From c29def8492cb748aec63f0a2fac19ce9698bfb05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Tue, 4 Aug 2015 09:30:32 +0200 Subject: [PATCH 030/134] Fixed version of "Use icons designed by Kerosine for speaker and microphone icons"" --- gtk/incall_view.c | 43 ++++++----- gtk/main.c | 11 +++ gtk/main.ui | 11 +-- pixmaps/CMakeLists.txt | 10 +++ pixmaps/Makefile.am | 19 +++-- pixmaps/mic_active.png | Bin 3523 -> 0 bytes pixmaps/mic_muted.png | Bin 3716 -> 0 bytes pixmaps/speaker.png | Bin 455 -> 0 bytes pixmaps/svg/.directory | 4 + pixmaps/svg/linphone-micro-enabled.svg | 78 ++++++++++++++++++++ pixmaps/svg/linphone-micro-muted.svg | 90 +++++++++++++++++++++++ pixmaps/svg/linphone-speaker-enabled.svg | 87 ++++++++++++++++++++++ pixmaps/svg/linphone-speaker-muted.svg | 76 +++++++++++++++++++ 13 files changed, 389 insertions(+), 40 deletions(-) delete mode 100644 pixmaps/mic_active.png delete mode 100644 pixmaps/mic_muted.png delete mode 100644 pixmaps/speaker.png create mode 100644 pixmaps/svg/.directory create mode 100644 pixmaps/svg/linphone-micro-enabled.svg create mode 100644 pixmaps/svg/linphone-micro-muted.svg create mode 100644 pixmaps/svg/linphone-speaker-enabled.svg create mode 100644 pixmaps/svg/linphone-speaker-muted.svg diff --git a/gtk/incall_view.c b/gtk/incall_view.c index 15b1396bb..db056fdc8 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -646,16 +646,26 @@ static void volume_control_value_changed(GtkScaleButton *button, gdouble value, } } +static void volume_control_button_update_value(GtkWidget *widget) { + LinphoneCall *call = (LinphoneCall *)g_object_get_data(G_OBJECT(widget), "call"); + VolumeControlType type = (VolumeControlType)g_object_get_data(G_OBJECT(widget), "type"); + + if(type == VOLUME_CTRL_PLAYBACK) { + gtk_scale_button_set_value(GTK_SCALE_BUTTON(widget), linphone_call_get_speaker_volume_gain(call)); + } else if(type == VOLUME_CTRL_RECORD) { + gtk_scale_button_set_value(GTK_SCALE_BUTTON(widget), linphone_call_get_microphone_volume_gain(call)); + } +} + +static gboolean volume_control_button_enter_event_handler(GtkWidget *widget) { + volume_control_button_update_value(widget); + return FALSE; +} + static void volume_control_init(GtkWidget *vol_ctrl, VolumeControlType type, LinphoneCall *call) { g_object_set_data(G_OBJECT(vol_ctrl), "call", call); g_object_set_data(G_OBJECT(vol_ctrl), "type", (gpointer)type); - - if(type == VOLUME_CTRL_PLAYBACK) { - gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_speaker_volume_gain(call)); - } else if(type == VOLUME_CTRL_RECORD) { - gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_ctrl), linphone_call_get_microphone_volume_gain(call)); - } - + g_signal_connect(G_OBJECT(vol_ctrl), "enter-notify-event", G_CALLBACK(volume_control_button_enter_event_handler), NULL); g_signal_connect(G_OBJECT(vol_ctrl), "value-changed", G_CALLBACK(volume_control_value_changed), NULL); } @@ -864,22 +874,11 @@ void linphone_gtk_in_call_view_set_transfer_status(LinphoneCall *call,LinphoneCa } void linphone_gtk_draw_mute_button(GtkButton *button, gboolean active){ + const char *icon_name = active ? "linphone-micro-muted" : "linphone-micro-enabled"; + GtkWidget *image = gtk_image_new_from_icon_name(icon_name, GTK_ICON_SIZE_BUTTON); + gtk_button_set_image(button, image); + gtk_widget_show(image); g_object_set_data(G_OBJECT(button),"active",GINT_TO_POINTER(active)); - if (active){ - GtkWidget *image=create_pixmap("mic_muted.png"); - /*gtk_button_set_label(GTK_BUTTON(button),_("Unmute"));*/ - if (image!=NULL) { - gtk_button_set_image(GTK_BUTTON(button),image); - gtk_widget_show(image); - } - }else{ - GtkWidget *image=create_pixmap("mic_active.png"); - /*gtk_button_set_label(GTK_BUTTON(button),_("Mute"));*/ - if (image!=NULL) { - gtk_button_set_image(GTK_BUTTON(button),image); - gtk_widget_show(image); - } - } } void linphone_gtk_mute_clicked(GtkButton *button){ diff --git a/gtk/main.c b/gtk/main.c index f9bc2722d..5a03ac033 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -2124,6 +2124,17 @@ int main(int argc, char *argv[]){ /*for pulseaudio:*/ g_setenv("PULSE_PROP_media.role", "phone", TRUE); #endif + + /* Add the data directory of Linphone to XDG_DATA_DIRS to enable GTK+ to find + the Linphone specific icons */ + tmp = g_getenv("XDG_DATA_DIRS"); + if(tmp && strlen(tmp) > 0) { + char *xdg_data_dirs = g_strdup_printf("%s:%s", tmp, PACKAGE_DATA_DIR "/linphone"); + g_setenv("XDG_DATA_DIRS", xdg_data_dirs, TRUE); + g_free(xdg_data_dirs); + } else { + g_setenv("XDG_DATA_DIRS", PACKAGE_DATA_DIR "/linphone", FALSE); + } lang=linphone_gtk_get_lang(config_file); if (lang == NULL || lang[0]=='\0'){ diff --git a/gtk/main.ui b/gtk/main.ui index 50f2a106f..3f9d7fbe5 100644 --- a/gtk/main.ui +++ b/gtk/main.ui @@ -2,6 +2,7 @@ + True False @@ -304,10 +305,7 @@ none False vertical - audio-volume-muted -audio-volume-high -audio-volume-low -audio-volume-medium + linphone-micro-enabled False @@ -350,10 +348,7 @@ audio-volume-medium none False vertical - audio-volume-muted -audio-volume-high -audio-volume-low -audio-volume-medium + linphone-speaker-enabled False diff --git a/pixmaps/CMakeLists.txt b/pixmaps/CMakeLists.txt index 800869425..cae9128b7 100644 --- a/pixmaps/CMakeLists.txt +++ b/pixmaps/CMakeLists.txt @@ -20,6 +20,8 @@ # ############################################################################ +set(ICONS_INSTALL_DIR ${PACKAGE_DATA_DIR}/linphone/icons/hicolor) + file(GLOB PIXMAPS "*.png" "linphone.icns") install(FILES ${PIXMAPS} @@ -27,6 +29,14 @@ install(FILES ${PIXMAPS} PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ ) +install(FILES svg/linphone-micro-muted.svg + svg/linphone-speaker-muted.svg + svg/linphone-micro-enabled.svg + svg/linphone-speaker-enabled.svg + DESTINATION ${ICONS_INSTALL_DIR}/scalable/status + PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ +) + install(FILES linphone.png DESTINATION ${PACKAGE_DATA_DIR}/icons/hicolor/48x48/apps PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am index b0fb73d8a..708ce8587 100644 --- a/pixmaps/Makefile.am +++ b/pixmaps/Makefile.am @@ -1,8 +1,6 @@ pixmapdir=$(datadir)/pixmaps/linphone - -pixmap_DATA= \ +dist_pixmap_DATA= \ hold_on.png hold_off.png \ - mic_muted.png mic_active.png \ linphone.png linphone-banner.png \ status-green.png \ status-orange.png \ @@ -14,16 +12,17 @@ pixmap_DATA= \ contact-orange.png history-orange.png\ call_start.png startcall-small.png stopcall-red.png stopcall-small.png call_add.png linphone.icns \ contact_starred.png contact_unstarred.png \ - speaker.png \ call_status_incoming.png call_status_outgoing.png \ ok.png \ dialer.png \ notok.png +appicondir=$(datadir)/icons/hicolor/48x48/apps +dist_appicon_DATA= linphone.png -iconsdir=$(datadir)/icons/hicolor/48x48/apps - -icons_DATA= linphone.png - - -EXTRA_DIST=$(pixmap_DATA) $(icons_DATA) +statusiconsdir=$(datadir)/linphone/icons/hicolor/scalable/status +dist_statusicons_DATA= \ + svg/linphone-micro-muted.svg \ + svg/linphone-speaker-muted.svg \ + svg/linphone-micro-enabled.svg \ + svg/linphone-speaker-enabled.svg diff --git a/pixmaps/mic_active.png b/pixmaps/mic_active.png deleted file mode 100644 index ee6b9038c4df8945da8ea80203ef8a4e1101b4d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3523 zcmV;!4LtIRP)X+uL$Nkc;*P;zf(X>4Tx07wm;mUmQB*%pV-y*Itk5+Wca^cs2zAksTX z6$DXM^`x7XQc?|s+008spb1j2M!0f022SQPH-!CVp(%f$Br7!UytSOLJ{W@ZFO z_(THK{JlMynW#v{v-a*TfMmPdEWc1DbJqWVks>!kBnAKqMb$PuekK>?0+ds;#ThdH z1j_W4DKdsJG8Ul;qO2n0#IJ1jr{*iW$(WZWsE0n`c;fQ!l&-AnmjxZO1uWyz`0VP>&nP`#i ztsL#`S=Q!g`M=rU9)45(J;-|dRq-b5&z?byo>|{)?5r=n76A4nTALlSzLiw~v~31J z<>9PP?;rs31pu_(obw)rY+jPY;tVGXi|p)da{-@gE-UCa`=5eu%D;v=_nFJ?`&K)q z7e9d`Nfk3?MdhZarb|T3%nS~f&t(1g5dY)AIcd$w!z`Siz!&j_=v7hZlnI21XuE|x zfmo0(WD10T)!}~_HYW!eew}L+XmwuzeT6wtxJd`dZ#@7*BLgIEKY9Xv>st^p3dp{^ zXswa2bB{85{^$B13tWnB;Y>jyQ|9&zk7RNsqAVGs--K+z0uqo1bf5|}fi5rtEMN^B zfHQCd-XH*kfJhJnmIE$G0%<@5vOzxB0181d*a3EfYH$G5fqKvcPJ%XY23!PJzzuK< z41h;K3WmW;Fah3yX$XSw5EY_9s*o0>51B&N5F1(uc|$=^I1~fLLy3?Ol0f;;Ca4%H zgQ}rJP(Ab`bQ-z{U4#0d2hboi2K@njgb|nm(_szR0JebHusa+GN5aeCM0gdP2N%HG z;Yzp`J`T6S7vUT504#-H!jlL<$Or?`Mpy_N@kBz9SR?@vA#0H$qyni$nvf2p8@Y{0 zk#Xb$28W?xm>3qu8RLgpjNxKdVb)?wFx8l2m{v>|<~C*!GlBVnrDD~wrdTJeKXwT= z5u1%I#8zOBU|X=4u>;s)>^mF|$G{ol9B_WP7+f-LHLe7=57&&lfa}8z;U@8Tyei%l z?}87(bMRt(A-)QK9Dg3)j~~XrCy)tR1Z#p1A(kK{Y$Q|=8VKhI{e%(1G*N-5Pjn)N z5P8I0VkxnX*g?EW941ba6iJ387g8iCnY4jaNopcpCOsy-A(P2EWJhusSwLP-t|Xrz zUnLKcKTwn?CKOLf97RIePB}`sKzTrUL#0v;sBY9)s+hW+T2H-1eM)^VN0T#`^Oxhv zt&^*fYnAJldnHel*OzyfUoM{~Um<@={-*r60#U(0!Bc^wuvVc);k3d%g-J!4qLpHZ zVwz%!VuRu}#Ze`^l7W)95>Kf>>9Eozr6C$Z)1`URxU@~QI@)F0FdauXr2Es8>BaOP z=)Lp_WhG@>R;lZ?BJkMlIuMhw8Ap ziF&yDYW2hFJ?fJhni{?u85&g@mo&yT8JcdI$(rSw=QPK(Xj%)k1X|@<=e1rim6`6$ zRAwc!i#egKuI;BS(LSWzt39n_sIypSqfWEV6J3%nTQ@-4ii$R;gsG*9XzhRzXqv2yCs*$VFDx+GXJH|L;wsDH_KI2;^ zu!)^Xl1YupO;gy^-c(?^&$Q1BYvyPsG^;hc$D**@Sy`+`)}T4VJji^bd7Jqw3q6Zi zi=7tT7GEswEK@D(EFW1ZSp`^awCb?>!`j4}Yh7b~$A)U-W3$et-R8BesV(1jzwLcH znq9En7Q0Tn&-M=XBKs!$F$X<|c!#|X_tWYh)GZit(Q)Cp9CDE^WG;+fcyOWARoj*0TI>4EP1lX*cEoMO-Pk?Z z{kZ!p4@(b`M~lalr<3Oz&kJ6Nm#vN_+kA5 z{dW4@^Vjg_`q%qU1ULk&3Fr!>1V#i_2R;ij2@(Z$1jE4r!MlPVFVbHmT+|iPIq0wy5aS{>yK?9ZAjVh%SOwMWgFja zir&;wpi!{CU}&@N=Eg#~LQ&zpEzVmGY{hI9Z0+4-0x zS$$Xe-OToc?Y*V;rTcf_b_jRe-RZjXSeas3UfIyD;9afd%<`i0x4T#DzE)vdabOQ= zk7SRuGN`h>O0Q~1)u-yD>VX=Mn&!Rgd$;YK+Q-}1zu#?t(*cbG#Ronf6db&N$oEid ztwC+YVcg-Y!_VuY>bk#Ye_ww@?MU&F&qswvrN_dLb=5o6*Egs)ls3YRlE$&)amR1{ z;Ppd$6RYV^Go!iq1UMl%@#4q$AMc(FJlT1QeX8jv{h#)>&{~RGq1N2iiMFIRX?sk2 z-|2wUogK~{EkB$8eDsX=nVPf8XG_nK&J~=SIiGia@9y}|z3FhX{g&gc zj=lwb=lWgyFW&aLedUh-of`v-2Kw$UzI*>(+&$@i-u=-BsSjR1%z8NeX#HdC`Hh-Z(6xI-`hmHDqv!v)W&&nrf>M(RhcN6(D;jNN*% z^u_SYjF;2ng}*8Ow)d6MtDk;%`@Lsk$;9w$(d(H%O5UixIr`T2ZRcd@(7L_7m6MZ`7UIWzZxQJH{JdJL)jpTY<+qk) z&7vrh`Ft*15hMtvuX$da4~IkV`uh6o@$vC{U_3b4Y&O5YzyD=xYirMid7h^diG-qY zU0PaFsZ>hgm07tDfgwvL zMhiv^Ad`hee2msE56}MD~ICJnkRv@!rNPjZ6*M5K8+Gh)g(y zj)U5aLS#+K&5s-T`Kv2))TP_)N-m!l-%}DmS`=eol`_cw*EXF`+-NlD_OEe@+W;{?wm)W2-eJ0Nc&Y#Z002ovPDHLkV1nC;%dr3e diff --git a/pixmaps/mic_muted.png b/pixmaps/mic_muted.png deleted file mode 100644 index 60fd187611676958aacee6bbbb942533c7784242..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3716 zcmV-~4tw#5P)X+uL$Nkc;*P;zf(X>4Tx07wm;mUmQB*%pV-y*Itk5+Wca^cs2zAksTX z6$DXM^`x7XQc?|s+008spb1j2M!0f022SQPH-!CVp(%f$Br7!UytSOLJ{W@ZFO z_(THK{JlMynW#v{v-a*TfMmPdEWc1DbJqWVks>!kBnAKqMb$PuekK>?0+ds;#ThdH z1j_W4DKdsJG8Ul;qO2n0#IJ1jr{*iW$(WZWsE0n`c;fQ!l&-AnmjxZO1uWyz`0VP>&nP`#i ztsL#`S=Q!g`M=rU9)45(J;-|dRq-b5&z?byo>|{)?5r=n76A4nTALlSzLiw~v~31J z<>9PP?;rs31pu_(obw)rY+jPY;tVGXi|p)da{-@gE-UCa`=5eu%D;v=_nFJ?`&K)q z7e9d`Nfk3?MdhZarb|T3%nS~f&t(1g5dY)AIcd$w!z`Siz!&j_=v7hZlnI21XuE|x zfmo0(WD10T)!}~_HYW!eew}L+XmwuzeT6wtxJd`dZ#@7*BLgIEKY9Xv>st^p3dp{^ zXswa2bB{85{^$B13tWnB;Y>jyQ|9&zk7RNsqAVGs--K+z0uqo1bf5|}fi5rtEMN^B zfHQCd-XH*kfJhJnmIE$G0%<@5vOzxB0181d*a3EfYH$G5fqKvcPJ%XY23!PJzzuK< z41h;K3WmW;Fah3yX$XSw5EY_9s*o0>51B&N5F1(uc|$=^I1~fLLy3?Ol0f;;Ca4%H zgQ}rJP(Ab`bQ-z{U4#0d2hboi2K@njgb|nm(_szR0JebHusa+GN5aeCM0gdP2N%HG z;Yzp`J`T6S7vUT504#-H!jlL<$Or?`Mpy_N@kBz9SR?@vA#0H$qyni$nvf2p8@Y{0 zk#Xb$28W?xm>3qu8RLgpjNxKdVb)?wFx8l2m{v>|<~C*!GlBVnrDD~wrdTJeKXwT= z5u1%I#8zOBU|X=4u>;s)>^mF|$G{ol9B_WP7+f-LHLe7=57&&lfa}8z;U@8Tyei%l z?}87(bMRt(A-)QK9Dg3)j~~XrCy)tR1Z#p1A(kK{Y$Q|=8VKhI{e%(1G*N-5Pjn)N z5P8I0VkxnX*g?EW941ba6iJ387g8iCnY4jaNopcpCOsy-A(P2EWJhusSwLP-t|Xrz zUnLKcKTwn?CKOLf97RIePB}`sKzTrUL#0v;sBY9)s+hW+T2H-1eM)^VN0T#`^Oxhv zt&^*fYnAJldnHel*OzyfUoM{~Um<@={-*r60#U(0!Bc^wuvVc);k3d%g-J!4qLpHZ zVwz%!VuRu}#Ze`^l7W)95>Kf>>9Eozr6C$Z)1`URxU@~QI@)F0FdauXr2Es8>BaOP z=)Lp_WhG@>R;lZ?BJkMlIuMhw8Ap ziF&yDYW2hFJ?fJhni{?u85&g@mo&yT8JcdI$(rSw=QPK(Xj%)k1X|@<=e1rim6`6$ zRAwc!i#egKuI;BS(LSWzt39n_sIypSqfWEV6J3%nTQ@-4ii$R;gsG*9XzhRzXqv2yCs*$VFDx+GXJH|L;wsDH_KI2;^ zu!)^Xl1YupO;gy^-c(?^&$Q1BYvyPsG^;hc$D**@Sy`+`)}T4VJji^bd7Jqw3q6Zi zi=7tT7GEswEK@D(EFW1ZSp`^awCb?>!`j4}Yh7b~$A)U-W3$et-R8BesV(1jzwLcH znq9En7Q0Tn&-M=XBKs!$F$X<|c!#|X_tWYh)GZit(Q)Cp9CDE^WG;+fcyOWARoj*0TI>4EP1lX*cEoMO-Pk?Z z{kZ!p4@(b`M~lalr<3Oz&kJ6Nm#vN_+kA5 z{dW4@^Vjg_`q%qU1ULk&3Fr!>1V#i_2R;ij2@(Z$1jE4r!MlPVFVbHmT+|iPIq0wy5aS{>yK?9ZAjVh%SOwMWgFja zir&;wpi!{CU}&@N=Eg#~LQ&zpEzVmGY{hI9Z0+4-0x zS$$Xe-OToc?Y*V;rTcf_b_jRe-RZjXSeas3UfIyD;9afd%<`i0x4T#DzE)vdabOQ= zk7SRuGN`h>O0Q~1)u-yD>VX=Mn&!Rgd$;YK+Q-}1zu#?t(*cbG#Ronf6db&N$oEid ztwC+YVcg-Y!_VuY>bk#Ye_ww@?MU&F&qswvrN_dLb=5o6*Egs)ls3YRlE$&)amR1{ z;Ppd$6RYV^Go!iq1UMl%@#4q$AMc(FJlT1QeX8jv{h#)>&{~RGq1N2iiMFIRX?sk2 z-|2wUogK~{EkB$8eDsX=nVPf8XG_nK&J~=SIiGia@9y}|z3FhX{g&gc zj=lwb=lWgyFW&aLedUh-of`v-2Kw$UzI*>(+&$@i-u=-BsSjR1%z8NeX#HdC`Hh-Z(6xI-`hmHDqv!v)W&&nrf>M(RhcN6(D;jNN*% z^u_SYjF;2ng}*8Ow)d6MtDk;%`@Lsk$;9w$(d(H%O5UixIr`T2ZRcd@~4}Z*@T9eR;3AzE;Nd7#fTs^ zEi@p;1`0li=!2zD?1L?R^G&4&3Xwh(O7MqD`w%b>jcG`_c~Al=D)x`mXozc?xRT9e zGc!B?{k}<4+7IUM{+xU6Ip>au;}~3*o;=BY5QcfPR!hEJ*G280cW&7Fj-n{`t5soA z|EaaLzv6S}9PXEVyDY>TZ;y{((e~~=+$w|@`aXg%L`auU?=+c*CEtPP0ji4C)z#Ej zQ&ZmxAwDHCFXi{8Qqw!d;??%~`NP<@4VnG>4O%_{VgQvUF(9)Oj3xwpMM1;k$H?dN zr!HQ&P$jVQvQRF!<_m=$U(?`SyB4n7wxSgZP=f$6m4Zg?T&`P#Z9DJ?+@G02{q%Gs zPn=M*PoEy6?k^O}wngmwuGqaBW^b=z4h@ObnHjO}c|ui%a9u})Q6N&Olz3Jyi?w1= z(1K#Vr$<>b48)cdcXV_>p&g@2;#JFKcsqB(Ier|<@G$JzS(r74SXi(f3l(Pr&X40r zkBnfczaLAP3|=fOV7*$6ySln!#Ut_f@_8$yh1|0T=6ihzZ{CFc+pqAYpzQ?kex60c zPt#aAdKBLF?Z~nLq!sID+cqSFa0C=;3#nsZ`pue=AE0Ib=HyUNLmky5GcxrXY9eGDIc|@!5GOQU@&$PM*#{ z1j02pH}`)=%t{iN5S#22wqH*}N!JnM6fp;7Duj_X5;uAL7FZHUM&-OHw1TGV@Zt#8 z{rhO0Dx&SmAR^bpGBNWGyalDB6X`U|qkx?JSCT~REubVfb#>UdcMtm57_5N-`1uxC zO?kXHbO=p9+<`XtC-htn1}$ii{ae~fwx3HQbf2EVg9k{D-9hmF0G6~Afyu z-kyld^P(e1;I*`fMbh&5qer9E^ipt!$immZ9vr;bRw(ouQqo^!^Vh+rpHs_Eoy6s_ zAu;7cSTW7`m&wVIFK^uVoZ6QYAVOrY`o4n)n=6%yaLJ9u#YL>Fte~IHm1&xon3&*U i|1HktGJzyNw!Z<(Gv*&o7Db={0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipl7 z6cPu+ni_uq00BoyL_t(I%k7lEO2beThrb&|MAE_FkWGhBap=-fmu6_8;L@R^#3xX2 zb12<9**EFp&^Pb_ickVs;+8G31SIXv&2=dbYP7A6{lS65J)95DJ%3=UpX4|W0IgQb z_%p0ls{zn#HqXK^eA*aPtyUS2#{dk6!;8se@)iU^0_?90ab5SzTfg7G_I+RazOSd# z>1!EKltFvFp4(_NPL)z*S$6I?&XtrB0HxHdUa#9g_Bn62glBX*okyiqMQe@Lnlw#6 zf?Dg+>dJt7Ns<&od|$vOK(Z|3Ux89eQ5416Q?XO_hk2eK#c@0j!|)}JV{O~^;bO5s zDMe8f^U-MZ0OTuo8K?l}(m!su+xOjW_tG#7LkKbRJa4To1EfnsYaIz8ZlWj(JkPr` xP4nN@*|IF_b}$$`ueB+^=m0nYjP1Du;2jAJgl;WPqa^?U002ovPDHLkV1jF=y>I{k diff --git a/pixmaps/svg/.directory b/pixmaps/svg/.directory new file mode 100644 index 000000000..c99a6191a --- /dev/null +++ b/pixmaps/svg/.directory @@ -0,0 +1,4 @@ +[Dolphin] +PreviewsShown=true +Timestamp=2015,8,3,13,7,36 +Version=3 diff --git a/pixmaps/svg/linphone-micro-enabled.svg b/pixmaps/svg/linphone-micro-enabled.svg new file mode 100644 index 000000000..a23354bc1 --- /dev/null +++ b/pixmaps/svg/linphone-micro-enabled.svg @@ -0,0 +1,78 @@ + + + + + + image/svg+xml + + micro_default + + + + + + micro_default + Created with Sketch. + + + + + + diff --git a/pixmaps/svg/linphone-micro-muted.svg b/pixmaps/svg/linphone-micro-muted.svg new file mode 100644 index 000000000..09d505c59 --- /dev/null +++ b/pixmaps/svg/linphone-micro-muted.svg @@ -0,0 +1,90 @@ + + + + + + image/svg+xml + + micro_default + + + + + + micro_default + Created with Sketch. + + + + + + + + + + diff --git a/pixmaps/svg/linphone-speaker-enabled.svg b/pixmaps/svg/linphone-speaker-enabled.svg new file mode 100644 index 000000000..8a122795d --- /dev/null +++ b/pixmaps/svg/linphone-speaker-enabled.svg @@ -0,0 +1,87 @@ + + + + + + image/svg+xml + + speaker_default + + + + + + speaker_default + Created with Sketch. + + + + + + + + + + diff --git a/pixmaps/svg/linphone-speaker-muted.svg b/pixmaps/svg/linphone-speaker-muted.svg new file mode 100644 index 000000000..1e85b85be --- /dev/null +++ b/pixmaps/svg/linphone-speaker-muted.svg @@ -0,0 +1,76 @@ + + + + + + image/svg+xml + + speaker_default + + + + + + speaker_default + Created with Sketch. + + + + + From 8b3d28af547ed58a8613aebf6b9df22171332e60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Tue, 4 Aug 2015 16:08:25 +0200 Subject: [PATCH 031/134] Use PNG format for volume control icons on Windows --- gtk/main.c | 11 ----------- pixmaps/CMakeLists.txt | 12 ++++++++++-- pixmaps/Makefile.am | 15 ++++++++++++--- pixmaps/linphone-micro-enabled.png | Bin 0 -> 1714 bytes pixmaps/linphone-micro-muted.png | Bin 0 -> 1745 bytes pixmaps/linphone-speaker-enabled.png | Bin 0 -> 1294 bytes pixmaps/linphone-speaker-muted.png | Bin 0 -> 1976 bytes 7 files changed, 22 insertions(+), 16 deletions(-) create mode 100644 pixmaps/linphone-micro-enabled.png create mode 100644 pixmaps/linphone-micro-muted.png create mode 100644 pixmaps/linphone-speaker-enabled.png create mode 100644 pixmaps/linphone-speaker-muted.png diff --git a/gtk/main.c b/gtk/main.c index 5a03ac033..f9bc2722d 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -2124,17 +2124,6 @@ int main(int argc, char *argv[]){ /*for pulseaudio:*/ g_setenv("PULSE_PROP_media.role", "phone", TRUE); #endif - - /* Add the data directory of Linphone to XDG_DATA_DIRS to enable GTK+ to find - the Linphone specific icons */ - tmp = g_getenv("XDG_DATA_DIRS"); - if(tmp && strlen(tmp) > 0) { - char *xdg_data_dirs = g_strdup_printf("%s:%s", tmp, PACKAGE_DATA_DIR "/linphone"); - g_setenv("XDG_DATA_DIRS", xdg_data_dirs, TRUE); - g_free(xdg_data_dirs); - } else { - g_setenv("XDG_DATA_DIRS", PACKAGE_DATA_DIR "/linphone", FALSE); - } lang=linphone_gtk_get_lang(config_file); if (lang == NULL || lang[0]=='\0'){ diff --git a/pixmaps/CMakeLists.txt b/pixmaps/CMakeLists.txt index cae9128b7..595130e14 100644 --- a/pixmaps/CMakeLists.txt +++ b/pixmaps/CMakeLists.txt @@ -20,7 +20,7 @@ # ############################################################################ -set(ICONS_INSTALL_DIR ${PACKAGE_DATA_DIR}/linphone/icons/hicolor) +set(ICONS_INSTALL_DIR ${PACKAGE_DATA_DIR}/icons/hicolor) file(GLOB PIXMAPS "*.png" "linphone.icns") @@ -37,7 +37,15 @@ install(FILES svg/linphone-micro-muted.svg PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ ) +install(FILES linphone-micro-muted.png + linphone-speaker-muted.png + linphone-micro-enabled.png + linphone-speaker-enabled.png + DESTINATION ${ICONS_INSTALL_DIR}/48x48/status + PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ +) + install(FILES linphone.png - DESTINATION ${PACKAGE_DATA_DIR}/icons/hicolor/48x48/apps + DESTINATION ${ICONS_INSTALL_DIR}/48x48/apps PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ ) diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am index 708ce8587..5fc6a5a52 100644 --- a/pixmaps/Makefile.am +++ b/pixmaps/Makefile.am @@ -17,12 +17,21 @@ dist_pixmap_DATA= \ dialer.png \ notok.png -appicondir=$(datadir)/icons/hicolor/48x48/apps -dist_appicon_DATA= linphone.png +iconsdir=$(datadir)/icons/hicolor +appiconsdir=$(iconsdir)/48x48/apps +dist_appicons_DATA= linphone.png -statusiconsdir=$(datadir)/linphone/icons/hicolor/scalable/status +sacalable-status-iconsdir=$(iconsdir)/scalable/status dist_statusicons_DATA= \ svg/linphone-micro-muted.svg \ svg/linphone-speaker-muted.svg \ svg/linphone-micro-enabled.svg \ svg/linphone-speaker-enabled.svg + +status-iconsdir=$(iconsdir)/48x48/status +dist_status-icons_DATA= \ + svg/linphone-micro-muted.png \ + svg/linphone-speaker-muted.png \ + svg/linphone-micro-enabled.png \ + svg/linphone-speaker-enabled.png + \ No newline at end of file diff --git a/pixmaps/linphone-micro-enabled.png b/pixmaps/linphone-micro-enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..44ba551af7084db8c39cbea485bbc828142ef9a9 GIT binary patch literal 1714 zcmV;j22J^iP))U^fGB$&onkfsSV*br1CslDbhLGFsM3n`n#EENj|gY1t%2}&dqPJ4U%CoRjmljMl1ZY3!IR8^Nr9y7-Lad~<9*GG;Vc{QkhtssO9 z4Go1mJ3GH&S=M(+CIM7PzO1T8NxlXkMDlu)S;uj<#bUAI%*@Q0jRIiBx8BEXnti{3w8){{H@{+1c3(S6qeC>Ga1f%la9~s{uSw zE|(wA=kw>@4m6X=+(GjDBnON!j~ZjXGd@1n%!rc^4erJYyX*p*6!R}5eylqNtEpb5~px7ik?_Zn0`4FO~_nGbYybUc#D zWWIPgS1p}R-w=sJewfK*KG!Hjqk~D1{ECQ-rqk)jWm5-{VG+4cL~c)|Qtd$kw5)nw zmO|3;KejeEaTA~k&;ut;*+uGXJVlKshnouaD zbqR)=`7AFkE}FmqNM2A?mt>dgx|`}=tpF$k*i@}n8zM-j(NT}`*L7b5@H&8A5gBSkmgjk0s=5P!NAg51t&&J2TKse* zRJC~G#EEi{dteU0agyDR!>V zMVjl6*1HJ#gT_fq7Lu3_w&hyKC33Za+XT8DpLS@H)xSNF;K9GMU`;PI7kd z-u(%ZUj+~b@Z8+o+zWNDvjDCEaJ*8fOg9S9XhuL|v6x44FUjj#T3SvPi^XX_wK5Zl zL?R?dNZ#x?PFFMg&Z{8y!qat!2$I0POcX@6oZb zvA@?;c<0WYUl5Up0NBQuALVkn=hku#tU1EkvuDrUmSsH*V5_P=S*cVW&*$_1uE|TK zQhlwhtsn9&%@&f&08WX>^!)t%%Y{OrTATTfj*h!YeiOhp08f_7<$d{letu0Z_$5S5 zwr$&A1F#Q3x2pcd81vJGg@uE)!PUtYe>Uq6C60`YYz9ufI6fGw)}8&&;wE|)vG z<{08qj{JB$9_sDw{gQ}0NOBOstg8OO^SnQmN~NPyQ&aP+)gYNnwuVBXm~Gp80epsJ z3P4p=f91OFV-ph-$1f=eT2BC#&1P=_a4&#cNNxgf&fkbf0n7nd0${6ZuZUa+;DZ3R z1F!)cQ`KL1p0|H|eEgCxI)b?1*eW8olKeD)B*`w{IGDOssGT>DVeP6BwbTrU6f@ZrOA>m7LD0IOs&lgT_F zB98&cm&@hRd_I2x0bjAg*Tulydf)Y~)V^DmRlOX8Z-$gjfDO0@SQkV5x3XHTvhLl+ z{I5hZne1+DZM~Ibj~|96N#3TaMF784)iTKyW6V^YGq-U7vf1osN&dVpFegdNcg5X0 zxBTgqm6Zo3Cnpy+lnSZpzeqj>ptr7W_0L=Y<{9 literal 0 HcmV?d00001 diff --git a/pixmaps/linphone-micro-muted.png b/pixmaps/linphone-micro-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..cf666ebd0299b35902c8d94bf579df82b50e13f1 GIT binary patch literal 1745 zcmV;?1}^!DP)7_h-#I)m zTWuHH_11S&dtUC|IrH)V&zy7S%(*Kxp`=o&E@RB+MP#Ef=8~$O48!mxK;xcE;v6iO z%k`@20pL!+)QP8nA9Qwh9vm7Pnq6@Oa=F|Cs`^+B@P7jTcJH?Wt*-tVRoz`Gl`gIr z0-opX1AYu3BEur`9pCp~s>%z6!rDru@-5(D;2PkMmoHyVPfku=`Opbuv)Sz;avVqk zkB4D+|3bR%dEOm>545Z5qoq>mq2Jhjv$JLM;y6ntli6g9DFfSq3nJnLLGah6dZ8wO{{(O$kx0BR_!UE7KJdk2 z@o!h<9Ec(C+x$VnuLJ_?lgXs-z`rRXg+{>RPS6jtc)p>Kr(BjAN}O@e8{94^z}(#2g+w9& zux8JmJ*_h{GwYqJ{5WtP$d*c_7w0)wHmE8ha=z}s+$bWo^To3R#+cI%bZa`D-d?kk zr+~KsGd(@Mw;p^LhA+;mAF6k{=kYqx4p;wbtOSb1;xzDQfMhbcyIMasHujE){K2j2 z6At_v#+b}P;IrB6J-{}gVvPA+?Im7BdfkHg&G16Mb*ppV;NW0wzb9%8{E{&yTbq@e zCkb}Qy&m#?|Bb3_c6N5JyCa_tf}kn)fnNi&z>e|p@x9JfZdKKv*0fn`t^H78UDJ0& zWL#CN$=#j6CMSCtD1>47ubQ3tk%;UE&bPF*+&nxye5ol1nK9-O=Tf&io9G74scI$+ z!vWwv;1qC;s^)+_z*ijjimD!LYirwC3*Pg*uQ~7l4>tn7;T>=j4ggP9J)f%XER{;n zRpo<&gJyhuyvG=Go3-}c4;;W)7=|--LEc_fJq)x1N8KXOGy?to{Wn!Am9mK3R8##z zB9Rzqt%AJbzY1zNe~>0&CrgdL)XXAC}AI zT4oW41(Z!V*FaUAc1T)`$-WQ zb-MbBwKhFEI(n)BZ}kn}u!#IA2!h+2b?-0>c^eTKap2FWYJVf(uV$H-Koms-z!uk*4iiIRH6R@LrST!l;n!500000NkvXXu0mjf-q~JO literal 0 HcmV?d00001 diff --git a/pixmaps/linphone-speaker-enabled.png b/pixmaps/linphone-speaker-enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..0c8d7a9513ae0e4da6a0008cfcff5fe425178127 GIT binary patch literal 1294 zcmV+p1@ZccP)wfTIBJ`D^)!ZZGw{T9tx-8o-1ae7U6307wY&Du8|fw@4e8a{{A+ zo3+6(jKcsPRm|T2I0WFmNUwkpVzpry6Ke28H0b+&oSDx?nnIRkJq}9u=#ry*^KjApe zkCn_4B~z%gv-9pkp^z&Ie#kVqY)mYFXCXaLX>i^ci@Y`O*j5q)Rdw)0;$DDilFsjll? zK@c4GJntd^WV6|`$z*af5uK1RZ?r5cY1_7|A!1^hrbk2{8;0?vN)^|2Z2)g8d+^Pw zmD7u13o|d1^kpm#*s4{-A$oG>nULHvRnxCq|<4QhIAtdZ(u5Cq4HR$zm&0;eJe zfSGqF>gx-qF#x1esTO8VEii30SwCje#dbRs?-X@@PN{;4tkz&vFRO~XIm@zInYmA;Rwk1< zbG>qUm;5cJt+X{w+aizoN=Y65zDXZ&9A~exskKWba@GohU?P!7G*>Em+qS`tfCVO7eG5;Mja5w#N0gt96-bGh8-@p!x;@&M%0{%RP; zdS>od_C>d07~?{S)sY7v)7}-Cw|fCBH2C)c_&SwJ^+X8!y}eu z?W_p^5=2JV^@jm`ztH(H^FATOCv9zQvB(3Ez3Z7mp|B2sno_sc)z#$yG({eOEQ_ao z-+zjk52`&Z5gn)r007{5p6|NuEAs074{5%sW&kMX#Q-x40Ox9A58UX`3&U_NfYVBQ zSn@YBy_&UtKA)d%YHIpO)3iDO=b3p=KA)e&|5C&9Cr0Gc;U5Q&egFUf07*qoM6N<$ Ef<7)!_y7O^ literal 0 HcmV?d00001 diff --git a/pixmaps/linphone-speaker-muted.png b/pixmaps/linphone-speaker-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..91e96eddb08dd036e31714fbd9d9198a1c8a7cdc GIT binary patch literal 1976 zcmV;p2S@mcP)NQJ7eN~HrB3PYqqzyuj%aURKvr=Cuyz$BoYZL5{cZ; z%*&Kg_Y{l8f7H6Sx3{--baZqNGiL#m0W7oT5_~$Hz6`)_W=;WsVHjrsY^-H(JRYA{ zE|&)Y+!&IghGASfX9C!^{Yd~X0qCgEi0Fg0?Ct64iH(hoNDIWg*FD=DVbn&jWzbWb94 z`+kC%|6T+5Yl!HG2L3F7tPtWr_1cCD;5g1L0A2;q8Ilwc-RHXQ?VjhIoo;_7lewOV zJOGPA(&-SqH`)3|3P6tIY+>fT0Op0XQ$*D3y6)CmeBW`LxKb()AQqDTWf(?E2r)R- zo`%Fgc)&cz%%9iDe`My>LWn=tXt@kC?*q^pl1?zQT__ZeU1;B|Es#p3K2|Q5OI6_a zMD&UFejUWh;Qp#h~?KNiU?>8ET@fv_nX(@7REEfA*E|)u9BaijW zyc@tJA!#@Wg6_kI5C5r_{g!Rp^O^ZUB3fLR!xIrR_W+27q%iSWWU@%z1D7@2%N|917FY&QD= z-}j$l<_{Z&v8hlf{8e|M56vp|5FI6=t{H&W$15!@Ey+Tm@b+YrzVEMM<_!Q=DW&$u zGU&1^yP5jde?P#Hmfd5r_+xU(bqKEThVB=V_;z5J*@<}+%(NqK@c49JnvoY zbasg7U`6RfWV@~_n_bKS0Q&m+4BNJ!tO5@rD(T<>AQFjqM6}bgtY7J_BBgWzd|$KN z_vWG+MIw=~1_uXs0{F@#)2iA^%)BssUJ;E(f2dEIrui6vQ{n4%$z*b=(PZ!~rfKd4 zuujvud!gh8;BHN@yOPP|(#m8$pZ_<2{hC0%O%q_{%9YVbB(j%?dNs3e4}#$F3+)Rl z&Rvx}VVdTxRY9NEUaxJ60P%QyUTbUXp|JU`X#TrW%FRSnOGERL_Iyp%+=%wv-tdMd zolajyM2GZ4DlDhB){&l1D)ry+m|r!0N_(E)Pzz+U*@dBxcWFNT^?JYqKoA6-+UuKD z!Y$Mk^H#$INTpI&OiWB10dQ?4!!YwEA;c5)rd%T0sQLVn^U{`5%eA>TtOkK!685iG zR!)Ba8>Ey!ua{S;RO-`|@JRmKtWZj2DxNkmF>%P4CHU&*yG%r@X9_+PU{CnDLkO{5cP*vVwo2&@V2|f{Cuc0c zB+d63BFeh1dvG>Nky5UYL?ZL0lwZ{Q=)u9kM*!FrE1RbI?fAQpw z4{JefoSr4~2!Lmk$>j28p?6*Pmqhdh0N*%w?%a8FvTb`afM>Pz^}6r-pDq@Qf0I%U5m6Tr9jzD&z?M>}^ov9y zvEZT$;5g2A0BqAV|2xAl(w^tNshRelmSug0nRjSGp0zCNRok|&zGwp2w*4qGKd6z0 zeBYn+<{+2LjfHu8V^~H2z*PWV$z(FUb1eX+)9EJwY|+mb!!R8ESf8R9c^bgY0Nx2n zmnx<9IgYcXSpt~Vm7rx=PZH54jhv50qpNed+hJFl zX2aa`JYPz=IlOwWSn-l(1hEeOneOiHJL|kIoUX#$6~@GgW@VuV0Q`lS9}+@rY{n@n zr5sX9T?gPbtvx(DTfP_Lw-POuWjzAm<4UP-6^q4T{C~WU$A186t`#WAKLTR_0000< KMNUMnLSTZE;?ZmX literal 0 HcmV?d00001 From 1d2f402b4d762c504ea6734de0a16b29ca5b2df4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Tue, 4 Aug 2015 16:33:48 +0200 Subject: [PATCH 032/134] Fix looking up of icons by name --- gtk/main.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gtk/main.c b/gtk/main.c index f9bc2722d..18d01d95b 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -2124,6 +2124,18 @@ int main(int argc, char *argv[]){ /*for pulseaudio:*/ g_setenv("PULSE_PROP_media.role", "phone", TRUE); #endif + + /* Add the data directory of the install prefix to XDG_DATA_DIRS + * This environment variable is used by GTK+ to locate the directory + * which stores icon images. */ + tmp = g_getenv("XDG_DATA_DIRS"); + if(tmp && strlen(tmp) > 0) { + char *xdg_data_dirs = g_strdup_printf("%s:%s", PACKAGE_DATA_DIR, tmp); + g_setenv("XDG_DATA_DIRS", xdg_data_dirs, TRUE); + g_free(xdg_data_dirs); + } else { + g_setenv("XDG_DATA_DIRS", PACKAGE_DATA_DIR, FALSE); + } lang=linphone_gtk_get_lang(config_file); if (lang == NULL || lang[0]=='\0'){ From ec9f63279e776aee14ce108077206c6edd4759e4 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Tue, 4 Aug 2015 20:24:33 +0200 Subject: [PATCH 033/134] improve tests --- tester/call_tester.c | 81 ++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 41 deletions(-) diff --git a/tester/call_tester.c b/tester/call_tester.c index 491eeb4c1..5c89e59e7 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -287,7 +287,7 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr BC_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&callee_mgr->stat.number_of_LinphoneCallConnected,initial_callee.number_of_LinphoneCallConnected+1)); BC_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&caller_mgr->stat.number_of_LinphoneCallConnected,initial_callee.number_of_LinphoneCallConnected+1)); - /*just to sleep*/ + result = wait_for(callee_mgr->lc,caller_mgr->lc,&caller_mgr->stat.number_of_LinphoneCallStreamsRunning,initial_caller.number_of_LinphoneCallStreamsRunning+1) && wait_for(callee_mgr->lc,caller_mgr->lc,&callee_mgr->stat.number_of_LinphoneCallStreamsRunning,initial_callee.number_of_LinphoneCallStreamsRunning+1); @@ -743,7 +743,7 @@ static void simple_call_compatibility_mode(void) { BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallConnected,1)); BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallStreamsRunning,1)); BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallStreamsRunning,1)); - /*just to sleep*/ + wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallStreamsRunning,3); linphone_core_terminate_all_calls(lc_pauline); BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallEnd,1)); @@ -938,7 +938,7 @@ static void call_terminated_by_caller(void) { LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); BC_ASSERT_TRUE(call(pauline,marie)); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -954,7 +954,7 @@ static void call_with_no_sdp(void) { linphone_core_enable_sdp_200_ack(marie->lc,TRUE); BC_ASSERT_TRUE(call(marie,pauline)); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -1185,7 +1185,6 @@ static void call_with_custom_headers(void) { ms_free(marie_remote_contact_header); - /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -1230,7 +1229,6 @@ void call_paused_resumed_base(bool_t multicast) { stats = rtp_session_get_stats(call_pauline->sessions->rtp_session); BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); - /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -1345,7 +1343,7 @@ void concurrent_paused_resumed_base() { stats = rtp_session_get_stats(call_pauline->sessions->rtp_session); BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -1384,7 +1382,6 @@ static void call_paused_resumed_from_callee(void) { stats = rtp_session_get_stats(call_marie->sessions->rtp_session); BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); - /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -1553,7 +1550,7 @@ static void call_with_video_added(void) { if (!call_ok) goto end; BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -1580,7 +1577,7 @@ static void call_with_video_added_2(void) { if (!call_ok) goto end; BC_ASSERT_TRUE(add_video(marie,pauline, TRUE)); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -1603,7 +1600,7 @@ static void call_with_video_added_random_ports(void) { if (!call_ok) goto end; BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -1627,7 +1624,7 @@ static void call_with_several_video_switches(void) { BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); wait_for_until(pauline->lc,marie->lc,&dummy,1,1000); /* Wait for VFU request exchanges to be finished. */ BC_ASSERT_TRUE(remove_video(pauline,marie)); - /*just to sleep*/ + /**/ linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -1655,7 +1652,7 @@ static void srtp_call_with_several_video_switches(void) { BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); wait_for_until(pauline->lc,marie->lc,&dummy,1,1000); /* Wait for VFU request exchanges to be finished. */ BC_ASSERT_TRUE(remove_video(pauline,marie)); - /*just to sleep*/ + /**/ linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2020,7 +2017,7 @@ static void video_call_limited_bandwidth(void) { linphone_core_set_download_bandwidth(pauline->lc, 100); video_call_base(marie,pauline,FALSE,LinphoneMediaEncryptionNone,TRUE,TRUE); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2054,7 +2051,7 @@ static void _call_with_media_relay(bool_t random_ports) { BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); liblinphone_tester_check_rtcp(pauline,marie); #endif - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2098,7 +2095,7 @@ static void call_with_privacy(void) { BC_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId, int, "%d"); } - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2121,7 +2118,7 @@ static void call_with_privacy(void) { BC_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId, int, "%d"); } - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,2)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,2)); @@ -2163,7 +2160,7 @@ static void call_with_privacy2(void) { BC_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId, int, "%d"); } - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2532,7 +2529,7 @@ void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video #endif - /*just to sleep*/ + linphone_core_terminate_all_calls(marie->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2586,7 +2583,7 @@ static void early_media_call(void) { /*added because a bug related to early-media caused the Connected state to be reached two times*/ BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallConnected,1, int, "%d"); - /*just to sleep*/ + linphone_core_terminate_all_calls(marie->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2765,7 +2762,7 @@ static void call_established_with_rejected_info(void) { check_call_state(pauline,LinphoneCallStreamsRunning); check_call_state(marie,LinphoneCallStreamsRunning); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2846,7 +2843,7 @@ static void call_established_with_complex_rejected_operation(void) { BC_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(pauline->lc)),LinphoneReasonTemporarilyUnavailable, int, "%d"); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2898,7 +2895,7 @@ static void call_established_with_rejected_info_during_reinvite(void) { BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2933,7 +2930,7 @@ static void call_established_with_rejected_reinvite(void) { check_call_state(pauline,LinphoneCallStreamsRunning); check_call_state(marie,LinphoneCallStreamsRunning); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2972,7 +2969,7 @@ static void call_established_with_rejected_incoming_reinvite(void) { check_call_state(pauline,LinphoneCallStreamsRunning); check_call_state(marie,LinphoneCallStreamsRunning); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -3074,7 +3071,7 @@ static void call_established_with_rejected_reinvite_with_error_base(bool_t trans if (!trans_pending) sal_enable_unconditional_answer(marie->lc->sal,FALSE); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -3678,7 +3675,7 @@ static void call_log_from_taken_from_p_asserted_id(void) { BC_ASSERT_TRUE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),paulie_asserted_id_addr)); - /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -4209,7 +4206,7 @@ static void simple_stereo_call(const char *codec_name, int clock_rate, int bitra PayloadType *pt; char *stereo_file = bc_tester_res("sounds/vrroom.wav"); char *recordpath = bc_tester_file("stereo-record.wav"); - int dummy=0; + bool_t audio_cmp_failed = FALSE; belle_sip_object_enable_leak_detector(TRUE); begin=belle_sip_object_get_object_count(); @@ -4242,7 +4239,7 @@ static void simple_stereo_call(const char *codec_name, int clock_rate, int bitra lp_config_set_string(pauline->lc->config,"sound","features","NONE"); if (!BC_ASSERT_TRUE(call(pauline,marie))) goto end; - wait_for_until(marie->lc, pauline->lc, &dummy, 1,6000); + wait_for_until(marie->lc, pauline->lc, NULL, 0, 6000); end_call(pauline, marie); @@ -4255,20 +4252,22 @@ static void simple_stereo_call(const char *codec_name, int clock_rate, int bitra double max_threshold = 1.f; if (!stereo){ /*when opus doesn't transmit stereo, the cross correlation is around 0.54 : as expected, it is not as good as in full stereo mode*/ - min_threshold = .5f; + min_threshold = .4f; max_threshold = .6f; } BC_ASSERT_EQUAL(ms_audio_diff(recordpath, stereo_file,&similar,audio_cmp_max_shift,completion_cb,NULL), 0, int, "%d"); - BC_ASSERT_GREATER(similar, min_threshold, float, "%f"); - BC_ASSERT_LOWER(similar, max_threshold, float, "%f"); + BC_ASSERT_GREATER(similar, min_threshold, double, "%g"); + BC_ASSERT_LOWER(similar, max_threshold, double, "%g"); + if (similarmax_threshold){ + audio_cmp_failed = TRUE; + } #endif } - + if (!audio_cmp_failed) unlink(recordpath); end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); ms_free(stereo_file); - unlink(recordpath); ms_free(recordpath); leaked_objects=belle_sip_object_get_object_count()-begin; @@ -4291,18 +4290,21 @@ static void simple_mono_call_opus(void){ simple_stereo_call("opus", 48000, 150, FALSE); } +/* because SIP ALG (like in android phones) crash when seing a domain name in SDP, we prefer using SIP/TLS for both participants*/ static void call_with_fqdn_in_sdp(void) { - LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); + bool_t tls_supported = transport_supported(LinphoneTransportTls); + LinphoneCoreManager* marie = linphone_core_manager_new(tls_supported ? "marie_sips_rc" : "marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new(tls_supported ? "pauline_rc" : "pauline_tcp_rc"); LpConfig *lp; bool_t call_ok; + lp = linphone_core_get_config(marie->lc); lp_config_set_string(lp,"rtp","bind_address","localhost"); lp = linphone_core_get_config(pauline->lc); lp_config_set_string(lp,"rtp","bind_address","localhost"); - BC_ASSERT_TRUE(call_ok=call(pauline,marie)); + BC_ASSERT_TRUE(call_ok=call(marie,pauline)); if (!call_ok) goto end; liblinphone_tester_check_rtcp(pauline,marie); @@ -4310,10 +4312,7 @@ static void call_with_fqdn_in_sdp(void) { BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); liblinphone_tester_check_rtcp(pauline,marie); #endif - /*just to sleep*/ - linphone_core_terminate_all_calls(pauline->lc); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + end_call(pauline, marie); end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); From a235dd6815db3f13e6c530fc970bdb07d5b62dbb Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Tue, 4 Aug 2015 20:29:32 +0200 Subject: [PATCH 034/134] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index c946c7c51..421c63453 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit c946c7c5181e2b0325e45474ca597d0b25425d2d +Subproject commit 421c6345321bc7339096fd52584753a5cd5a822b From 4b5a7bb402fc75e3b94a82b2b0c8a3cdf6445b35 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Tue, 4 Aug 2015 21:00:57 +0200 Subject: [PATCH 035/134] fix again --- pixmaps/Makefile.am | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am index 5fc6a5a52..903395a66 100644 --- a/pixmaps/Makefile.am +++ b/pixmaps/Makefile.am @@ -21,17 +21,13 @@ iconsdir=$(datadir)/icons/hicolor appiconsdir=$(iconsdir)/48x48/apps dist_appicons_DATA= linphone.png -sacalable-status-iconsdir=$(iconsdir)/scalable/status +statusiconsdir=$(iconsdir)/48x48/status dist_statusicons_DATA= \ svg/linphone-micro-muted.svg \ svg/linphone-speaker-muted.svg \ svg/linphone-micro-enabled.svg \ svg/linphone-speaker-enabled.svg -status-iconsdir=$(iconsdir)/48x48/status -dist_status-icons_DATA= \ - svg/linphone-micro-muted.png \ - svg/linphone-speaker-muted.png \ - svg/linphone-micro-enabled.png \ - svg/linphone-speaker-enabled.png + + \ No newline at end of file From cc382640fdcc566529b5d003c0ce4620d95a3d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Wed, 5 Aug 2015 09:36:09 +0200 Subject: [PATCH 036/134] Fix icons installation with the autotools + SVG images was installed in the 48x48 subdirectory + PNG images was not installed --- pixmaps/Makefile.am | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am index 903395a66..9b690cbfc 100644 --- a/pixmaps/Makefile.am +++ b/pixmaps/Makefile.am @@ -21,13 +21,17 @@ iconsdir=$(datadir)/icons/hicolor appiconsdir=$(iconsdir)/48x48/apps dist_appicons_DATA= linphone.png -statusiconsdir=$(iconsdir)/48x48/status -dist_statusicons_DATA= \ +status48iconsdir=$(iconsdir)/48x48/status +dist_status48icons_DATA= \ + linphone-micro-muted.png \ + linphone-speaker-muted.png \ + linphone-micro-enabled.png \ + linphone-speaker-enabled.png + +statussvgiconsdir=$(iconsdir)/scalable/status +dist_statussvgicons_DATA= \ svg/linphone-micro-muted.svg \ svg/linphone-speaker-muted.svg \ svg/linphone-micro-enabled.svg \ svg/linphone-speaker-enabled.svg - - - \ No newline at end of file From 4ade5326e191dc39103059bbb48160fdda0b5def Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 5 Aug 2015 11:12:06 +0200 Subject: [PATCH 037/134] tester: replace some BC_ASSERT_TRUE with better BC_ASSERT_LOWER/GREATER/EQUAL ones --- tester/call_tester.c | 88 ++++++++++++++--------------- tester/eventapi_tester.c | 6 +- tester/log_collection_tester.c | 6 +- tester/message_tester.c | 8 +-- tester/multi_call_tester.c | 2 +- tester/offeranswer_tester.c | 10 ++-- tester/presence_tester.c | 8 +-- tester/register_tester.c | 6 +- tester/remote_provisioning_tester.c | 8 +-- tester/setup_tester.c | 4 +- tester/tester.c | 2 +- tester/upnp_tester.c | 9 ++- tester/video_tester.c | 20 +++---- 13 files changed, 90 insertions(+), 87 deletions(-) diff --git a/tester/call_tester.c b/tester/call_tester.c index 5c89e59e7..4866dda26 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -181,13 +181,13 @@ void liblinphone_tester_check_rtcp(LinphoneCoreManager* caller, LinphoneCoreMana } wait_for_until(caller->lc,callee->lc,NULL,0,20); /*just to sleep while iterating*/ }while (!liblinphone_tester_clock_elapsed(&ts,15000)); - BC_ASSERT_TRUE(linphone_call_get_audio_stats(c1)->round_trip_delay>0.0); - BC_ASSERT_TRUE(linphone_call_get_audio_stats(c2)->round_trip_delay>0.0); + BC_ASSERT_GREATER(linphone_call_get_audio_stats(c1)->round_trip_delay,0.0,float,"%f"); + BC_ASSERT_GREATER(linphone_call_get_audio_stats(c2)->round_trip_delay,0.0,float,"%f"); if (linphone_call_log_video_enabled(linphone_call_get_call_log(c1))) { - BC_ASSERT_TRUE(linphone_call_get_video_stats(c1)->round_trip_delay>0.0); + BC_ASSERT_GREATER(linphone_call_get_video_stats(c1)->round_trip_delay,0.0,float,"%f"); } if (linphone_call_log_video_enabled(linphone_call_get_call_log(c2))) { - BC_ASSERT_TRUE(linphone_call_get_video_stats(c2)->round_trip_delay>0.0); + BC_ASSERT_GREATER(linphone_call_get_video_stats(c2)->round_trip_delay,0.0,float,"%f"); } linphone_call_unref(c1); linphone_call_unref(c2); @@ -287,7 +287,7 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr BC_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&callee_mgr->stat.number_of_LinphoneCallConnected,initial_callee.number_of_LinphoneCallConnected+1)); BC_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&caller_mgr->stat.number_of_LinphoneCallConnected,initial_callee.number_of_LinphoneCallConnected+1)); - + result = wait_for(callee_mgr->lc,caller_mgr->lc,&caller_mgr->stat.number_of_LinphoneCallStreamsRunning,initial_caller.number_of_LinphoneCallStreamsRunning+1) && wait_for(callee_mgr->lc,caller_mgr->lc,&callee_mgr->stat.number_of_LinphoneCallStreamsRunning,initial_callee.number_of_LinphoneCallStreamsRunning+1); @@ -654,7 +654,7 @@ static void call_with_specified_codec_bitrate(void) { #endif /*Force marie to play from file: if soundcard is used and it is silient, then vbr mode will drop down the bitrate Note that a play file is already set by linphone_core_manager_new() (but not used)*/ - linphone_core_set_use_files(marie->lc, TRUE); + linphone_core_set_use_files(marie->lc, TRUE); if (linphone_core_find_payload_type(marie->lc,codec,rate,-1)==NULL){ BC_PASS("opus codec not supported, test skipped."); @@ -743,7 +743,7 @@ static void simple_call_compatibility_mode(void) { BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallConnected,1)); BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallStreamsRunning,1)); BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallStreamsRunning,1)); - + wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallStreamsRunning,3); linphone_core_terminate_all_calls(lc_pauline); BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallEnd,1)); @@ -938,7 +938,7 @@ static void call_terminated_by_caller(void) { LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); BC_ASSERT_TRUE(call(pauline,marie)); - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -954,7 +954,7 @@ static void call_with_no_sdp(void) { linphone_core_enable_sdp_200_ack(marie->lc,TRUE); BC_ASSERT_TRUE(call(marie,pauline)); - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -1246,8 +1246,8 @@ static void call_paused_resumed(void) { BC_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &pauline->stat.number_of_rtcp_sent, rtcp_count_current+1, 10000)); \ stats = rtp_session_get_stats(call_pauline->audiostream->ms.sessions.rtp_session); \ loss_percentage = stats->cum_packet_loss * 100.f / (stats->packet_recv + stats->cum_packet_loss); \ - BC_ASSERT_TRUE(.75 * params.loss_rate < loss_percentage); \ - BC_ASSERT_TRUE(loss_percentage < 1.25 * params.loss_rate) + BC_ASSERT_LOWER(.75 * params.loss_rate , loss_percentage, float, "%f"); \ + BC_ASSERT_LOWER(loss_percentage , 1.25 * params.loss_rate, float, "%f") static void call_paused_resumed_with_loss(void) { LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); @@ -1343,7 +1343,7 @@ void concurrent_paused_resumed_base() { stats = rtp_session_get_stats(call_pauline->sessions->rtp_session); BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -1991,8 +1991,8 @@ static void video_call_with_early_media_no_matching_audio_codecs(void) { /*audio stream shall not have been requested to start*/ BC_ASSERT_PTR_NULL(pauline_call->audiostream->soundread); - BC_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(out_call))==TRUE); - BC_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(pauline_call))==TRUE); + BC_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(out_call))); + BC_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(pauline_call))); linphone_core_accept_call(pauline->lc, pauline_call); @@ -2017,7 +2017,7 @@ static void video_call_limited_bandwidth(void) { linphone_core_set_download_bandwidth(pauline->lc, 100); video_call_base(marie,pauline,FALSE,LinphoneMediaEncryptionNone,TRUE,TRUE); - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2051,7 +2051,7 @@ static void _call_with_media_relay(bool_t random_ports) { BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); liblinphone_tester_check_rtcp(pauline,marie); #endif - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2095,7 +2095,7 @@ static void call_with_privacy(void) { BC_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId, int, "%d"); } - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2118,7 +2118,7 @@ static void call_with_privacy(void) { BC_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId, int, "%d"); } - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,2)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,2)); @@ -2160,7 +2160,7 @@ static void call_with_privacy2(void) { BC_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId, int, "%d"); } - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2285,9 +2285,9 @@ static void call_srtp_paused_and_resumed(void) { /*assert that after pause and resume, SRTP is still being used*/ params = linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)); - BC_ASSERT_TRUE(linphone_call_params_get_media_encryption(params) == LinphoneMediaEncryptionSRTP); + BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(params) , LinphoneMediaEncryptionSRTP, int, "%d"); params = linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)); - BC_ASSERT_TRUE(linphone_call_params_get_media_encryption(params) == LinphoneMediaEncryptionSRTP); + BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(params) , LinphoneMediaEncryptionSRTP, int, "%d"); linphone_core_terminate_all_calls(marie->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); @@ -2334,8 +2334,8 @@ static void call_with_file_player(void) { player=linphone_call_get_player(linphone_core_get_current_call(marie->lc)); BC_ASSERT_PTR_NOT_NULL(player); if (player){ - BC_ASSERT_TRUE(linphone_player_open(player,hellopath,on_eof,marie)==0); - BC_ASSERT_TRUE(linphone_player_start(player)==0); + BC_ASSERT_EQUAL(linphone_player_open(player,hellopath,on_eof,marie),0, int, "%d"); + BC_ASSERT_EQUAL(linphone_player_start(player),0, int, "%d"); } /* This assert should be modified to be at least as long as the WAV file */ BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,10000)); @@ -2418,7 +2418,7 @@ static void call_with_mkv_file_player(void) { goto end; } BC_ASSERT_EQUAL(res, 0, int, "%d"); - BC_ASSERT_TRUE(linphone_player_start(player)==0); + BC_ASSERT_EQUAL(linphone_player_start(player),0,int,"%d"); BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,12000)); linphone_player_close(player); /*wait for one second more so that last RTP packets can arrive*/ @@ -2426,9 +2426,9 @@ static void call_with_mkv_file_player(void) { } end_call(marie, pauline); #ifdef DO_AUDIO_CMP - BC_ASSERT_TRUE(ms_audio_diff(hellowav,recordpath,&similar,audio_cmp_max_shift,NULL,NULL)==0); - BC_ASSERT_TRUE(similar>threshold); - BC_ASSERT_TRUE(similar<=1.0); + BC_ASSERT_EQUAL(ms_audio_diff(hellowav,recordpath,&similar,audio_cmp_max_shift,NULL,NULL),0,int,"%d"); + BC_ASSERT_GREATER(similar,threshold,double,"%f"); + BC_ASSERT_LOWER(similar,1.0,double,"%f"); if(similar>threshold && similar<=1.0) { remove(recordpath); } @@ -2529,7 +2529,7 @@ void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video #endif - + linphone_core_terminate_all_calls(marie->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2583,7 +2583,7 @@ static void early_media_call(void) { /*added because a bug related to early-media caused the Connected state to be reached two times*/ BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallConnected,1, int, "%d"); - + linphone_core_terminate_all_calls(marie->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2762,7 +2762,7 @@ static void call_established_with_rejected_info(void) { check_call_state(pauline,LinphoneCallStreamsRunning); check_call_state(marie,LinphoneCallStreamsRunning); - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2843,7 +2843,7 @@ static void call_established_with_complex_rejected_operation(void) { BC_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(pauline->lc)),LinphoneReasonTemporarilyUnavailable, int, "%d"); - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2895,7 +2895,7 @@ static void call_established_with_rejected_info_during_reinvite(void) { BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2930,7 +2930,7 @@ static void call_established_with_rejected_reinvite(void) { check_call_state(pauline,LinphoneCallStreamsRunning); check_call_state(marie,LinphoneCallStreamsRunning); - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2969,7 +2969,7 @@ static void call_established_with_rejected_incoming_reinvite(void) { check_call_state(pauline,LinphoneCallStreamsRunning); check_call_state(marie,LinphoneCallStreamsRunning); - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -3071,7 +3071,7 @@ static void call_established_with_rejected_reinvite_with_error_base(bool_t trans if (!trans_pending) sal_enable_unconditional_answer(marie->lc->sal,FALSE); - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -3628,7 +3628,7 @@ static void call_with_custom_supported_tags(void) { recv_supported=linphone_call_params_get_custom_header(remote_params,"supported"); BC_ASSERT_PTR_NOT_NULL(recv_supported); if (recv_supported){ - BC_ASSERT_TRUE(strstr(recv_supported,"pouet-tag")!=NULL); + BC_ASSERT_PTR_NOT_NULL(strstr(recv_supported,"pouet-tag")); } end_call(marie,pauline); end: @@ -3675,7 +3675,7 @@ static void call_log_from_taken_from_p_asserted_id(void) { BC_ASSERT_TRUE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),paulie_asserted_id_addr)); - + linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -3991,7 +3991,7 @@ static void call_with_generic_cn(void) { err=stat(recorded_file,&stbuf); BC_ASSERT_EQUAL(err, 0, int, "%d"); if (err==0){ - BC_ASSERT_TRUE(stbuf.st_size>120000); + BC_ASSERT_GREATER(stbuf.st_size,120000,int, "%d"); } } @@ -4146,9 +4146,9 @@ static void video_call_with_re_invite_inactive_followed_by_re_invite_base(Linpho /*assert that after pause and resume, SRTP is still being used*/ current_params = linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)); - BC_ASSERT_TRUE(linphone_call_params_get_media_encryption(current_params) == mode); + BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(current_params) , mode, int, "%d"); current_params = linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)); - BC_ASSERT_TRUE(linphone_call_params_get_media_encryption(current_params) == mode); + BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(current_params) , mode, int, "%d"); } end_call(marie,pauline); @@ -4297,7 +4297,7 @@ static void call_with_fqdn_in_sdp(void) { LinphoneCoreManager* pauline = linphone_core_manager_new(tls_supported ? "pauline_rc" : "pauline_tcp_rc"); LpConfig *lp; bool_t call_ok; - + lp = linphone_core_get_config(marie->lc); lp_config_set_string(lp,"rtp","bind_address","localhost"); lp = linphone_core_get_config(pauline->lc); @@ -4336,7 +4336,7 @@ static void call_with_rtp_io_mode(void) { unlink(recordpath); reset_counters(&marie->stat); reset_counters(&pauline->stat); - + /* The caller uses files instead of soundcard in order to avoid mixing soundcard input with file played using call's player. */ linphone_core_use_files(marie->lc, TRUE); linphone_core_set_play_file(marie->lc, NULL); @@ -4357,8 +4357,8 @@ static void call_with_rtp_io_mode(void) { player = linphone_call_get_player(linphone_core_get_current_call(marie->lc)); BC_ASSERT_PTR_NOT_NULL(player); if (player) { - BC_ASSERT_TRUE(linphone_player_open(player, hellopath, on_eof, marie) == 0); - BC_ASSERT_TRUE(linphone_player_start(player) == 0); + BC_ASSERT_EQUAL(linphone_player_open(player, hellopath, on_eof, marie) , 0, int, "%d"); + BC_ASSERT_EQUAL(linphone_player_start(player) , 0, int, "%d"); } /* This assert should be modified to be at least as long as the WAV file */ diff --git a/tester/eventapi_tester.c b/tester/eventapi_tester.c index e45cfea31..b196652db 100644 --- a/tester/eventapi_tester.c +++ b/tester/eventapi_tester.c @@ -39,7 +39,7 @@ const char *liblinphone_tester_get_notify_content(void){ void linphone_notify_received(LinphoneCore *lc, LinphoneEvent *lev, const char *eventname, const LinphoneContent *content){ LinphoneCoreManager *mgr; BC_ASSERT_PTR_NOT_NULL_FATAL(content); - BC_ASSERT_TRUE(strcmp(notify_content,(const char*)linphone_content_get_buffer(content))==0); + BC_ASSERT_STRING_EQUAL(notify_content,(const char*)linphone_content_get_buffer(content)); mgr=get_manager(lc); mgr->stat.number_of_NotifyReceived++; } @@ -193,7 +193,7 @@ static void subscribe_test_with_args(bool_t terminated_by_subscriber, RefreshTes if (refresh_type==AutoRefresh){ wait_for_list(lcs,NULL,0,6000); - BC_ASSERT_TRUE(linphone_event_get_subscription_state(pauline->lev)==LinphoneSubscriptionActive); + BC_ASSERT_EQUAL(linphone_event_get_subscription_state(pauline->lev), LinphoneSubscriptionActive, int, "%d"); }else if (refresh_type==ManualRefresh){ BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionExpiring,1,4000)); linphone_event_update_subscribe(lev,NULL); @@ -255,7 +255,7 @@ static void subscribe_test_with_args2(bool_t terminated_by_subscriber, RefreshTe if (refresh_type==AutoRefresh){ wait_for_list(lcs,NULL,0,6000); - BC_ASSERT_TRUE(linphone_event_get_subscription_state(pauline->lev)==LinphoneSubscriptionActive); + BC_ASSERT_EQUAL(linphone_event_get_subscription_state(pauline->lev), LinphoneSubscriptionActive, int, "%d"); }else if (refresh_type==ManualRefresh){ BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionExpiring,1,4000)); linphone_event_update_subscribe(lev,NULL); diff --git a/tester/log_collection_tester.c b/tester/log_collection_tester.c index b2a7fa1d9..4beabef73 100644 --- a/tester/log_collection_tester.c +++ b/tester/log_collection_tester.c @@ -202,13 +202,13 @@ static time_t check_file(LinphoneCoreManager* mgr) { if (strptime(date, "%Y-%m-%d %H:%M:%S", &tm_curr) != NULL) { tm_curr.tm_isdst = -1; // LOL log_time = mktime(&tm_curr); - BC_ASSERT_TRUE(log_time >= time_prev); + BC_ASSERT_GREATER(log_time , time_prev, long int, "%ld"); time_prev = log_time; } } #endif } - BC_ASSERT_TRUE(line_count > 25); + BC_ASSERT_GREATER(line_count , 25, int, "%d"); free(line); fclose(file); ms_free(filepath); @@ -217,7 +217,7 @@ static time_t check_file(LinphoneCoreManager* mgr) { timediff = labs((long int)log_time - (long int)cur_time); (void)timediff; #ifndef _WIN32 - BC_ASSERT_TRUE( timediff <= 1 ); + BC_ASSERT_LOWER(timediff, 1, unsigned, "%u"); if( !(timediff <= 1) ){ char buffers[2][128] = {{0}}; strftime(buffers[0], sizeof(buffers[0]), "%Y-%m-%d %H:%M:%S", localtime(&log_time)); diff --git a/tester/message_tester.c b/tester/message_tester.c index ca623e0b3..6ffaab17d 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -1444,7 +1444,7 @@ static void info_message_with_args(bool_t with_content) { BC_ASSERT_PTR_NOT_NULL(hvalue); if (hvalue) - BC_ASSERT_TRUE(strcmp(hvalue,"still bad")==0); + BC_ASSERT_STRING_EQUAL(hvalue, "still bad"); if (with_content){ BC_ASSERT_PTR_NOT_NULL(content); @@ -1452,9 +1452,9 @@ static void info_message_with_args(bool_t with_content) { BC_ASSERT_PTR_NOT_NULL(linphone_content_get_buffer(content)); BC_ASSERT_PTR_NOT_NULL(linphone_content_get_type(content)); BC_ASSERT_PTR_NOT_NULL(linphone_content_get_subtype(content)); - if (linphone_content_get_type(content)) BC_ASSERT_TRUE(strcmp(linphone_content_get_type(content),"application")==0); - if (linphone_content_get_subtype(content)) BC_ASSERT_TRUE(strcmp(linphone_content_get_subtype(content),"somexml")==0); - if (linphone_content_get_buffer(content))BC_ASSERT_TRUE(strcmp((const char*)linphone_content_get_buffer(content),info_content)==0); + if (linphone_content_get_type(content)) BC_ASSERT_STRING_EQUAL(linphone_content_get_type(content),"application"); + if (linphone_content_get_subtype(content)) BC_ASSERT_STRING_EQUAL(linphone_content_get_subtype(content),"somexml"); + if (linphone_content_get_buffer(content))BC_ASSERT_STRING_EQUAL((const char*)linphone_content_get_buffer(content),info_content); BC_ASSERT_EQUAL(linphone_content_get_size(content),strlen(info_content), int, "%d"); } } diff --git a/tester/multi_call_tester.c b/tester/multi_call_tester.c index 22db4b446..45f7bfcbc 100644 --- a/tester/multi_call_tester.c +++ b/tester/multi_call_tester.c @@ -362,7 +362,7 @@ static void simple_call_transfer(void) { marie_calling_laure=linphone_core_get_current_call(marie->lc); BC_ASSERT_PTR_NOT_NULL_FATAL(marie_calling_laure); - BC_ASSERT_TRUE(linphone_call_get_transferer_call(marie_calling_laure)==marie_calling_pauline); + BC_ASSERT_PTR_EQUAL(linphone_call_get_transferer_call(marie_calling_laure),marie_calling_pauline); BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneTransferCallConnected,1,2000)); diff --git a/tester/offeranswer_tester.c b/tester/offeranswer_tester.c index 2b25f9252..923635108 100644 --- a/tester/offeranswer_tester.c +++ b/tester/offeranswer_tester.c @@ -43,13 +43,13 @@ static void start_with_no_config(void){ int speex16_codec_pos=get_codec_position(codecs, "speex", 16000); PayloadType *pt; opus_codec_pos=get_codec_position(codecs, "opus", 48000); - if (opus_codec_pos!=-1) BC_ASSERT_TRUE(opus_codec_pos==0); - BC_ASSERT_TRUE(speex16_codec_poslc,pauline->lc,&marie->stat.number_of_LinphonePresenceActivityShopping,1); BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePresenceActivityShopping, 1, int, "%d"); presence_timestamp = linphone_presence_model_get_timestamp(presence); - BC_ASSERT_TRUE(presence_timestamp >= current_timestamp); + BC_ASSERT_GREATER(presence_timestamp , current_timestamp, unsigned, "%u"); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); diff --git a/tester/register_tester.c b/tester/register_tester.c index c2f883bd9..ab159ea2a 100644 --- a/tester/register_tester.c +++ b/tester/register_tester.c @@ -206,7 +206,7 @@ static void register_with_custom_headers(void){ wait_for(marie->lc, NULL, &marie->stat.number_of_LinphoneRegistrationOk,initial_register_ok+1); value=linphone_proxy_config_get_custom_header(cfg, "Server"); BC_ASSERT_PTR_NOT_NULL(value); - if (value) BC_ASSERT_TRUE(strstr(value, "Flexisip")!=NULL); + if (value) BC_ASSERT_PTR_NOT_NULL(strstr(value, "Flexisip")); linphone_core_manager_destroy(marie); } @@ -424,7 +424,7 @@ static void authenticated_register_with_wrong_credentials_with_params_base(const const LinphoneErrorInfo *ei=linphone_proxy_config_get_error_info(cfg); const char *phrase=linphone_error_info_get_phrase(ei); BC_ASSERT_PTR_NOT_NULL(phrase); - if (phrase) BC_ASSERT_TRUE(strcmp(phrase,"Forbidden")==0); + if (phrase) BC_ASSERT_STRING_EQUAL(phrase,"Forbidden"); BC_ASSERT_EQUAL(linphone_error_info_get_protocol_code(ei),403, int, "%d"); BC_ASSERT_PTR_NULL(linphone_error_info_get_details(ei)); } @@ -750,7 +750,7 @@ static void io_recv_error_without_active_register(){ /*nothing should happen because no active registration*/ wait_for_until(lc,lc, &dummy, 1, 3000); - BC_ASSERT_TRUE(counters->number_of_LinphoneRegistrationProgress == ms_list_size(linphone_core_get_proxy_config_list(lc))); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationProgress, ms_list_size(linphone_core_get_proxy_config_list(lc)), int, "%d"); BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0,int,"%d"); diff --git a/tester/remote_provisioning_tester.c b/tester/remote_provisioning_tester.c index 7a5de0876..ac6e5602f 100644 --- a/tester/remote_provisioning_tester.c +++ b/tester/remote_provisioning_tester.c @@ -52,8 +52,8 @@ static void remote_provisioning_transient(void) { LinphoneCoreManager* marie = linphone_core_manager_new2("marie_transient_remote_rc", FALSE); BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneRegistrationOk,1)); - BC_ASSERT_TRUE(linphone_core_is_provisioning_transient(marie->lc) == TRUE); - BC_ASSERT_TRUE(linphone_core_get_provisioning_uri(marie->lc) == NULL); + BC_ASSERT_TRUE(linphone_core_is_provisioning_transient(marie->lc)); + BC_ASSERT_PTR_NULL(linphone_core_get_provisioning_uri(marie->lc)); linphone_core_manager_destroy(marie); } @@ -89,8 +89,8 @@ static void remote_provisioning_default_values(void) { LinphoneCoreManager* marie = linphone_core_manager_new2("marie_remote_default_values_rc", FALSE); BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); lpc = linphone_core_create_proxy_config(marie->lc); - BC_ASSERT_TRUE(lpc->reg_sendregister == TRUE); - BC_ASSERT_TRUE(lpc->expires == 604800); + BC_ASSERT_TRUE(lpc->reg_sendregister); + BC_ASSERT_EQUAL(lpc->expires, 604800, int, "%d"); BC_ASSERT_STRING_EQUAL(lpc->reg_proxy, ""); BC_ASSERT_STRING_EQUAL(lpc->reg_route, ""); BC_ASSERT_STRING_EQUAL(lpc->reg_identity, "sip:?@sip.linphone.org"); diff --git a/tester/setup_tester.c b/tester/setup_tester.c index 58a0dc817..2f7002bd2 100644 --- a/tester/setup_tester.c +++ b/tester/setup_tester.c @@ -25,7 +25,7 @@ static void linphone_version_test(void){ const char *version=linphone_core_get_version(); /*make sure the git version is always included in the version number*/ - BC_ASSERT_TRUE(strstr(version,"unknown")==NULL); + BC_ASSERT_PTR_NULL(strstr(version,"unknown")); } static void core_init_test(void) { @@ -269,7 +269,7 @@ static void codec_usability_test(void) { LinphoneCoreManager *mgr = linphone_core_manager_new2("empty_rc", FALSE); PayloadType *pt = linphone_core_find_payload_type(mgr->lc, "PCMU", 8000, -1); - BC_ASSERT_TRUE(pt!=NULL); + BC_ASSERT_PTR_NOT_NULL(pt); if (!pt) goto end; /*no limit*/ linphone_core_set_upload_bandwidth(mgr->lc, 0); diff --git a/tester/tester.c b/tester/tester.c index a41d634d8..e51f5a720 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -111,7 +111,7 @@ LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* path, c if (file){ filepath = ms_strdup_printf("%s/%s", path, file); - BC_ASSERT_TRUE_FATAL(ortp_file_exist(filepath)==0); + BC_ASSERT_EQUAL_FATAL(ortp_file_exist(filepath),0,int,"%d"); config = lp_config_new_with_factory(NULL,filepath); } diff --git a/tester/upnp_tester.c b/tester/upnp_tester.c index a081f91c1..fc487b75e 100644 --- a/tester/upnp_tester.c +++ b/tester/upnp_tester.c @@ -27,7 +27,7 @@ static void upnp_start_n_stop(void) { LinphoneCoreManager* lc_upnp = linphone_core_manager_new2( "upnp_rc", FALSE); wait_for(lc_upnp->lc,lc_upnp->lc,&tmp,1); #ifdef BUILD_UPNP - BC_ASSERT_TRUE(lc_upnp->lc->upnp != NULL); + BC_ASSERT_PTR_NOT_NULL(lc_upnp->lc->upnp); #endif linphone_core_manager_destroy(lc_upnp); } @@ -36,7 +36,7 @@ static void upnp_check_state(void) { int tmp = 0; LinphoneCoreManager* lc_upnp = linphone_core_manager_new2( "upnp_rc", FALSE); wait_for(lc_upnp->lc,lc_upnp->lc,&tmp,1); - BC_ASSERT_TRUE(linphone_core_get_upnp_state(lc_upnp->lc) == LinphoneUpnpStateOk); + BC_ASSERT_EQUAL(linphone_core_get_upnp_state(lc_upnp->lc), LinphoneUpnpStateOk, int, "%d"); linphone_core_manager_destroy(lc_upnp); } @@ -46,7 +46,10 @@ static void upnp_check_ipaddress(void) { LinphoneCoreManager* lc_upnp = linphone_core_manager_new2( "upnp_rc", FALSE); wait_for(lc_upnp->lc,lc_upnp->lc,&tmp,1); addr = linphone_core_get_upnp_external_ipaddress(lc_upnp->lc); - BC_ASSERT_TRUE(addr != NULL && strlen(addr)>=7); + BC_ASSERT_PTR_NOT_NULL(addr); + if (addr!=NULL) { + BC_ASSERT_GREATER(strlen(addr),7,int,"%d"); + } linphone_core_manager_destroy(lc_upnp); } diff --git a/tester/video_tester.c b/tester/video_tester.c index 2fee24c59..1b21488c5 100644 --- a/tester/video_tester.c +++ b/tester/video_tester.c @@ -446,12 +446,12 @@ static void forked_outgoing_early_media_video_call_with_inactive_audio_test(void if (pauline_call && marie1_call && marie2_call) { /* wait a bit that streams are established */ wait_for_list(lcs, &dummy, 1, 6000); - BC_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth == 0); - BC_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth == 0); - BC_ASSERT_TRUE(linphone_call_get_audio_stats(marie2_call)->download_bandwidth == 0); - BC_ASSERT_TRUE(linphone_call_get_video_stats(pauline_call)->download_bandwidth == 0); - BC_ASSERT_TRUE(linphone_call_get_video_stats(marie1_call)->download_bandwidth > 0); - BC_ASSERT_TRUE(linphone_call_get_video_stats(marie2_call)->download_bandwidth > 0); + BC_ASSERT_EQUAL(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 0, float, "%f"); + BC_ASSERT_EQUAL(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 0, float, "%f"); + BC_ASSERT_EQUAL(linphone_call_get_audio_stats(marie2_call)->download_bandwidth, 0, float, "%f"); + BC_ASSERT_EQUAL(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 0, float, "%f"); + BC_ASSERT_GREATER(linphone_call_get_video_stats(marie1_call)->download_bandwidth, 0, float, "%f"); + BC_ASSERT_GREATER(linphone_call_get_video_stats(marie2_call)->download_bandwidth, 0, float, "%f"); linphone_call_params_set_audio_direction(marie1_params, LinphoneMediaDirectionSendRecv); linphone_core_accept_call_with_params(marie1->lc, linphone_core_get_current_call(marie1->lc), marie1_params); @@ -463,10 +463,10 @@ static void forked_outgoing_early_media_video_call_with_inactive_audio_test(void /*wait a bit that streams are established*/ wait_for_list(lcs, &dummy, 1, 3000); - BC_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth > 71); - BC_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth > 71); - BC_ASSERT_TRUE(linphone_call_get_video_stats(pauline_call)->download_bandwidth > 0); - BC_ASSERT_TRUE(linphone_call_get_video_stats(marie1_call)->download_bandwidth > 0); + BC_ASSERT_GREATER(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 71, float, "%f"); + BC_ASSERT_GREATER(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 71, float, "%f"); + BC_ASSERT_GREATER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 0, float, "%f"); + BC_ASSERT_GREATER(linphone_call_get_video_stats(marie1_call)->download_bandwidth, 0, float, "%f"); /* send an INFO in reverse side to check that dialogs are properly established */ info = linphone_core_create_info_message(marie1->lc); From fd7f6a4c73dffc7b757a943d815713eae9f374b5 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 5 Aug 2015 14:21:14 +0200 Subject: [PATCH 038/134] tester: fix quality reporting with custom route test when using tunnel --- tester/quality_reporting_tester.c | 26 ++++++-------------------- tester/tester.c | 2 +- tester/tunnel_tester.c | 4 ++-- 3 files changed, 9 insertions(+), 23 deletions(-) diff --git a/tester/quality_reporting_tester.c b/tester/quality_reporting_tester.c index 038d823ca..debfb2608 100644 --- a/tester/quality_reporting_tester.c +++ b/tester/quality_reporting_tester.c @@ -339,26 +339,9 @@ static void quality_reporting_session_report_if_video_stopped() { } void publish_report_with_route_state_changed(LinphoneCore *lc, LinphoneEvent *ev, LinphonePublishState state){ - stats* counters = get_stats(lc); - const LinphoneAddress* from_addr = linphone_event_get_from(ev); - char* from = linphone_address_as_string(from_addr); - ms_message("Publish state [%s] from [%s]",linphone_publish_state_to_string(state),from); - ms_free(from); - switch(state){ - case LinphonePublishProgress: - BC_ASSERT_STRING_EQUAL(linphone_address_as_string(linphone_event_get_resource(ev)), linphone_proxy_config_get_quality_reporting_collector(linphone_core_get_default_proxy_config(lc))); - counters->number_of_LinphonePublishProgress++; - break; - case LinphonePublishOk: - counters->number_of_LinphonePublishOk++; - break; - case LinphonePublishError: counters->number_of_LinphonePublishError++; break; - case LinphonePublishExpiring: counters->number_of_LinphonePublishExpiring++; break; - case LinphonePublishCleared: counters->number_of_LinphonePublishCleared++;break; - default: - break; + if (state == LinphonePublishProgress) { + BC_ASSERT_STRING_EQUAL(linphone_address_as_string(linphone_event_get_resource(ev)), linphone_proxy_config_get_quality_reporting_collector(linphone_core_get_default_proxy_config(lc))); } - } static void quality_reporting_sent_using_custom_route() { @@ -367,7 +350,10 @@ static void quality_reporting_sent_using_custom_route() { LinphoneCall* call_marie = NULL; LinphoneCall* call_pauline = NULL; - marie->lc->current_vtable->publish_state_changed = publish_report_with_route_state_changed; + LinphoneCoreVTable publish_vtable = {0}; + publish_vtable.publish_state_changed = publish_report_with_route_state_changed; + linphone_core_add_listener(marie->lc, &publish_vtable); + //INVALID collector: sip.linphone.org do not collect reports, so it will throw a 404 Not Found error linphone_proxy_config_set_quality_reporting_collector(linphone_core_get_default_proxy_config(marie->lc), "sip:sip.linphone.org"); diff --git a/tester/tester.c b/tester/tester.c index e51f5a720..b6d6c6980 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -111,7 +111,7 @@ LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* path, c if (file){ filepath = ms_strdup_printf("%s/%s", path, file); - BC_ASSERT_EQUAL_FATAL(ortp_file_exist(filepath),0,int,"%d"); + BC_ASSERT_EQUAL_FATAL(ortp_file_exist(filepath),0,int, "%d"); config = lp_config_new_with_factory(NULL,filepath); } diff --git a/tester/tunnel_tester.c b/tester/tunnel_tester.c index 425247eb8..76ce2a826 100644 --- a/tester/tunnel_tester.c +++ b/tester/tunnel_tester.c @@ -128,8 +128,8 @@ static void call_with_tunnel_base(LinphoneTunnelMode tunnel_mode, bool_t with_si pauline_call=linphone_core_get_current_call(pauline->lc); BC_ASSERT_PTR_NOT_NULL(pauline_call); if (pauline_call!=NULL){ - BC_ASSERT_PTR_EQUAL(linphone_call_params_get_media_encryption(linphone_call_get_current_params(pauline_call)), - encryption); + BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(linphone_call_get_current_params(pauline_call)), + encryption, int, "%d"); } if (tunnel_mode == LinphoneTunnelModeEnable && with_sip){ /* make sure the call from pauline arrived from the tunnel by checking the contact address*/ From 48e8734b6f8cc770d2c3278d90d8e5363ceb35ee Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 5 Aug 2015 15:50:33 +0200 Subject: [PATCH 039/134] repair liblinphone_tester (android) and enable call with file player and rtp io test to run ms_audio_diff on embedded platforms, since it is much faster than originally. --- coreapi/linphonecore_jni.cc | 6 ++++++ tester/call_tester.c | 13 ++----------- tester/liblinphone_tester.h | 2 +- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 509712753..b1aba031b 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -136,12 +136,18 @@ static void linphone_android_ortp_log_handler(OrtpLogLevel lev, const char *fmt, int dumbMethodForAllowingUsageOfCpuFeaturesFromStaticLibMediastream() { return (android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM && (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0); } + +int dumbMethodForAllowingUsageOfMsAudioDiffFromStaticLibMediastream() { + return ms_audio_diff(NULL, NULL, NULL, 0, NULL, NULL); +} #endif /*ANDROID*/ + JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *ajvm, void *reserved) { #ifdef ANDROID ms_set_jvm(ajvm); + #endif /*ANDROID*/ jvm=ajvm; return JNI_VERSION_1_2; diff --git a/tester/call_tester.c b/tester/call_tester.c index 4866dda26..fbe81b2b6 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -2345,13 +2345,9 @@ static void call_with_file_player(void) { end_call(marie, pauline); /*cannot run on iphone simulator because locks main loop beyond permitted time (should run on another thread) */ -#if !defined(__arm__) && !defined(__arm64__) && !TARGET_IPHONE_SIMULATOR && !defined(ANDROID) BC_ASSERT_EQUAL(ms_audio_diff(hellopath,recordpath,&similar,audio_cmp_max_shift,NULL,NULL), 0, int, "%d"); if (similar>=threshold) break; -#else - remove(recordpath); -#endif } BC_ASSERT_GREATER(similar, threshold, double, "%g"); BC_ASSERT_LOWER(similar, 1.0, double, "%g"); @@ -4367,13 +4363,8 @@ static void call_with_rtp_io_mode(void) { wait_for_until(pauline->lc,marie->lc,NULL,0,1000); end_call(pauline,marie); - if (ms_tags_list_contains_tag(ms_factory_get_platform_tags(ms_factory_get_fallback()), "embedded")) { - ms_warning("Cannot run audio diff on embedded platform"); - remove(recordpath); - } else { - BC_ASSERT_EQUAL(ms_audio_diff(hellopath, recordpath, &similar, audio_cmp_max_shift, NULL, NULL), 0, int, "%d"); - if (similar>=threshold) break; - } + BC_ASSERT_EQUAL(ms_audio_diff(hellopath, recordpath, &similar, audio_cmp_max_shift, NULL, NULL), 0, int, "%d"); + if (similar>=threshold) break; } BC_ASSERT_GREATER(similar, threshold, double, "%g"); BC_ASSERT_LOWER(similar, 1.0, double, "%g"); diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index 340c0887b..f04380203 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -320,7 +320,7 @@ bool_t pause_call_1(LinphoneCoreManager* mgr_1,LinphoneCall* call_1,LinphoneCore bool_t compare_files(const char *path1, const char *path2); void check_media_direction(LinphoneCoreManager* mgr, LinphoneCall *call, MSList* lcs,LinphoneMediaDirection audio_dir, LinphoneMediaDirection video_dir); -static const int audio_cmp_max_shift=20; +static const int audio_cmp_max_shift=10; /* * this function return max value in the last 3 seconds*/ From 098ddaead686928c735c05c2c808600eef55ae0b Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 5 Aug 2015 15:53:10 +0200 Subject: [PATCH 040/134] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 421c63453..e25a2acdf 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 421c6345321bc7339096fd52584753a5cd5a822b +Subproject commit e25a2acdf074f286349a43e47899674c0ca1d2aa From b2284a34dfdce1b6a1bdecf07c8d3c75ad8e6e8e Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 5 Aug 2015 16:53:56 +0200 Subject: [PATCH 041/134] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index e25a2acdf..5a0a6c56a 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit e25a2acdf074f286349a43e47899674c0ca1d2aa +Subproject commit 5a0a6c56ab973a920e275708e732ed5c4688aa4d From 75de919def265cf0141583220f0a47d51221b481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Wed, 5 Aug 2015 17:25:05 +0200 Subject: [PATCH 042/134] Documents linphone_call_get_play_volume() and linphone_call_get_record_volume() --- coreapi/linphonecore.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index e9a3d9161..8e1036a20 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -719,7 +719,21 @@ LINPHONE_PUBLIC LinphoneReason linphone_call_get_reason(const LinphoneCall *call LINPHONE_PUBLIC const LinphoneErrorInfo *linphone_call_get_error_info(const LinphoneCall *call); LINPHONE_PUBLIC const char *linphone_call_get_remote_user_agent(LinphoneCall *call); LINPHONE_PUBLIC const char *linphone_call_get_remote_contact(LinphoneCall *call); + +/** + * Get the mesured playback volume level. + * + * @param call The call. + * @return float Volume level in percentage. + */ LINPHONE_PUBLIC float linphone_call_get_play_volume(LinphoneCall *call); + +/** + * Get the mesured record volume level + * + * @param call The call. + * @return float Volume level in percentage. + */ LINPHONE_PUBLIC float linphone_call_get_record_volume(LinphoneCall *call); /** From 63b1c6196d9bf19d1542d2d0113af6c8cd41b990 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Thu, 6 Aug 2015 11:16:14 +0200 Subject: [PATCH 043/134] don't call prepare_sound with soundcards when the core is in use_files mode. It makes double instanciation of card readers causing crashes on iOS --- coreapi/linphonecore.c | 5 +++-- mediastreamer2 | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 00ec99070..2dfe46e8c 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -2775,7 +2775,8 @@ int linphone_core_start_invite(LinphoneCore *lc, LinphoneCall *call, const Linph if (call->localdesc->streams[0].max_rate>0) { ms_snd_card_set_preferred_sample_rate(lc->sound_conf.play_sndcard, call->localdesc->streams[0].max_rate); } - audio_stream_prepare_sound(call->audiostream,lc->sound_conf.play_sndcard,lc->sound_conf.capt_sndcard); + if (!lc->use_files) + audio_stream_prepare_sound(call->audiostream,lc->sound_conf.play_sndcard,lc->sound_conf.capt_sndcard); } } real_url=linphone_address_as_string( destination ? destination : call->log->to); @@ -3612,7 +3613,7 @@ int linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call, ms_snd_card_set_preferred_sample_rate(lc->sound_conf.capt_sndcard, call->localdesc->streams[0].max_rate); } - if (!was_ringing && call->audiostream->ms.state==MSStreamInitialized){ + if (!was_ringing && call->audiostream->ms.state==MSStreamInitialized && !lc->use_files){ audio_stream_prepare_sound(call->audiostream,lc->sound_conf.play_sndcard,lc->sound_conf.capt_sndcard); } diff --git a/mediastreamer2 b/mediastreamer2 index 5a0a6c56a..5ca97404c 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 5a0a6c56ab973a920e275708e732ed5c4688aa4d +Subproject commit 5ca97404c6466c6bec2a44deddaadb48a522c2b8 From 2646cd5c35cb39ad7ffd1c265a4958abe0d78486 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Thu, 6 Aug 2015 11:30:12 +0200 Subject: [PATCH 044/134] Fix automatic wrapper generation. --- coreapi/linphone_proxy_config.h | 99 ++++++++++++++++++++------------- coreapi/linphonecore.h | 5 ++ 2 files changed, 64 insertions(+), 40 deletions(-) diff --git a/coreapi/linphone_proxy_config.h b/coreapi/linphone_proxy_config.h index 7c1912ed3..127564504 100644 --- a/coreapi/linphone_proxy_config.h +++ b/coreapi/linphone_proxy_config.h @@ -1,5 +1,5 @@ /* -Copyright (C) 2000 - 2010 Simon MORLAT (simon.morlat@linphone.org) +Copyright (C) 2010-2015 Belledonne Communications SARL This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -15,14 +15,20 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + #ifndef LINPHONE_PROXY_CONFIG_H #define LINPHONE_PROXY_CONFIG_H +/** + * @addtogroup proxies + * @{ +**/ + /** * Creates an empty proxy config. * @deprecated, use #linphone_core_create_proxy_config instead **/ -LINPHONE_PUBLIC LinphoneProxyConfig *linphone_proxy_config_new(void); +LINPHONE_PUBLIC LinphoneProxyConfig *linphone_proxy_config_new(void); /** * Acquire a reference to the proxy config. @@ -59,7 +65,7 @@ LINPHONE_PUBLIC void linphone_proxy_config_set_user_data(LinphoneProxyConfig *cf * - IP address with port: sip:87.98.157.38:5062 * - hostnames : sip:sip.example.net **/ -LINPHONE_PUBLIC int linphone_proxy_config_set_server_addr(LinphoneProxyConfig *cfg, const char *server_addr); +LINPHONE_PUBLIC int linphone_proxy_config_set_server_addr(LinphoneProxyConfig *cfg, const char *server_addr); /** * @deprecated Use linphone_proxy_config_set_identity_address() @@ -75,28 +81,29 @@ LINPHONE_PUBLIC int linphone_proxy_config_set_identity(LinphoneProxyConfig *cfg, * The REGISTER messages will have from and to set to this identity. * **/ -LINPHONE_PUBLIC int linphone_proxy_config_set_identity_address(LinphoneProxyConfig *cfg, const LinphoneAddress *identity); +LINPHONE_PUBLIC int linphone_proxy_config_set_identity_address(LinphoneProxyConfig *cfg, const LinphoneAddress *identity); /** * Sets a SIP route. * When a route is set, all outgoing calls will go to the route's destination if this proxy * is the default one (see linphone_core_set_default_proxy() ). **/ -LINPHONE_PUBLIC int linphone_proxy_config_set_route(LinphoneProxyConfig *cfg, const char *route); +LINPHONE_PUBLIC int linphone_proxy_config_set_route(LinphoneProxyConfig *cfg, const char *route); /** * Sets the registration expiration time in seconds. **/ -LINPHONE_PUBLIC void linphone_proxy_config_set_expires(LinphoneProxyConfig *cfg, int expires); +LINPHONE_PUBLIC void linphone_proxy_config_set_expires(LinphoneProxyConfig *cfg, int expires); #define linphone_proxy_config_expires linphone_proxy_config_set_expires + /** * Indicates either or not, REGISTRATION must be issued for this #LinphoneProxyConfig . *
In case this #LinphoneProxyConfig has been added to #LinphoneCore, follows the linphone_proxy_config_edit() rule. * @param[in] cfg #LinphoneProxyConfig object. * @param val if true, registration will be engaged */ -LINPHONE_PUBLIC void linphone_proxy_config_enable_register(LinphoneProxyConfig *cfg, bool_t val); +LINPHONE_PUBLIC void linphone_proxy_config_enable_register(LinphoneProxyConfig *cfg, bool_t val); #define linphone_proxy_config_enableregister linphone_proxy_config_enable_register @@ -109,12 +116,13 @@ LINPHONE_PUBLIC void linphone_proxy_config_enable_register(LinphoneProxyConfig * * Once the modifications are done, then the application must call * linphone_proxy_config_done() to commit the changes. **/ -LINPHONE_PUBLIC void linphone_proxy_config_edit(LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC void linphone_proxy_config_edit(LinphoneProxyConfig *cfg); /** * Commits modification made to the proxy configuration. **/ -LINPHONE_PUBLIC int linphone_proxy_config_done(LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC int linphone_proxy_config_done(LinphoneProxyConfig *cfg); + /** * Indicates either or not, PUBLISH must be issued for this #LinphoneProxyConfig . *
In case this #LinphoneProxyConfig has been added to #LinphoneCore, follows the linphone_proxy_config_edit() rule. @@ -122,28 +130,27 @@ LINPHONE_PUBLIC int linphone_proxy_config_done(LinphoneProxyConfig *cfg); * @param val if true, publish will be engaged * */ -LINPHONE_PUBLIC void linphone_proxy_config_enable_publish(LinphoneProxyConfig *cfg, bool_t val); +LINPHONE_PUBLIC void linphone_proxy_config_enable_publish(LinphoneProxyConfig *cfg, bool_t val); + /** * Set the publish expiration time in second. * @param[in] cfg #LinphoneProxyConfig object. * @param expires in second * */ +LINPHONE_PUBLIC void linphone_proxy_config_set_publish_expires(LinphoneProxyConfig *cfg, int expires); -LINPHONE_PUBLIC void linphone_proxy_config_set_publish_expires(LinphoneProxyConfig *cfg, int expires); /** * get the publish expiration time in second. Default value is the registration expiration value. * @param[in] cfg #LinphoneProxyConfig object. * @return expires in second * */ - -LINPHONE_PUBLIC int linphone_proxy_config_get_publish_expires(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC int linphone_proxy_config_get_publish_expires(const LinphoneProxyConfig *cfg); /** * Sets whether liblinphone should replace "+" by international calling prefix in dialed numbers (passed to * #linphone_core_invite ). - * **/ -LINPHONE_PUBLIC void linphone_proxy_config_set_dial_escape_plus(LinphoneProxyConfig *cfg, bool_t val); +LINPHONE_PUBLIC void linphone_proxy_config_set_dial_escape_plus(LinphoneProxyConfig *cfg, bool_t val); /** * Sets a dialing prefix to be automatically prepended when inviting a number with @@ -151,21 +158,21 @@ LINPHONE_PUBLIC void linphone_proxy_config_set_dial_escape_plus(LinphoneProxyCon * This dialing prefix shall usually be the country code of the country where the user is living, without "+". * **/ -LINPHONE_PUBLIC void linphone_proxy_config_set_dial_prefix(LinphoneProxyConfig *cfg, const char *prefix); +LINPHONE_PUBLIC void linphone_proxy_config_set_dial_prefix(LinphoneProxyConfig *cfg, const char *prefix); /** * Indicates whether quality statistics during call should be stored and sent to a collector according to RFC 6035. * @param[in] cfg #LinphoneProxyConfig object. * @param[in] enable True to sotre quality statistics and sent them to the collector, false to disable it. */ -LINPHONE_PUBLIC void linphone_proxy_config_enable_quality_reporting(LinphoneProxyConfig *cfg, bool_t enable); +LINPHONE_PUBLIC void linphone_proxy_config_enable_quality_reporting(LinphoneProxyConfig *cfg, bool_t enable); /** * Indicates whether quality statistics during call should be stored and sent to a collector according to RFC 6035. * @param[in] cfg #LinphoneProxyConfig object. * @return True if quality repotring is enabled, false otherwise. */ -LINPHONE_PUBLIC bool_t linphone_proxy_config_quality_reporting_enabled(LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC bool_t linphone_proxy_config_quality_reporting_enabled(LinphoneProxyConfig *cfg); /** * Set the route of the collector end-point when using quality reporting. This SIP address @@ -175,7 +182,7 @@ LINPHONE_PUBLIC bool_t linphone_proxy_config_quality_reporting_enabled(LinphoneP * @param[in] cfg #LinphoneProxyConfig object. * @param[in] collector route of the collector end-point, if NULL PUBLISH will be sent to the proxy domain. */ -LINPHONE_PUBLIC void linphone_proxy_config_set_quality_reporting_collector(LinphoneProxyConfig *cfg, const char *collector); +LINPHONE_PUBLIC void linphone_proxy_config_set_quality_reporting_collector(LinphoneProxyConfig *cfg, const char *collector); /** * Get the route of the collector end-point when using quality reporting. This SIP address @@ -185,7 +192,7 @@ LINPHONE_PUBLIC void linphone_proxy_config_set_quality_reporting_collector(Linph * @param[in] cfg #LinphoneProxyConfig object. * @return The SIP address of the collector end-point. */ -LINPHONE_PUBLIC const char *linphone_proxy_config_get_quality_reporting_collector(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC const char *linphone_proxy_config_get_quality_reporting_collector(const LinphoneProxyConfig *cfg); /** * Set the interval between 2 interval reports sending when using quality reporting. If call exceed interval size, an @@ -209,73 +216,79 @@ LINPHONE_PUBLIC int linphone_proxy_config_get_quality_reporting_interval(Linphon * @param[in] cfg #LinphoneProxyConfig object. * @return The registration state of the proxy config. **/ -LINPHONE_PUBLIC LinphoneRegistrationState linphone_proxy_config_get_state(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC LinphoneRegistrationState linphone_proxy_config_get_state(const LinphoneProxyConfig *cfg); /** * @return a boolean indicating that the user is sucessfully registered on the proxy. * @deprecated Use linphone_proxy_config_get_state() instead. **/ -LINPHONE_PUBLIC bool_t linphone_proxy_config_is_registered(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC bool_t linphone_proxy_config_is_registered(const LinphoneProxyConfig *cfg); /** * Get the domain name of the given proxy config. * @param[in] cfg #LinphoneProxyConfig object. * @return The domain name of the proxy config. **/ -LINPHONE_PUBLIC const char *linphone_proxy_config_get_domain(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC const char *linphone_proxy_config_get_domain(const LinphoneProxyConfig *cfg); /** * Get the realm of the given proxy config. * @param[in] cfg #LinphoneProxyConfig object. * @return The realm of the proxy config. **/ -LINPHONE_PUBLIC const char *linphone_proxy_config_get_realm(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC const char *linphone_proxy_config_get_realm(const LinphoneProxyConfig *cfg); + /** * Set the realm of the given proxy config. * @param[in] cfg #LinphoneProxyConfig object. * @param[in] realm New realm value. * @return The realm of the proxy config. **/ -LINPHONE_PUBLIC void linphone_proxy_config_set_realm(LinphoneProxyConfig *cfg, const char * realm); +LINPHONE_PUBLIC void linphone_proxy_config_set_realm(LinphoneProxyConfig *cfg, const char * realm); /** * @return the route set for this proxy configuration. **/ -LINPHONE_PUBLIC const char *linphone_proxy_config_get_route(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC const char *linphone_proxy_config_get_route(const LinphoneProxyConfig *cfg); /** * @return the SIP identity that belongs to this proxy configuration. **/ -LINPHONE_PUBLIC const LinphoneAddress *linphone_proxy_config_get_identity_address(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC const LinphoneAddress *linphone_proxy_config_get_identity_address(const LinphoneProxyConfig *cfg); /** * @deprecated use linphone_proxy_config_get_identity_address() **/ -LINPHONE_PUBLIC const char *linphone_proxy_config_get_identity(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC const char *linphone_proxy_config_get_identity(const LinphoneProxyConfig *cfg); /** * @return TRUE if PUBLISH request is enabled for this proxy. **/ -LINPHONE_PUBLIC bool_t linphone_proxy_config_publish_enabled(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC bool_t linphone_proxy_config_publish_enabled(const LinphoneProxyConfig *cfg); /** * @return the proxy's SIP address. **/ LINPHONE_PUBLIC const char *linphone_proxy_config_get_server_addr(const LinphoneProxyConfig *cfg); + #define linphone_proxy_config_get_addr linphone_proxy_config_get_server_addr + /** * @return the duration of registration. **/ -LINPHONE_PUBLIC int linphone_proxy_config_get_expires(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC int linphone_proxy_config_get_expires(const LinphoneProxyConfig *cfg); + /** * @return TRUE if registration to the proxy is enabled. **/ -LINPHONE_PUBLIC bool_t linphone_proxy_config_register_enabled(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC bool_t linphone_proxy_config_register_enabled(const LinphoneProxyConfig *cfg); + /** * Refresh a proxy registration. * This is useful if for example you resuming from suspend, thus IP address may have changed. **/ -LINPHONE_PUBLIC void linphone_proxy_config_refresh_register(LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC void linphone_proxy_config_refresh_register(LinphoneProxyConfig *cfg); + /** * Prevent a proxy config from refreshing its registration. * This is useful to let registrations to expire naturally (or) when the application wants to keep control on when @@ -291,7 +304,8 @@ LINPHONE_PUBLIC const LinphoneAddress* linphone_proxy_config_get_contact(const L /** * @return previously set contact parameters. **/ -LINPHONE_PUBLIC const char *linphone_proxy_config_get_contact_parameters(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC const char *linphone_proxy_config_get_contact_parameters(const LinphoneProxyConfig *cfg); + /** * Set optional contact parameters that will be added to the contact information sent in the registration. * @param[in] cfg #LinphoneProxyConfig object. @@ -300,7 +314,7 @@ LINPHONE_PUBLIC const char *linphone_proxy_config_get_contact_parameters(const L * The main use case for this function is provide the proxy additional information regarding the user agent, like for example unique identifier or apple push id. * As an example, the contact address in the SIP register sent will look like ;apple-push-id=43143-DFE23F-2323-FA2232. **/ -LINPHONE_PUBLIC void linphone_proxy_config_set_contact_parameters(LinphoneProxyConfig *cfg, const char *contact_params); +LINPHONE_PUBLIC void linphone_proxy_config_set_contact_parameters(LinphoneProxyConfig *cfg, const char *contact_params); /** * Set optional contact parameters that will be added to the contact information sent in the registration, inside the URI. @@ -329,7 +343,7 @@ LINPHONE_PUBLIC LinphoneCore * linphone_proxy_config_get_core(const LinphoneProx * #linphone_core_invite ). * **/ -LINPHONE_PUBLIC bool_t linphone_proxy_config_get_dial_escape_plus(const LinphoneProxyConfig *cfg); +LINPHONE_PUBLIC bool_t linphone_proxy_config_get_dial_escape_plus(const LinphoneProxyConfig *cfg); /** * @return dialing prefix. @@ -357,7 +371,6 @@ LINPHONE_PUBLIC const LinphoneErrorInfo *linphone_proxy_config_get_error_info(co **/ LINPHONE_PUBLIC const char* linphone_proxy_config_get_transport(const LinphoneProxyConfig *cfg); - /** * Destroys a proxy config. * @deprecated @@ -390,8 +403,7 @@ LINPHONE_PUBLIC bool_t linphone_proxy_config_is_phone_number(LinphoneProxyConfig * @param result_len the size of the normalized number \a result * @return TRUE if a phone number was recognized, FALSE otherwise. */ -LINPHONE_PUBLIC bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const char *username, - char *result, size_t result_len); +LINPHONE_PUBLIC bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const char *username, char *result, size_t result_len); /** * Same objective as linphone_proxy_config_normalize_number but allocates a new string @@ -399,7 +411,7 @@ LINPHONE_PUBLIC bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfi * @param username the string to parse * @return NULL if invalid phone number, normalized phone number from username input otherwise. */ -LINPHONE_PUBLIC char* linphone_proxy_config_normalize_phone_number(LinphoneProxyConfig *proxy, const char *username); +LINPHONE_PUBLIC char* linphone_proxy_config_normalize_phone_number(LinphoneProxyConfig *proxy, const char *username); /** * Normalize a human readable sip uri into a fully qualified LinphoneAddress. @@ -414,7 +426,7 @@ LINPHONE_PUBLIC char* linphone_proxy_config_normalize_phone_number(LinphoneProxy * @param username the string to parse * @return NULL if invalid input, normalized sip address otherwise. */ -LINPHONE_PUBLIC LinphoneAddress* linphone_proxy_config_normalize_sip_uri(LinphoneProxyConfig *proxy, const char *username); +LINPHONE_PUBLIC LinphoneAddress* linphone_proxy_config_normalize_sip_uri(LinphoneProxyConfig *proxy, const char *username); /** * Set default privacy policy for all calls routed through this proxy. @@ -422,18 +434,21 @@ LINPHONE_PUBLIC LinphoneAddress* linphone_proxy_config_normalize_sip_uri(Linphon * @param privacy LinphonePrivacy to configure privacy * */ LINPHONE_PUBLIC void linphone_proxy_config_set_privacy(LinphoneProxyConfig *cfg, LinphonePrivacyMask privacy); + /** * Get default privacy policy for all calls routed through this proxy. * @param[in] cfg #LinphoneProxyConfig object. * @return Privacy mode * */ LINPHONE_PUBLIC LinphonePrivacyMask linphone_proxy_config_get_privacy(const LinphoneProxyConfig *cfg); + /** * Set the http file transfer server to be used for content type application/vnd.gsma.rcs-ft-http+xml * @param[in] cfg #LinphoneProxyConfig object. * @param server_url URL of the file server like https://file.linphone.org/upload.php * */ LINPHONE_PUBLIC void linphone_proxy_config_set_file_transfer_server(LinphoneProxyConfig *cfg, const char * server_url); + /** * Get the http file transfer server to be used for content type application/vnd.gsma.rcs-ft-http+xml * @param[in] cfg #LinphoneProxyConfig object. @@ -501,4 +516,8 @@ LINPHONE_PUBLIC const char *linphone_proxy_config_get_custom_header(LinphoneProx **/ LINPHONE_PUBLIC void linphone_proxy_config_set_custom_header(LinphoneProxyConfig *cfg, const char *header_name, const char *header_value); +/** + * @} + */ + #endif diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 8e1036a20..3385dd314 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -888,6 +888,7 @@ LINPHONE_PUBLIC bool_t linphone_call_echo_limiter_enabled(const LinphoneCall *ca * @addtogroup proxies * @{ **/ + /** * The LinphoneProxyConfig object represents a proxy configuration to be used * by the LinphoneCore object. @@ -923,6 +924,10 @@ typedef enum _LinphoneRegistrationState{ */ LINPHONE_PUBLIC const char *linphone_registration_state_to_string(LinphoneRegistrationState cs); +/** + * @} + */ + #include "linphone_proxy_config.h" struct _LinphoneAuthInfo; From 4aa12c4b6e092e330b155dc5a18bbc85d0d004ed Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Thu, 6 Aug 2015 12:57:48 +0200 Subject: [PATCH 045/134] One more fix for automatic wrapper generation. --- coreapi/linphonecore.h | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 3385dd314..7f3d7f5ee 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -2656,30 +2656,32 @@ LINPHONE_PUBLIC int linphone_core_get_payload_type_number(LinphoneCore *lc, cons **/ LINPHONE_PUBLIC void linphone_core_set_payload_type_number(LinphoneCore *lc, PayloadType *pt, int number); -LINPHONE_PUBLIC const char *linphone_core_get_payload_type_description(LinphoneCore *lc, PayloadType *pt); +LINPHONE_PUBLIC const char *linphone_core_get_payload_type_description(LinphoneCore *lc, PayloadType *pt); -LINPHONE_PUBLIC bool_t linphone_core_check_payload_type_usability(LinphoneCore *lc, const PayloadType *pt); +LINPHONE_PUBLIC bool_t linphone_core_check_payload_type_usability(LinphoneCore *lc, const PayloadType *pt); + +/** + * @addtogroup proxies + * @{ + */ /** * Create a proxy config with default values from Linphone core. * @param[in] lc #LinphoneCore object * @return #LinphoneProxyConfig with default values set - * @ingroup proxy */ -LINPHONE_PUBLIC LinphoneProxyConfig * linphone_core_create_proxy_config(LinphoneCore *lc); +LINPHONE_PUBLIC LinphoneProxyConfig * linphone_core_create_proxy_config(LinphoneCore *lc); /** * Add a proxy configuration. * This will start registration on the proxy, if registration is enabled. **/ -LINPHONE_PUBLIC int linphone_core_add_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config); +LINPHONE_PUBLIC int linphone_core_add_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config); /** * Erase all proxies from config. - * - * @ingroup proxy **/ -LINPHONE_PUBLIC void linphone_core_clear_proxy_config(LinphoneCore *lc); +LINPHONE_PUBLIC void linphone_core_clear_proxy_config(LinphoneCore *lc); /** * Removes a proxy configuration. @@ -2687,14 +2689,14 @@ LINPHONE_PUBLIC void linphone_core_clear_proxy_config(LinphoneCore *lc); * LinphoneCore will then automatically unregister and place the proxy configuration * on a deleted list. For that reason, a removed proxy does NOT need to be freed. **/ -LINPHONE_PUBLIC void linphone_core_remove_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config); +LINPHONE_PUBLIC void linphone_core_remove_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config); /** * Returns an unmodifiable list of entered proxy configurations. * @param[in] lc The LinphoneCore object * @return \mslist{LinphoneProxyConfig} **/ -LINPHONE_PUBLIC const MSList *linphone_core_get_proxy_config_list(const LinphoneCore *lc); +LINPHONE_PUBLIC const MSList *linphone_core_get_proxy_config_list(const LinphoneCore *lc); /** @deprecated Use linphone_core_set_default_proxy_config() instead. */ #define linphone_core_set_default_proxy(lc, config) linphone_core_set_default_proxy_config(lc, config) @@ -2705,7 +2707,7 @@ LINPHONE_PUBLIC void linphone_core_set_default_proxy_index(LinphoneCore *lc, int * @return the default proxy configuration, that is the one used to determine the current identity. * @deprecated Use linphone_core_get_default_proxy_config() instead. **/ -LINPHONE_PUBLIC int linphone_core_get_default_proxy(LinphoneCore *lc, LinphoneProxyConfig **config); +LINPHONE_PUBLIC int linphone_core_get_default_proxy(LinphoneCore *lc, LinphoneProxyConfig **config); /** * @return the default proxy configuration, that is the one used to determine the current identity. @@ -2725,6 +2727,10 @@ LINPHONE_PUBLIC LinphoneProxyConfig * linphone_core_get_default_proxy_config(Lin **/ LINPHONE_PUBLIC void linphone_core_set_default_proxy_config(LinphoneCore *lc, LinphoneProxyConfig *config); +/** + * @} + */ + /** * Create an authentication information with default values from Linphone core. * @param[in] lc #LinphoneCore object From 760b3bb755b7dab180fc516419015f9aa2d4fedd Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Thu, 6 Aug 2015 16:03:18 +0200 Subject: [PATCH 046/134] update ortp --- oRTP | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oRTP b/oRTP index 7383e9725..f67e17186 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit 7383e9725b5861a7cb65f0be62d0eb0af7c2ede9 +Subproject commit f67e171862419ade638d1abf0a609877febec1e9 From 750a692fa17baf7004e344acfb69b90e47468a72 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Thu, 6 Aug 2015 16:03:51 +0200 Subject: [PATCH 047/134] proxy.c: notify display status when registration is in progress so that when previous registration failed and user forces refreshing the proxy config, he gets notified of it --- coreapi/proxy.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/coreapi/proxy.c b/coreapi/proxy.c index 9d3bdc3d6..40ef6a0b0 100644 --- a/coreapi/proxy.c +++ b/coreapi/proxy.c @@ -1490,6 +1490,13 @@ void linphone_proxy_config_set_state(LinphoneProxyConfig *cfg, LinphoneRegistrat LinphoneCore *lc=cfg->lc; bool_t update_friends=FALSE; + if (state==LinphoneRegistrationProgress) { + char *msg=ortp_strdup_printf(_("Refreshing on %s..."), linphone_proxy_config_get_identity(cfg)); + linphone_core_notify_display_status(lc,msg); + ms_free(msg); + + } + if (cfg->state!=state || state==LinphoneRegistrationOk) { /*allow multiple notification of LinphoneRegistrationOk for refreshing*/ ms_message("Proxy config [%p] for identity [%s] moving from state [%s] to [%s]" , cfg, linphone_proxy_config_get_identity(cfg), From dcc650db2180e8910b9dea71f7fd8c8d34489f2c Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Thu, 6 Aug 2015 16:34:46 +0200 Subject: [PATCH 048/134] setupwizard.c: refresh the accounts list in settings when closing the assistant --- gtk/linphone.h | 1 + gtk/setupwizard.c | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gtk/linphone.h b/gtk/linphone.h index 90f9e81a7..0193a8510 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -308,6 +308,7 @@ LINPHONE_PUBLIC void linphone_gtk_video_preset_changed(GtkWidget *w); LINPHONE_PUBLIC void linphone_gtk_show_camera_preview_clicked(GtkButton *button); LINPHONE_PUBLIC void linphone_gtk_update_my_contact(GtkWidget *w); LINPHONE_PUBLIC void linphone_gtk_add_proxy(GtkButton *button); +LINPHONE_PUBLIC void linphone_gtk_show_sip_accounts(GtkWidget *w); LINPHONE_PUBLIC void linphone_gtk_edit_proxy(GtkButton *button); LINPHONE_PUBLIC void linphone_gtk_remove_proxy(GtkButton *button); LINPHONE_PUBLIC void linphone_gtk_clear_passwords(GtkWidget *button); diff --git a/gtk/setupwizard.c b/gtk/setupwizard.c index 5d393fbde..5c8d21ee9 100644 --- a/gtk/setupwizard.c +++ b/gtk/setupwizard.c @@ -21,7 +21,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include - static const int PASSWORD_MIN_SIZE = 6; static const int LOGIN_MIN_SIZE = 4; static GtkWidget *the_assistant = NULL; @@ -622,14 +621,23 @@ void linphone_gtk_show_assistant(GtkWidget *parent) { g_signal_connect(G_OBJECT(w), "close", (GCallback)linphone_gtk_assistant_closed, NULL); g_signal_connect(G_OBJECT(w), "cancel", (GCallback)linphone_gtk_assistant_closed, NULL); g_signal_connect(G_OBJECT(w), "prepare", (GCallback)linphone_gtk_assistant_prepare, NULL); - + gtk_window_set_transient_for(GTK_WINDOW(the_assistant), GTK_WINDOW(linphone_gtk_get_main_window())); gtk_widget_show(w); } void linphone_gtk_close_assistant(void) { - if (the_assistant == NULL) return; + GtkWidget *mw; + if (the_assistant == NULL) { + return; + } gtk_widget_destroy(the_assistant); the_assistant = NULL; + + //reload list of proxy configs because a new one was probably created... + mw=linphone_gtk_get_main_window(); + if (mw) { + linphone_gtk_show_sip_accounts((GtkWidget*)g_object_get_data(G_OBJECT(mw),"parameters")); + } } From 06f2556e5ad70e35b7df4f0c3265dd55503fdd3b Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Thu, 6 Aug 2015 17:25:49 +0200 Subject: [PATCH 049/134] setupwizard.c: fix previous commit (verify that settings window is opened first) and smooth regex concerning email/username on account creation/login --- gtk/setupwizard.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/gtk/setupwizard.c b/gtk/setupwizard.c index 5c8d21ee9..c7cd6a195 100644 --- a/gtk/setupwizard.c +++ b/gtk/setupwizard.c @@ -189,8 +189,8 @@ static int external_account_configuration_complete(GtkWidget *w) { if ((gtk_entry_get_text_length(username) > 0) && (gtk_entry_get_text_length(domain) > 0) - && (g_regex_match_simple("^[a-zA-Z0-9]+[a-zA-Z0-9.\\-_]{2,}$", gtk_entry_get_text(username), 0, 0)) - && (g_regex_match_simple("^(sip:)?([a-zA-Z0-9]+([\\.-][a-zA-Z0-9]+)*)$", gtk_entry_get_text(domain), 0, 0))) { + && (g_regex_match_simple("^[a-zA-Z0-9+]+[a-zA-Z0-9.\\+\\-_]{2,}$", gtk_entry_get_text(username), 0, 0)) + && (g_regex_match_simple("^(sip:)?([a-zA-Z0-9\\+]+([\\.-][a-zA-Z0-9+]+)*)$", gtk_entry_get_text(domain), 0, 0))) { return 1; } return 0; @@ -315,7 +315,7 @@ static gboolean update_interface_with_username_availability(void *w) { gtk_label_set_text(usernameError, ""); } else { GdkPixbuf *nok_pixbuf = GDK_PIXBUF(g_object_get_data(G_OBJECT(the_assistant), "nok_pixbuf")); - gtk_label_set_text(usernameError, "Username is already in use !"); + gtk_label_set_text(usernameError, "Username is already in use!"); g_object_set_data(G_OBJECT(w), "is_username_available", GINT_TO_POINTER(0)); gtk_image_set_from_pixbuf(isUsernameOk, nok_pixbuf); } @@ -326,7 +326,7 @@ static gboolean update_interface_with_username_availability(void *w) { static void linphone_gtk_test_account_existence_cb(LinphoneAccountCreator *creator, LinphoneAccountCreatorStatus status) { GtkWidget *assistant = (GtkWidget *)linphone_account_creator_get_user_data(creator); GtkWidget *page = g_object_get_data(G_OBJECT(assistant), "linphone_account_creation_configuration"); - int account_existing = (status == LinphoneAccountCreatorOk) ? 0 : 1; + int account_existing = (status != LinphoneAccountCreatorOk); g_object_set_data(G_OBJECT(page), "is_username_used", GINT_TO_POINTER(account_existing)); gdk_threads_add_idle((GSourceFunc)update_interface_with_username_availability, (void*)page); } @@ -375,7 +375,7 @@ static void linphone_account_creation_email_changed(GtkEntry *entry, GtkWidget * GtkImage* isEmailOk = GTK_IMAGE(g_object_get_data(G_OBJECT(w), "emailOk")); GtkWidget *assistant = gtk_widget_get_toplevel(w); - if (g_regex_match_simple("^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}$", gtk_entry_get_text(email), 0, 0)) { + if (g_regex_match_simple("^[a-z0-9]([a-z0-9_\\+\\.-]+)@[a-z0-9]([a-z0-9\\.-]+)\\.[a-z]{2,}$", gtk_entry_get_text(email), 0, 0)) { GdkPixbuf *ok_pixbuf = GDK_PIXBUF(g_object_get_data(G_OBJECT(the_assistant), "ok_pixbuf")); g_object_set_data(G_OBJECT(w), "is_email_correct", GINT_TO_POINTER(1)); gtk_image_set_from_pixbuf(isEmailOk, ok_pixbuf); @@ -638,6 +638,9 @@ void linphone_gtk_close_assistant(void) { //reload list of proxy configs because a new one was probably created... mw=linphone_gtk_get_main_window(); if (mw) { - linphone_gtk_show_sip_accounts((GtkWidget*)g_object_get_data(G_OBJECT(mw),"parameters")); + GtkWidget* pb = (GtkWidget*)g_object_get_data(G_OBJECT(mw),"parameters"); + if (pb) { + linphone_gtk_show_sip_accounts(pb); + } } } From 1bd418922dfb1c52cff2373d3ed346451374742a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Thu, 6 Aug 2015 21:35:58 +0200 Subject: [PATCH 050/134] Move glade description of the in-call view and the conference view into independent files --- gtk/CMakeLists.txt | 3 + gtk/Makefile.am | 5 +- gtk/chat.c | 2 +- gtk/conf_callee_view.ui | 89 ++++++ gtk/conf_view.ui | 91 ++++++ gtk/conference.c | 6 +- gtk/in_call_view.ui | 431 +++++++++++++++++++++++++++++ gtk/incall_view.c | 2 +- gtk/linphone.h | 1 - gtk/main.c | 34 +-- gtk/main.ui | 596 ---------------------------------------- 11 files changed, 625 insertions(+), 635 deletions(-) create mode 100644 gtk/conf_callee_view.ui create mode 100644 gtk/conf_view.ui create mode 100644 gtk/in_call_view.ui diff --git a/gtk/CMakeLists.txt b/gtk/CMakeLists.txt index 7f54cff59..fb496386d 100644 --- a/gtk/CMakeLists.txt +++ b/gtk/CMakeLists.txt @@ -40,6 +40,9 @@ set(UI_FILES tunnel_config.ui waiting.ui chat_view.ui + in_call_view.ui + conf_view.ui + conf_callee_view.ui ) set(PIXMAPS stock_people.png) diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 1103168aa..156e63aee 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -16,7 +16,10 @@ UI_FILES= about.ui \ config-uri.ui \ provisioning-fetch.ui \ audio_assistant.ui \ - chat_view.ui + chat_view.ui \ + in_call_view.ui \ + conf_view.ui \ + conf_callee_view.ui PIXMAPS= \ stock_people.png diff --git a/gtk/chat.c b/gtk/chat.c index 4b447e446..4a88b810a 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -481,7 +481,7 @@ static gboolean copy_uri_into_clipboard_handler(GtkMenuItem *menuitem, gpointer } GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddress *with){ - GtkWidget *chat_view=linphone_gtk_create_widget_2("chat_view","chatroom_frame"); + GtkWidget *chat_view=linphone_gtk_create_widget("chat_view","chatroom_frame"); GtkWidget *main_window=linphone_gtk_get_main_window(); GtkNotebook *notebook=(GtkNotebook *)linphone_gtk_get_widget(main_window,"viewswitch"); GtkWidget *text=linphone_gtk_get_widget(chat_view,"textview"); diff --git a/gtk/conf_callee_view.ui b/gtk/conf_callee_view.ui new file mode 100644 index 000000000..4de3ca08c --- /dev/null +++ b/gtk/conf_callee_view.ui @@ -0,0 +1,89 @@ + + + + + + False + + + True + False + 0 + none + + + True + False + 12 + + + True + False + 12 + + + True + False + + + True + False + + + True + True + + + False + False + 0 + + + + + False + True + 0 + + + + + True + False + <b>Callee name</b> + True + right + end + + + True + True + 1 + + + + + 90 + 30 + True + False + + + False + True + 2 + + + + + + + + + + + + + + + diff --git a/gtk/conf_view.ui b/gtk/conf_view.ui new file mode 100644 index 000000000..194a94d1e --- /dev/null +++ b/gtk/conf_view.ui @@ -0,0 +1,91 @@ + + + + + + False + + + True + False + 0 + none + + + True + False + + + True + False + + + End conference + True + True + True + + + False + False + end + 0 + + + + + True + True + end + 0 + + + + + True + False + + + gtk-media-record + True + True + True + True + + + + False + False + 0 + + + + + True + False + True + char + + + True + True + 1 + + + + + False + False + end + 1 + + + + + + + + + + + diff --git a/gtk/conference.c b/gtk/conference.c index 1bfee3afc..c0b292b51 100644 --- a/gtk/conference.c +++ b/gtk/conference.c @@ -81,7 +81,7 @@ static GtkWidget *find_conferencee_from_call(LinphoneCall *call){ static GtkWidget * create_conference_panel(void){ GtkWidget *mw=linphone_gtk_get_main_window(); - GtkWidget *conf_frame=linphone_gtk_create_widget("main","conf_frame"); + GtkWidget *conf_frame=linphone_gtk_create_widget("conf_view","conf_frame"); GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box"); GtkWidget *button_conf=linphone_gtk_get_widget(conf_frame,"terminate_conf"); GtkWidget *image=create_pixmap("stopcall-small.png"); @@ -94,7 +94,7 @@ static GtkWidget * create_conference_panel(void){ g_object_set_data(G_OBJECT(mw),"conf_frame",(gpointer)conf_frame); box=gtk_vbox_new(FALSE,0); - participant=linphone_gtk_create_widget("main","callee_frame"); + participant=linphone_gtk_create_widget("conf_callee_view","callee_frame"); gtk_widget_show(participant); gtk_box_set_homogeneous(GTK_BOX(box),TRUE); init_local_participant(participant); @@ -126,7 +126,7 @@ void linphone_gtk_set_in_conference(LinphoneCall *call){ const LinphoneAddress *addr=linphone_call_get_remote_address(call); gchar *markup; - participant=linphone_gtk_create_widget("main","callee_frame"); + participant=linphone_gtk_create_widget("conf_callee_view","callee_frame"); gtk_widget_show(participant); if (linphone_address_get_display_name(addr)!=NULL){ markup=g_strdup_printf("%s",linphone_address_get_display_name(addr)); diff --git a/gtk/in_call_view.ui b/gtk/in_call_view.ui new file mode 100644 index 000000000..4fd1c0045 --- /dev/null +++ b/gtk/in_call_view.ui @@ -0,0 +1,431 @@ + + + + + + False + + + False + cursor + 0.5 + none + + + True + False + 12 + 12 + + + True + False + + + True + False + center + + + True + True + 0 + + + + + True + False + + + + + + False + False + 1 + + + + + False + + + True + False + gtk-dialog-authentication + 1 + + + False + False + 0 + + + + + True + False + gtk-apply + + + False + False + 1 + + + + + True + False + + + True + True + 2 + 2 + + + + + Set verified + True + True + True + + + + False + False + 3 + + + + + False + True + 2 + + + + + True + False + + + True + False + + + True + True + True + True + none + False + vertical + linphone-micro-enabled + + + False + False + 5 + 0 + + + + + True + False + + + False + False + 5 + 1 + + + + + True + False + 10 + 0 + + + + + True + False + + + True + True + True + True + Click here to set the speakers volume + none + False + vertical + linphone-speaker-enabled + + + False + False + 5 + 0 + + + + + True + False + + + False + False + 5 + 1 + + + + + True + False + 10 + 1 + + + + + False + False + 5 + 3 + + + + + False + spread + + + Answer + True + True + True + + + + False + False + 0 + + + + + Decline + True + True + True + + + + False + False + 1 + + + + + False + False + 4 + + + + + False + + + gtk-media-record + True + True + True + Record this call to an audio file + True + + + + False + False + 0 + + + + + True + False + True + char + + + True + True + 1 + + + + + False + False + 5 + + + + + True + False + 2 + 3 + True + + + Video + True + True + True + + + + + Pause + True + True + True + + + + 1 + 2 + + + + + Mute + True + True + True + + + + 2 + 3 + + + + + Transfer + True + True + True + + + 1 + 2 + + + + + Hang up + True + True + True + + + + 1 + 2 + 1 + 2 + + + + + Conference + True + True + True + + + 2 + 3 + 1 + 2 + + + + + False + False + 7 + 6 + + + + + + + + + True + False + True + + + True + False + In call + True + center + + + True + True + 0 + + + + + True + False + Duration + center + + + True + True + 1 + + + + + 90 + 10 + True + False + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK + Call quality rating + + + False + False + 2 + + + + + + + + diff --git a/gtk/incall_view.c b/gtk/incall_view.c index db056fdc8..ed9e17d14 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -361,7 +361,7 @@ void linphone_gtk_enable_video_button(LinphoneCall *call, gboolean sensitive, gb } void linphone_gtk_create_in_call_view(LinphoneCall *call){ - GtkWidget *call_view=linphone_gtk_create_widget("main","in_call_frame"); + GtkWidget *call_view=linphone_gtk_create_widget("in_call_view","in_call_frame"); GtkWidget *main_window=linphone_gtk_get_main_window (); GtkNotebook *notebook=(GtkNotebook *)linphone_gtk_get_widget(main_window,"viewswitch"); static int call_index=1; diff --git a/gtk/linphone.h b/gtk/linphone.h index 0193a8510..77636ca3a 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -99,7 +99,6 @@ LINPHONE_PUBLIC void linphone_gtk_destroy_window(GtkWidget *window); LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_window(const char *window_name, GtkWidget *parent); LINPHONE_PUBLIC GtkWidget *linphone_gtk_get_widget(GtkWidget *window, const char *name); LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_widget(const char *filename, const char *widget_name); -LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_widget_2(const char *filename, const char *widget_name); const char *linphone_gtk_message_storage_get_db_file(const char *filename); LINPHONE_PUBLIC void linphone_gtk_show_assistant(GtkWidget* parent); diff --git a/gtk/main.c b/gtk/main.c index 18d01d95b..822f0f5f1 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -410,38 +410,7 @@ GtkWidget *linphone_gtk_create_window(const char *window_name, GtkWidget *parent return w; } -GtkWidget *linphone_gtk_create_widget(const char *filename, const char *widget_name){ - char path[2048]; - GtkWidget *w; - GtkBuilder* builder = gtk_builder_new (); - GError *error=NULL; - gchar *object_ids[2]; - object_ids[0]=g_strdup(widget_name); - object_ids[1]=NULL; - - if (get_ui_file(filename,path,sizeof(path))==-1) return NULL; - - gtk_builder_set_translation_domain(builder,GETTEXT_PACKAGE); - - if (!gtk_builder_add_objects_from_file(builder,path,object_ids,&error)){ - g_error("Couldn't load %s from builder file %s: %s", widget_name,path,error->message); - g_error_free (error); - g_free(object_ids[0]); - return NULL; - } - g_free(object_ids[0]); - w=GTK_WIDGET(gtk_builder_get_object (builder,widget_name)); - if (w==NULL){ - g_error("Could not retrieve '%s' window from xml file",widget_name); - return NULL; - } - g_object_set_data(G_OBJECT(w),"builder",builder); - g_signal_connect_swapped(G_OBJECT(w),"destroy",(GCallback)g_object_unref,builder); - gtk_builder_connect_signals(builder,w); - return w; -} - -GtkWidget *linphone_gtk_create_widget_2(const char *filename, const char *widget_name) { +GtkWidget *linphone_gtk_create_widget(const char *filename, const char *widget_name) { char path[2048]; GtkWidget *w = NULL; GtkBuilder *builder = gtk_builder_new(); @@ -467,6 +436,7 @@ GtkWidget *linphone_gtk_create_widget_2(const char *filename, const char *widget w = GTK_WIDGET(obj); g_object_set_data_full(obj, "builder", builder, g_object_unref); gtk_widget_unparent(w); + gtk_builder_connect_signals(builder, w); end: diff --git a/gtk/main.ui b/gtk/main.ui index 3f9d7fbe5..698fe2bf8 100644 --- a/gtk/main.ui +++ b/gtk/main.ui @@ -13,602 +13,6 @@ False gtk-connect - - False - - - True - False - 0 - none - - - True - False - 12 - - - True - False - 12 - - - True - False - - - True - False - - - True - True - - - False - False - 0 - - - - - False - True - 0 - - - - - True - False - <b>Callee name</b> - True - right - end - - - True - True - 1 - - - - - 90 - 30 - True - False - - - False - True - 2 - - - - - - - - - - - - - - - - False - - - True - False - 0 - none - - - True - False - - - True - False - - - End conference - True - True - True - - - False - False - end - 0 - - - - - True - True - end - 0 - - - - - True - False - - - gtk-media-record - True - True - True - True - - - - False - False - 0 - - - - - True - False - True - char - - - True - True - 1 - - - - - False - False - end - 1 - - - - - - - - - - - - False - - - False - cursor - 0.5 - none - - - True - False - 12 - 12 - - - True - False - - - True - False - center - - - True - True - 0 - - - - - True - False - - - - - - False - False - 1 - - - - - False - - - True - False - gtk-dialog-authentication - 1 - - - False - False - 0 - - - - - True - False - gtk-apply - - - False - False - 1 - - - - - True - False - - - True - True - 2 - 2 - - - - - Set verified - True - True - True - - - - False - False - 3 - - - - - False - True - 2 - - - - - True - False - - - True - False - - - True - True - True - True - none - False - vertical - linphone-micro-enabled - - - False - False - 5 - 0 - - - - - True - False - - - False - False - 5 - 1 - - - - - True - False - 10 - 0 - - - - - True - False - - - True - True - True - True - Click here to set the speakers volume - none - False - vertical - linphone-speaker-enabled - - - False - False - 5 - 0 - - - - - True - False - - - False - False - 5 - 1 - - - - - True - False - 10 - 1 - - - - - False - False - 5 - 3 - - - - - False - spread - - - Answer - True - True - True - - - - False - False - 0 - - - - - Decline - True - True - True - - - - False - False - 1 - - - - - False - False - 4 - - - - - False - - - gtk-media-record - True - True - True - Record this call to an audio file - True - - - - False - False - 0 - - - - - True - False - True - char - - - True - True - 1 - - - - - False - False - 5 - - - - - True - False - 2 - 3 - True - - - Video - True - True - True - - - - - Pause - True - True - True - - - - 1 - 2 - - - - - Mute - True - True - True - - - - 2 - 3 - - - - - Transfer - True - True - True - - - 1 - 2 - - - - - Hang up - True - True - True - - - - 1 - 2 - 1 - 2 - - - - - Conference - True - True - True - - - 2 - 3 - 1 - 2 - - - - - False - False - 7 - 6 - - - - - - - - - True - False - True - - - True - False - In call - True - center - - - True - True - 0 - - - - - True - False - Duration - center - - - True - True - 1 - - - - - 90 - 10 - True - False - GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK - Call quality rating - - - False - False - 2 - - - - - - - True False From 37166415a7398773c7e6d22e0995fec05dc61707 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Fri, 7 Aug 2015 11:15:53 +0200 Subject: [PATCH 051/134] Add freshly added UI files in POTFILES.in --- gtk/Makefile.am | 15 +++++++-------- po/POTFILES.in | 3 +++ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 156e63aee..3ee1a1bf8 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -27,13 +27,12 @@ PIXMAPS= \ LINPHONE_ICO_RC_FILE=linphone.rc LINPHONE_ICO_FILE=linphone.ico -EXTRA_DIST= $(PIXMAPS) \ - $(UI_FILES) \ - linphone.iss \ - $(LINPHONE_ICO_RC_FILE) \ - $(LINPHONE_ICO_FILE) - gtkrc \ - gtkrc.mac +EXTRA_DIST= \ + linphone.iss \ + $(LINPHONE_ICO_RC_FILE) \ + $(LINPHONE_ICO_FILE) + gtkrc \ + gtkrc.mac if BUILD_GTK_UI @@ -89,7 +88,7 @@ linphone_LDFLAGS=-export-dynamic endif uidir=$(datadir)/linphone -ui_DATA=$(UI_FILES) $(PIXMAPS) $(top_srcdir)/COPYING +dist_ui_DATA=$(UI_FILES) $(PIXMAPS) $(top_srcdir)/COPYING endif diff --git a/po/POTFILES.in b/po/POTFILES.in index 6c37f4bbe..150dd4748 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -14,6 +14,9 @@ gtk/incall_view.c gtk/loginframe.c gtk/config-fetching.c gtk/audio_assistant.c +gtk/conf_callee_view.ui +gtk/conf_view.ui +gtk/in_call_view.ui [type: gettext/glade]gtk/main.ui [type: gettext/glade]gtk/about.ui [type: gettext/glade]gtk/contact.ui From 97a492087653523c8389c6547aa43a5f3312d8f1 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Fri, 7 Aug 2015 10:55:13 +0200 Subject: [PATCH 052/134] Fix some Python unit test code regarding changes that have been done for the proxy configs. --- tools/python/unittests/linphonetester.py | 20 +++++++++----------- tools/python/unittests/test_register.py | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/tools/python/unittests/linphonetester.py b/tools/python/unittests/linphonetester.py index 366f22a82..53149e5a1 100644 --- a/tools/python/unittests/linphonetester.py +++ b/tools/python/unittests/linphonetester.py @@ -105,15 +105,14 @@ class AccountManager: def check_account(self, cfg): create_account = False lc = cfg.core - identity = cfg.identity - id_addr = linphone.Address.new(identity) + id_addr = cfg.identity_address account = self._get_account(id_addr) if account is None: - linphonetester_logger.info("[TESTER] No account for {identity} exists, going to create one.".format(identity=identity)) + linphonetester_logger.info("[TESTER] No account for {identity} exists, going to create one.".format(identity=id_addr.as_string())) account = Account(id_addr, self.unique_id) self.accounts.append(account) create_account = True - cfg.identity = account.modified_identity.as_string() + cfg.identity_address = account.modified_identity if create_account: self._create_account_on_server(account, cfg) ai = linphone.AuthInfo.new(account.modified_identity.username, None, account.password, None, None, account.modified_identity.domain) @@ -136,7 +135,7 @@ class AccountManager: cfg = lc.create_proxy_config() tmp_identity.password = account.password tmp_identity.set_header("X-Create-Account", "yes") - cfg.identity = tmp_identity.as_string() + cfg.identity_address = tmp_identity server_addr = linphone.Address.new(refcfg.server_addr) server_addr.transport = linphone.TransportType.Tcp; server_addr.port = 0 @@ -144,15 +143,15 @@ class AccountManager: cfg.expires = 3600 lc.add_proxy_config(cfg) if AccountManager.wait_for_until(lc, None, lambda lc: lc.user_data().auth_requested == True, 10000) != True: - linphonetester_logger.critical("[TESTER] Account for {identity} could not be created on server.".format(identity=refcfg.identity)) + linphonetester_logger.critical("[TESTER] Account for {identity} could not be created on server.".format(identity=refcfg.identity_address.as_string())) sys.exit(-1) cfg.edit() - cfg.identity = account.modified_identity.as_string() + cfg.identity = account.modified_identity cfg.done() ai = linphone.AuthInfo.new(account.modified_identity.username, None, account.password, None, None, account.modified_identity.domain) lc.add_auth_info(ai) if AccountManager.wait_for_until(lc, None, lambda lc: lc.user_data().created == True, 3000) != True: - linphonetester_logger.critical("[TESTER] Account for {identity} is not working on server.".format(identity=refcfg.identity)) + linphonetester_logger.critical("[TESTER] Account for {identity} is not working on server.".format(identity=refcfg.identity_address.as_string())) sys.exit(-1) lc.remove_proxy_config(cfg) if AccountManager.wait_for_until(lc, None, lambda lc: lc.user_data().done == True, 3000) != True: @@ -392,7 +391,7 @@ class CoreManager: def registration_state_changed(cls, lc, cfg, state, message): manager = lc.user_data() linphonetester_logger.info("[TESTER] New registration state {state} for user id [{identity}] at proxy [{addr}]".format( - state=linphone.RegistrationState.string(state), identity=cfg.identity, addr=cfg.server_addr)) + state=linphone.RegistrationState.string(state), identity=cfg.identity_address.as_string(), addr=cfg.server_addr)) if state == linphone.RegistrationState.None: manager.stats.number_of_LinphoneRegistrationNone += 1 elif state == linphone.RegistrationState.Progress: @@ -598,8 +597,7 @@ class CoreManager: self.enable_audio_codec("PCMU", 8000) if self.lc.default_proxy_config is not None: - self.identity = linphone.Address.new(self.lc.default_proxy_config.identity) - self.identity.clean() + self.lc.default_proxy_config.identity_address.clean() def enable_audio_codec(self, mime, rate): codecs = self.lc.audio_codecs diff --git a/tools/python/unittests/test_register.py b/tools/python/unittests/test_register.py index 0ce9bdf2f..a136c8a79 100644 --- a/tools/python/unittests/test_register.py +++ b/tools/python/unittests/test_register.py @@ -24,7 +24,7 @@ class RegisterCoreManager(CoreManager): self.lc.sip_transports = transport proxy_cfg = self.lc.create_proxy_config() from_address = create_address(domain) - proxy_cfg.identity = from_address.as_string() + proxy_cfg.identity_address = from_address server_addr = from_address.domain proxy_cfg.register_enabled = True proxy_cfg.expires = 1 From a8e9ae7e80e76484f550f00bf776002c8382c47e Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Fri, 7 Aug 2015 13:21:35 +0200 Subject: [PATCH 053/134] One more Python fix. --- tools/python/unittests/linphonetester.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/python/unittests/linphonetester.py b/tools/python/unittests/linphonetester.py index 53149e5a1..7fb8db5d2 100644 --- a/tools/python/unittests/linphonetester.py +++ b/tools/python/unittests/linphonetester.py @@ -146,7 +146,7 @@ class AccountManager: linphonetester_logger.critical("[TESTER] Account for {identity} could not be created on server.".format(identity=refcfg.identity_address.as_string())) sys.exit(-1) cfg.edit() - cfg.identity = account.modified_identity + cfg.identity_address = account.modified_identity cfg.done() ai = linphone.AuthInfo.new(account.modified_identity.username, None, account.password, None, None, account.modified_identity.domain) lc.add_auth_info(ai) From 75f2ce063218ecade6515c747d0d51987185dc00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Fri, 7 Aug 2015 15:43:34 +0200 Subject: [PATCH 054/134] GTK: automatically select the default proxy config in the settings panel --- gtk/propertybox.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gtk/propertybox.c b/gtk/propertybox.c index fb87162af..4b181d9fd 100644 --- a/gtk/propertybox.c +++ b/gtk/propertybox.c @@ -885,6 +885,9 @@ void linphone_gtk_show_sip_accounts(GtkWidget *w){ GtkTreeModel *model=gtk_tree_view_get_model(v); GtkListStore *store; GtkTreeSelection *select; + const LinphoneProxyConfig *default_pc = linphone_core_get_default_proxy_config(linphone_gtk_get_core()); + GtkTreePath *default_pc_path = NULL; + const MSList *elem; if (!model){ GtkCellRenderer *renderer; @@ -914,6 +917,11 @@ void linphone_gtk_show_sip_accounts(GtkWidget *w){ gtk_list_store_append(store,&iter); gtk_list_store_set(store,&iter,PROXY_CONFIG_IDENTITY,linphone_proxy_config_get_identity(cfg), PROXY_CONFIG_REF,cfg,-1); + if(cfg == default_pc) default_pc_path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter); + } + if(default_pc_path) { + gtk_tree_selection_select_path(gtk_tree_view_get_selection(v), default_pc_path); + gtk_tree_path_free(default_pc_path); } } From aad1cc0715349b777b62bfec997f46d71a7f10d5 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sun, 9 Aug 2015 17:22:15 +0200 Subject: [PATCH 055/134] robustize tests --- tester/Makefile.am | 4 +++- tester/offeranswer_tester.c | 17 +++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/tester/Makefile.am b/tester/Makefile.am index 8c489b96e..c3c3552b1 100644 --- a/tester/Makefile.am +++ b/tester/Makefile.am @@ -42,7 +42,9 @@ liblinphonetester_la_LDFLAGS= -no-undefined liblinphonetester_la_LIBADD= ../coreapi/liblinphone.la $(CUNIT_LIBS) AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/coreapi -I$(top_srcdir)/tester/common -AM_CFLAGS = -DBC_CONFIG_FILE=\"config.h\" $(STRICT_OPTIONS) $(STRICT_OPTIONS_CC) -DIN_LINPHONE $(ORTP_CFLAGS) $(MEDIASTREAMER_CFLAGS) $(CUNIT_CFLAGS) $(BELLESIP_CFLAGS) $(LIBXML2_CFLAGS) $(SQLITE3_CFLAGS) +AM_CFLAGS = -DBC_CONFIG_FILE=\"config.h\" $(STRICT_OPTIONS) $(STRICT_OPTIONS_CC) \ + -DIN_LINPHONE $(ORTP_CFLAGS) $(MEDIASTREAMER_CFLAGS) $(CUNIT_CFLAGS) \ + $(BELLESIP_CFLAGS) $(LIBXML2_CFLAGS) $(SQLITE3_CFLAGS) if BUILD_GTK_UI diff --git a/tester/offeranswer_tester.c b/tester/offeranswer_tester.c index 923635108..b433bda5c 100644 --- a/tester/offeranswer_tester.c +++ b/tester/offeranswer_tester.c @@ -343,19 +343,20 @@ static void compatible_avpf_features(void) { LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_tcp_rc"); LinphonePayloadType *lpt; + bool_t call_ok; if (configure_core_for_avpf_and_video(marie->lc) == NULL) goto end; lpt = configure_core_for_avpf_and_video(pauline->lc); - BC_ASSERT_TRUE(call(marie, pauline)); + BC_ASSERT_TRUE((call_ok=call(marie, pauline))); + if (!call_ok) goto end; + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 1)); BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1)); check_avpf_features(marie->lc, lpt->avpf.features); check_avpf_features(pauline->lc, lpt->avpf.features); - linphone_core_terminate_all_calls(marie->lc); - BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); - BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); + end_call(marie,pauline); end: linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(marie); @@ -365,20 +366,20 @@ static void incompatible_avpf_features(void) { LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_tcp_rc"); LinphonePayloadType *lpt; + bool_t call_ok; if (configure_core_for_avpf_and_video(marie->lc) == NULL) goto end; lpt = configure_core_for_avpf_and_video(pauline->lc); lpt->avpf.features = PAYLOAD_TYPE_AVPF_NONE; - BC_ASSERT_TRUE(call(marie, pauline)); + BC_ASSERT_TRUE(call_ok=call(marie, pauline)); + if (!call_ok) goto end; BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 1)); BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1)); check_avpf_features(marie->lc, PAYLOAD_TYPE_AVPF_NONE); check_avpf_features(pauline->lc, PAYLOAD_TYPE_AVPF_NONE); - linphone_core_terminate_all_calls(marie->lc); - BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); - BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); + end_call(marie,pauline); end: linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(marie); From 55c25fac4f651fe749f2fd4009bbf1a9ac1a6e94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Sun, 9 Aug 2015 21:59:56 +0200 Subject: [PATCH 056/134] Describes the login frame in a separated UI file --- gtk/.directory | 4 + gtk/CMakeLists.txt | 9 +- gtk/Makefile.am | 9 +- gtk/callee_frame.ui | 84 +++ gtk/chat.c | 2 +- gtk/chat_view.ui | 118 ---- gtk/chatroom_frame.ui | 113 ++++ gtk/conf_callee_view.ui | 89 --- gtk/conf_frame.ui | 86 +++ gtk/conf_view.ui | 91 --- gtk/conference.c | 6 +- gtk/in_call_frame.ui | 426 ++++++++++++++ gtk/in_call_view.ui | 431 -------------- gtk/incall_view.c | 2 +- gtk/linphone.h | 4 +- gtk/login_frame.ui | 250 ++++++++ gtk/loginframe.c | 104 ++-- gtk/main.c | 67 +-- gtk/main.ui | 1232 ++++++++++++++++----------------------- po/POTFILES.in | 9 +- 20 files changed, 1562 insertions(+), 1574 deletions(-) create mode 100644 gtk/.directory create mode 100644 gtk/callee_frame.ui delete mode 100644 gtk/chat_view.ui create mode 100644 gtk/chatroom_frame.ui delete mode 100644 gtk/conf_callee_view.ui create mode 100644 gtk/conf_frame.ui delete mode 100644 gtk/conf_view.ui create mode 100644 gtk/in_call_frame.ui delete mode 100644 gtk/in_call_view.ui create mode 100644 gtk/login_frame.ui diff --git a/gtk/.directory b/gtk/.directory new file mode 100644 index 000000000..40f7ba528 --- /dev/null +++ b/gtk/.directory @@ -0,0 +1,4 @@ +[Dolphin] +Timestamp=2015,8,9,21,25,40 +Version=3 +ViewMode=2 diff --git a/gtk/CMakeLists.txt b/gtk/CMakeLists.txt index fb496386d..9808e441a 100644 --- a/gtk/CMakeLists.txt +++ b/gtk/CMakeLists.txt @@ -39,10 +39,11 @@ set(UI_FILES sip_account.ui tunnel_config.ui waiting.ui - chat_view.ui - in_call_view.ui - conf_view.ui - conf_callee_view.ui + chatroom_frame.ui + in_call_frame.ui + conf_frame.ui + callee_frame.ui + login_frame.ui ) set(PIXMAPS stock_people.png) diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 3ee1a1bf8..086d51d61 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -16,10 +16,11 @@ UI_FILES= about.ui \ config-uri.ui \ provisioning-fetch.ui \ audio_assistant.ui \ - chat_view.ui \ - in_call_view.ui \ - conf_view.ui \ - conf_callee_view.ui + chatroom_frame.ui \ + in_call_frame.ui \ + conf_frame.ui \ + callee_frame.ui \ + login_frame.ui PIXMAPS= \ stock_people.png diff --git a/gtk/callee_frame.ui b/gtk/callee_frame.ui new file mode 100644 index 000000000..4ae4d90ef --- /dev/null +++ b/gtk/callee_frame.ui @@ -0,0 +1,84 @@ + + + + + + True + False + 0 + none + + + True + False + 12 + + + True + False + 12 + + + True + False + + + True + False + + + True + True + + + False + False + 0 + + + + + False + True + 0 + + + + + True + False + <b>Callee name</b> + True + right + end + + + True + True + 1 + + + + + 90 + 30 + True + False + + + False + True + 2 + + + + + + + + + + + + + diff --git a/gtk/chat.c b/gtk/chat.c index 4a88b810a..3b21d4a35 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -481,7 +481,7 @@ static gboolean copy_uri_into_clipboard_handler(GtkMenuItem *menuitem, gpointer } GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddress *with){ - GtkWidget *chat_view=linphone_gtk_create_widget("chat_view","chatroom_frame"); + GtkWidget *chat_view=linphone_gtk_create_widget("chatroom_frame"); GtkWidget *main_window=linphone_gtk_get_main_window(); GtkNotebook *notebook=(GtkNotebook *)linphone_gtk_get_widget(main_window,"viewswitch"); GtkWidget *text=linphone_gtk_get_widget(chat_view,"textview"); diff --git a/gtk/chat_view.ui b/gtk/chat_view.ui deleted file mode 100644 index b9f1e2213..000000000 --- a/gtk/chat_view.ui +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - False - - - True - False - 0 - none - - - True - False - - - True - True - never - - - True - True - 4 - False - word-char - False - - - - - True - True - 0 - - - - - True - False - - - True - True - - True - False - False - True - True - - - True - True - 0 - - - - - True - True - True - - - True - False - - - True - False - gtk-ok - - - True - True - 0 - - - - - True - False - Send - - - True - True - 7 - 1 - - - - - - - False - False - 1 - - - - - False - False - 1 - - - - - - - - - - - diff --git a/gtk/chatroom_frame.ui b/gtk/chatroom_frame.ui new file mode 100644 index 000000000..8d3b46c4a --- /dev/null +++ b/gtk/chatroom_frame.ui @@ -0,0 +1,113 @@ + + + + + + True + False + 0 + none + + + True + False + + + True + True + never + + + True + True + 4 + False + word-char + False + + + + + True + True + 0 + + + + + True + False + + + True + True + + True + False + False + True + True + + + True + True + 0 + + + + + True + True + True + + + True + False + + + True + False + gtk-ok + + + True + True + 0 + + + + + True + False + Send + + + True + True + 7 + 1 + + + + + + + False + False + 1 + + + + + False + False + 1 + + + + + + + + + diff --git a/gtk/conf_callee_view.ui b/gtk/conf_callee_view.ui deleted file mode 100644 index 4de3ca08c..000000000 --- a/gtk/conf_callee_view.ui +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - False - - - True - False - 0 - none - - - True - False - 12 - - - True - False - 12 - - - True - False - - - True - False - - - True - True - - - False - False - 0 - - - - - False - True - 0 - - - - - True - False - <b>Callee name</b> - True - right - end - - - True - True - 1 - - - - - 90 - 30 - True - False - - - False - True - 2 - - - - - - - - - - - - - - - diff --git a/gtk/conf_frame.ui b/gtk/conf_frame.ui new file mode 100644 index 000000000..1012efa88 --- /dev/null +++ b/gtk/conf_frame.ui @@ -0,0 +1,86 @@ + + + + + + True + False + 0 + none + + + True + False + + + True + False + + + End conference + True + True + True + + + False + False + end + 0 + + + + + True + True + end + 0 + + + + + True + False + + + gtk-media-record + True + True + True + True + + + + False + False + 0 + + + + + True + False + True + char + + + True + True + 1 + + + + + False + False + end + 1 + + + + + + + + + diff --git a/gtk/conf_view.ui b/gtk/conf_view.ui deleted file mode 100644 index 194a94d1e..000000000 --- a/gtk/conf_view.ui +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - False - - - True - False - 0 - none - - - True - False - - - True - False - - - End conference - True - True - True - - - False - False - end - 0 - - - - - True - True - end - 0 - - - - - True - False - - - gtk-media-record - True - True - True - True - - - - False - False - 0 - - - - - True - False - True - char - - - True - True - 1 - - - - - False - False - end - 1 - - - - - - - - - - - diff --git a/gtk/conference.c b/gtk/conference.c index c0b292b51..75a36cbdd 100644 --- a/gtk/conference.c +++ b/gtk/conference.c @@ -81,7 +81,7 @@ static GtkWidget *find_conferencee_from_call(LinphoneCall *call){ static GtkWidget * create_conference_panel(void){ GtkWidget *mw=linphone_gtk_get_main_window(); - GtkWidget *conf_frame=linphone_gtk_create_widget("conf_view","conf_frame"); + GtkWidget *conf_frame=linphone_gtk_create_widget("conf_frame"); GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box"); GtkWidget *button_conf=linphone_gtk_get_widget(conf_frame,"terminate_conf"); GtkWidget *image=create_pixmap("stopcall-small.png"); @@ -94,7 +94,7 @@ static GtkWidget * create_conference_panel(void){ g_object_set_data(G_OBJECT(mw),"conf_frame",(gpointer)conf_frame); box=gtk_vbox_new(FALSE,0); - participant=linphone_gtk_create_widget("conf_callee_view","callee_frame"); + participant=linphone_gtk_create_widget("callee_frame"); gtk_widget_show(participant); gtk_box_set_homogeneous(GTK_BOX(box),TRUE); init_local_participant(participant); @@ -126,7 +126,7 @@ void linphone_gtk_set_in_conference(LinphoneCall *call){ const LinphoneAddress *addr=linphone_call_get_remote_address(call); gchar *markup; - participant=linphone_gtk_create_widget("conf_callee_view","callee_frame"); + participant=linphone_gtk_create_widget("callee_frame"); gtk_widget_show(participant); if (linphone_address_get_display_name(addr)!=NULL){ markup=g_strdup_printf("%s",linphone_address_get_display_name(addr)); diff --git a/gtk/in_call_frame.ui b/gtk/in_call_frame.ui new file mode 100644 index 000000000..5721081b6 --- /dev/null +++ b/gtk/in_call_frame.ui @@ -0,0 +1,426 @@ + + + + + + False + cursor + 0.5 + none + + + True + False + 12 + 12 + + + True + False + + + True + False + center + + + True + True + 0 + + + + + True + False + + + + + + False + False + 1 + + + + + False + + + True + False + gtk-dialog-authentication + 1 + + + False + False + 0 + + + + + True + False + gtk-apply + + + False + False + 1 + + + + + True + False + + + True + True + 2 + 2 + + + + + Set verified + True + True + True + + + + False + False + 3 + + + + + False + True + 2 + + + + + True + False + + + True + False + + + True + True + True + True + none + False + vertical + linphone-micro-enabled + + + False + False + 5 + 0 + + + + + True + False + + + False + False + 5 + 1 + + + + + True + False + 10 + 0 + + + + + True + False + + + True + True + True + True + Click here to set the speakers volume + none + False + vertical + linphone-speaker-enabled + + + False + False + 5 + 0 + + + + + True + False + + + False + False + 5 + 1 + + + + + True + False + 10 + 1 + + + + + False + False + 5 + 3 + + + + + False + spread + + + Answer + True + True + True + + + + False + False + 0 + + + + + Decline + True + True + True + + + + False + False + 1 + + + + + False + False + 4 + + + + + False + + + gtk-media-record + True + True + True + Record this call to an audio file + True + + + + False + False + 0 + + + + + True + False + True + char + + + True + True + 1 + + + + + False + False + 5 + + + + + True + False + 2 + 3 + True + + + Video + True + True + True + + + + + Pause + True + True + True + + + + 1 + 2 + + + + + Mute + True + True + True + + + + 2 + 3 + + + + + Transfer + True + True + True + + + 1 + 2 + + + + + Hang up + True + True + True + + + + 1 + 2 + 1 + 2 + + + + + Conference + True + True + True + + + 2 + 3 + 1 + 2 + + + + + False + False + 7 + 6 + + + + + + + + + True + False + True + + + True + False + In call + True + center + + + True + True + 0 + + + + + True + False + Duration + center + + + True + True + 1 + + + + + 90 + 10 + True + False + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK + Call quality rating + + + False + False + 2 + + + + + + diff --git a/gtk/in_call_view.ui b/gtk/in_call_view.ui deleted file mode 100644 index 4fd1c0045..000000000 --- a/gtk/in_call_view.ui +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - False - - - False - cursor - 0.5 - none - - - True - False - 12 - 12 - - - True - False - - - True - False - center - - - True - True - 0 - - - - - True - False - - - - - - False - False - 1 - - - - - False - - - True - False - gtk-dialog-authentication - 1 - - - False - False - 0 - - - - - True - False - gtk-apply - - - False - False - 1 - - - - - True - False - - - True - True - 2 - 2 - - - - - Set verified - True - True - True - - - - False - False - 3 - - - - - False - True - 2 - - - - - True - False - - - True - False - - - True - True - True - True - none - False - vertical - linphone-micro-enabled - - - False - False - 5 - 0 - - - - - True - False - - - False - False - 5 - 1 - - - - - True - False - 10 - 0 - - - - - True - False - - - True - True - True - True - Click here to set the speakers volume - none - False - vertical - linphone-speaker-enabled - - - False - False - 5 - 0 - - - - - True - False - - - False - False - 5 - 1 - - - - - True - False - 10 - 1 - - - - - False - False - 5 - 3 - - - - - False - spread - - - Answer - True - True - True - - - - False - False - 0 - - - - - Decline - True - True - True - - - - False - False - 1 - - - - - False - False - 4 - - - - - False - - - gtk-media-record - True - True - True - Record this call to an audio file - True - - - - False - False - 0 - - - - - True - False - True - char - - - True - True - 1 - - - - - False - False - 5 - - - - - True - False - 2 - 3 - True - - - Video - True - True - True - - - - - Pause - True - True - True - - - - 1 - 2 - - - - - Mute - True - True - True - - - - 2 - 3 - - - - - Transfer - True - True - True - - - 1 - 2 - - - - - Hang up - True - True - True - - - - 1 - 2 - 1 - 2 - - - - - Conference - True - True - True - - - 2 - 3 - 1 - 2 - - - - - False - False - 7 - 6 - - - - - - - - - True - False - True - - - True - False - In call - True - center - - - True - True - 0 - - - - - True - False - Duration - center - - - True - True - 1 - - - - - 90 - 10 - True - False - GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK - Call quality rating - - - False - False - 2 - - - - - - - - diff --git a/gtk/incall_view.c b/gtk/incall_view.c index ed9e17d14..5f2f73fc1 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -361,7 +361,7 @@ void linphone_gtk_enable_video_button(LinphoneCall *call, gboolean sensitive, gb } void linphone_gtk_create_in_call_view(LinphoneCall *call){ - GtkWidget *call_view=linphone_gtk_create_widget("in_call_view","in_call_frame"); + GtkWidget *call_view=linphone_gtk_create_widget("in_call_frame"); GtkWidget *main_window=linphone_gtk_get_main_window (); GtkNotebook *notebook=(GtkNotebook *)linphone_gtk_get_widget(main_window,"viewswitch"); static int call_index=1; diff --git a/gtk/linphone.h b/gtk/linphone.h index 77636ca3a..f931f1cf3 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -98,7 +98,7 @@ GdkPixbuf *_gdk_pixbuf_new_from_memory_at_scale(const void *data, gint len, gint LINPHONE_PUBLIC void linphone_gtk_destroy_window(GtkWidget *window); LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_window(const char *window_name, GtkWidget *parent); LINPHONE_PUBLIC GtkWidget *linphone_gtk_get_widget(GtkWidget *window, const char *name); -LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_widget(const char *filename, const char *widget_name); +LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_widget(const char* widget_name); const char *linphone_gtk_message_storage_get_db_file(const char *filename); LINPHONE_PUBLIC void linphone_gtk_show_assistant(GtkWidget* parent); @@ -212,7 +212,7 @@ LINPHONE_PUBLIC void linphone_gtk_in_call_show_video(LinphoneCall *call); LINPHONE_PUBLIC char *linphone_gtk_address(const LinphoneAddress *addr);/*return human readable identifier for a LinphoneAddress */ LINPHONE_PUBLIC GtkWidget *linphone_gtk_get_camera_preview_window(void); -LINPHONE_PUBLIC void linphone_gtk_login_frame_connect_clicked(GtkWidget *button); +LINPHONE_PUBLIC void linphone_gtk_login_frame_connect_clicked(GtkWidget *button, GtkWidget *login_frame); LINPHONE_PUBLIC gboolean linphone_gtk_call_log_reset_missed_call(GtkWidget *w, GdkEvent *event, gpointer user_data); LINPHONE_PUBLIC void linphone_gtk_history_row_activated(GtkWidget *treeview); diff --git a/gtk/login_frame.ui b/gtk/login_frame.ui new file mode 100644 index 000000000..f65229f14 --- /dev/null +++ b/gtk/login_frame.ui @@ -0,0 +1,250 @@ + + + + + + False + 0 + etched-out + + + True + False + 12 + + + True + False + + + True + False + gtk-missing-image + + + True + True + 0 + + + + + True + False + 0 + none + + + True + False + 12 + 12 + + + True + False + 5 + 2 + + + + + + True + False + Username + + + + + True + False + Password + + + 1 + 2 + + + + + False + Internet connection: + + + 3 + 4 + + + + + True + True + + True + False + False + True + True + + + 1 + 2 + + + + + True + True + False + + True + False + False + True + True + + + 1 + 2 + 1 + 2 + + + + + False + 0 + + + + 0 + + + + + 1 + 2 + 3 + 4 + + + + + Automatically log me in + True + True + False + True + + + 1 + 2 + 4 + 5 + + + + + False + UserID + + + 2 + 3 + + + + + True + + True + False + False + True + True + + + 1 + 2 + 2 + 3 + + + + + + + + + True + False + Login information + True + + + + + True + True + 10 + 1 + + + + + True + False + + + gtk-connect + True + True + True + True + + + + False + False + 0 + + + + + + + + True + True + 2 + + + + + + + + + True + False + <b>Welcome!</b> + True + + + + + + + + + + + ADSL + + + Fiber Channel + + + + diff --git a/gtk/loginframe.c b/gtk/loginframe.c index cbe384c42..40748494b 100644 --- a/gtk/loginframe.c +++ b/gtk/loginframe.c @@ -48,47 +48,35 @@ static gboolean do_login_noprompt(LinphoneProxyConfig *cfg){ return FALSE; } -void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg, gboolean disable_auto_login){ - GtkWidget *mw=linphone_gtk_get_main_window(); - GtkWidget *label=linphone_gtk_get_widget(mw,"login_label"); - const LinphoneAuthInfo *ai; +static void linphone_gtk_init_login_frame(GtkWidget *login_frame, LinphoneProxyConfig *cfg) { + gboolean auto_login=linphone_gtk_get_ui_config_int("automatic_login",0); + const char *login_image=linphone_gtk_get_ui_config("login_image","linphone-banner.png"); + GtkWidget *label=linphone_gtk_get_widget(login_frame,"login_label"); + LinphoneCore *lc=linphone_gtk_get_core(); gchar *str; LinphoneAddress *from; - LinphoneCore *lc=linphone_gtk_get_core(); + const LinphoneAuthInfo *ai; const char *passwd=NULL; const char *userid=NULL; - gboolean auto_login=linphone_gtk_get_ui_config_int("automatic_login",0); - - if (auto_login && !disable_auto_login){ - g_timeout_add(250,(GSourceFunc)do_login_noprompt,cfg); - return; + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(login_frame, "automatic_login")),auto_login); + + if (login_image){ + GdkPixbuf *pbuf=create_pixbuf (login_image); + gtk_image_set_from_pixbuf (GTK_IMAGE(linphone_gtk_get_widget(login_frame, "login_image")), pbuf); + g_object_unref(G_OBJECT(pbuf)); } - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(mw,"automatic_login")),auto_login); - - { - const char *login_image=linphone_gtk_get_ui_config("login_image","linphone-banner.png"); - if (login_image){ - GdkPixbuf *pbuf=create_pixbuf (login_image); - gtk_image_set_from_pixbuf (GTK_IMAGE(linphone_gtk_get_widget(mw,"login_image")), - pbuf); - g_object_unref(G_OBJECT(pbuf)); - } - } - - gtk_widget_hide(linphone_gtk_get_widget(mw,"disconnect_item")); - gtk_widget_hide(linphone_gtk_get_widget(mw,"main_frame")); - gtk_widget_show(linphone_gtk_get_widget(mw,"login_frame")); + if (linphone_gtk_get_ui_config_int("login_needs_userid",FALSE)){ - gtk_widget_show(linphone_gtk_get_widget(mw,"userid")); - gtk_widget_show(linphone_gtk_get_widget(mw,"login_userid")); + gtk_widget_show(linphone_gtk_get_widget(login_frame,"userid")); + gtk_widget_show(linphone_gtk_get_widget(login_frame,"login_userid")); } - gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"options_menu"),FALSE); + str=g_strdup_printf(_("Please enter login information for %s"),linphone_proxy_config_get_domain(cfg)); gtk_label_set_text(GTK_LABEL(label),str); - g_object_set_data(G_OBJECT(mw),"login_proxy_config",cfg); + g_object_set_data(G_OBJECT(login_frame),"login_proxy_config",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); @@ -99,24 +87,55 @@ void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg, gboolean disable_au ai=linphone_core_find_auth_info(lc,linphone_proxy_config_get_domain(cfg),linphone_address_get_username(from),NULL); /*display the last entered username, if not '?????'*/ if (linphone_address_get_username(from)[0]!='?') - gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_username")), + gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(login_frame,"login_username")), linphone_address_get_username(from)); if (ai) { passwd=linphone_auth_info_get_passwd(ai); userid=linphone_auth_info_get_userid(ai); } - gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_password")), + gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(login_frame,"login_password")), passwd!=NULL ? passwd : ""); - gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_userid")), + gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(login_frame,"login_userid")), userid ? userid : ""); linphone_address_destroy(from); } +void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg, gboolean disable_auto_login){ + GtkWidget *mw=linphone_gtk_get_main_window(); + gboolean auto_login=linphone_gtk_get_ui_config_int("automatic_login",0); + GtkWidget *main_frame = linphone_gtk_get_widget(mw, "main_frame"); + GtkWidget *main_layout = linphone_gtk_get_widget(mw, "main_layout"); + GtkWidget *login_frame; + + if (auto_login && !disable_auto_login){ + g_timeout_add(250,(GSourceFunc)do_login_noprompt,cfg); + return; + } + + login_frame = linphone_gtk_create_widget("login_frame"); + linphone_gtk_init_login_frame(login_frame, cfg); + g_object_set_data_full(G_OBJECT(mw), "main_frame", g_object_ref(main_frame), g_object_unref); + g_object_set_data(G_OBJECT(mw), "login_frame", login_frame); + gtk_container_remove(GTK_CONTAINER(main_layout), main_frame); + gtk_box_pack_start(GTK_BOX(main_layout), login_frame, TRUE, TRUE, 0); + gtk_widget_show(login_frame); + + gtk_widget_hide(linphone_gtk_get_widget(mw,"disconnect_item")); + gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"options_menu"),FALSE); +} + void linphone_gtk_exit_login_frame(void){ GtkWidget *mw=linphone_gtk_get_main_window(); - gtk_widget_show(linphone_gtk_get_widget(mw,"main_frame")); - gtk_widget_hide(linphone_gtk_get_widget(mw,"login_frame")); + GtkWidget *main_layout = linphone_gtk_get_widget(mw, "main_layout"); + GtkWidget *main_frame = GTK_WIDGET(g_object_get_data(G_OBJECT(mw), "main_frame")); + GtkWidget *login_frame = GTK_WIDGET(g_object_get_data(G_OBJECT(mw), "login_frame")); + + gtk_container_remove(GTK_CONTAINER(main_layout), login_frame); + gtk_box_pack_start(GTK_BOX(main_layout), main_frame, TRUE, TRUE, 0); + g_object_set_data(G_OBJECT(mw), "login_frame", NULL); + g_object_set_data(G_OBJECT(mw), "main_frame", NULL); + gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"options_menu"),TRUE); gtk_widget_show(linphone_gtk_get_widget(mw,"disconnect_item")); } @@ -136,25 +155,24 @@ void linphone_gtk_logout_clicked(void){ -void linphone_gtk_login_frame_connect_clicked(GtkWidget *button){ - GtkWidget *mw=gtk_widget_get_toplevel(button); +void linphone_gtk_login_frame_connect_clicked(GtkWidget *button, GtkWidget *login_frame){ const char *username; const char *password; const char *userid; char *identity; gboolean autologin; - LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)g_object_get_data(G_OBJECT(mw),"login_proxy_config"); + LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)g_object_get_data(G_OBJECT(login_frame),"login_proxy_config"); LinphoneAddress *from; SipSetupContext *ssctx=linphone_proxy_config_get_sip_setup_context(cfg); - username=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_username"))); - password=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_password"))); - userid=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_userid"))); + username=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(login_frame,"login_username"))); + password=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(login_frame,"login_password"))); + userid=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(login_frame,"login_userid"))); if (username==NULL || username[0]=='\0') return; - autologin=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(mw,"automatic_login"))); + autologin=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(login_frame,"automatic_login"))); linphone_gtk_set_ui_config_int("automatic_login",autologin); linphone_gtk_set_ui_config("login_username",username); diff --git a/gtk/main.c b/gtk/main.c index 822f0f5f1..8a2df40d9 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -377,69 +377,47 @@ void linphone_gtk_destroy_window(GtkWidget *widget) { g_object_unref (G_OBJECT (builder)); } -GtkWidget *linphone_gtk_create_window(const char *window_name, GtkWidget *parent){ - GError* error = NULL; - GtkBuilder* builder = gtk_builder_new (); - char path[512]; - GtkWidget *w; - - if (get_ui_file(window_name,path,sizeof(path))==-1) return NULL; - - gtk_builder_set_translation_domain(builder,GETTEXT_PACKAGE); - - if (!gtk_builder_add_from_file (builder, path, &error)){ - g_error("Couldn't load builder file: %s", error->message); - g_error_free (error); - return NULL; - } - w=GTK_WIDGET(gtk_builder_get_object (builder,window_name)); - if (w==NULL){ - g_error("Could not retrieve '%s' window from xml file",window_name); - return NULL; - } - g_object_set_data(G_OBJECT(w), "builder",builder); - gtk_builder_connect_signals(builder,w); - linphone_gtk_configure_window(w,window_name); - if(parent) { -// gtk_window_set_modal(GTK_WINDOW(w), TRUE); - gtk_window_set_transient_for(GTK_WINDOW(w), GTK_WINDOW(parent)); - gtk_window_set_position(GTK_WINDOW(w), GTK_WIN_POS_CENTER_ON_PARENT); - } else { -// gtk_window_set_modal(GTK_WINDOW(w), FALSE); - } - return w; -} - -GtkWidget *linphone_gtk_create_widget(const char *filename, const char *widget_name) { +GtkWidget *linphone_gtk_create_widget(const char *widget_name) { char path[2048]; - GtkWidget *w = NULL; GtkBuilder *builder = gtk_builder_new(); GError *error = NULL; GObject *obj; - if(get_ui_file(filename, path, sizeof(path)) == -1) goto end; + if(get_ui_file(widget_name, path, sizeof(path)) == -1) goto fail; gtk_builder_set_translation_domain(builder, GETTEXT_PACKAGE); if(gtk_builder_add_from_file(builder, path, &error) == 0) { g_error("Couldn't load builder file: %s", error->message); g_error_free(error); - goto end; + goto fail; } obj = gtk_builder_get_object(builder, widget_name); if(obj == NULL) { g_error("'%s' widget not found", widget_name); - goto end; + goto fail; } - w = GTK_WIDGET(obj); g_object_set_data_full(obj, "builder", builder, g_object_unref); - gtk_widget_unparent(w); - gtk_builder_connect_signals(builder, w); + gtk_builder_connect_signals(builder, obj); + return GTK_WIDGET(obj); -end: +fail: + g_object_unref(builder); + return NULL; +} + +GtkWidget *linphone_gtk_create_window(const char *window_name, GtkWidget *parent){ + GtkWidget *w = linphone_gtk_create_widget(window_name); + if(w) { + linphone_gtk_configure_window(w,window_name); + if(parent) { + gtk_window_set_transient_for(GTK_WINDOW(w), GTK_WINDOW(parent)); + gtk_window_set_position(GTK_WINDOW(w), GTK_WIN_POS_CENTER_ON_PARENT); + } + } return w; } @@ -593,8 +571,7 @@ static gboolean linphone_gtk_iterate(LinphoneCore *lc){ if (addr_to_call!=NULL){ /*make sure we are not showing the login screen*/ GtkWidget *mw=linphone_gtk_get_main_window(); - GtkWidget *login_frame=linphone_gtk_get_widget(mw,"login_frame"); - if (!GTK_WIDGET_VISIBLE(login_frame)){ + if (g_object_get_data(G_OBJECT(mw), "login_frame") == NULL){ GtkWidget *uri_bar=linphone_gtk_get_widget(mw,"uribar"); gtk_entry_set_text(GTK_ENTRY(uri_bar),addr_to_call); addr_to_call=NULL; @@ -1149,7 +1126,7 @@ static void linphone_gtk_auth_info_requested(LinphoneCore *lc, const char *realm gchar *msg; GtkWidget *mw=linphone_gtk_get_main_window(); - if (mw && GTK_WIDGET_VISIBLE(linphone_gtk_get_widget(mw,"login_frame"))){ + if (mw && g_object_get_data(G_OBJECT(mw), "login_frame") != NULL){ /*don't prompt for authentication when login frame is visible*/ linphone_core_abort_authentication(lc,NULL); return; diff --git a/gtk/main.ui b/gtk/main.ui index 698fe2bf8..567156394 100644 --- a/gtk/main.ui +++ b/gtk/main.ui @@ -8,6 +8,11 @@ False gtk-add + + True + False + gtk-add + True False @@ -18,6 +23,11 @@ False gtk-edit + + True + False + gtk-edit + True False @@ -72,20 +82,6 @@ - - - - - - - - ADSL - - - Fiber Channel - - - True False @@ -98,13 +94,19 @@ Delete gtk-remove + + True + False + Delete + gtk-remove + False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 660 450 - + True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK @@ -277,245 +279,234 @@ - + True False + 8 - + True False - 8 - + True False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + none - + True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 - none + 5 + 5 - + True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 - 5 - + True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - True - True - - True - False - False - True - True - - - - True - True - 0 - - + True + + True + False + False + True + True + + + True + True + 0 + - - + + + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + SIP address or phone number: + True + + + + + True + True + 2 + 0 + + + + + True + True + True + + + + False + True + 1 + + + + + True + True + Initiate a new call + + + + False + False + 6 + 2 + + + + + True + True + True + + + + False + True + 3 + + + + + True + True + True + + + + False + True + end + 4 + + + + + + + + + + + False + True + 8 + 0 + + + + + True + True + + + True + False + 4 + + + True + False + GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK + 0 + Contacts + True + + + False + False + 3 + 0 + + + + + True + True + automatic + automatic + + True - False + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - SIP address or phone number: - True + True + False + 1 + + + + True True - 2 - 0 - - - - - True - True - True - - - - False - True 1 - - True - True - Initiate a new call - - - - False - False - 6 - 2 - - - - - True - True - True - - - - False - True - 3 - - - - - True - True - True - - - - False - True - end - 4 - - - - - - - - - - - False - True - 8 - 0 - - - - - True - True - - + True False - 4 + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - + True - False - GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK - 0 - Contacts - True + True + True + immediate + add_image1 + 1 + False False - 3 0 - + True True - automatic - automatic - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - False - 1 - - - - - - + True + edit_image1 + - True - True + False + False 1 - + True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - True - True - True - immediate - add_image - 1 - - - - False - False - 0 - - - - - True - True - True - edit_image - - - - False - False - 1 - - - - - True - True - True - remove_image - - - - False - False - 2 - - + True + True + remove_image1 + False @@ -525,167 +516,167 @@ - False - False + False + False + 2 + + + False + False + + + + + True + True - + + + + + + + True - True + False - - - - - - - + True False + 2 - + True - False - 2 + True + never - + + 350 True True - never + False + + + + + + + True + True + 0 + + + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + False + 0 + none - - 350 + + False + + + True + True + + True + False + False + True + True + + + True + True + 0 + + + + + True + True + True + none + + + + True + False + + + True + False + gtk-find + + + True + True + 0 + + + + + True + False + Search + + + True + True + 1 + + + + + + + False + True + 1 + + + + + + True - True - False - - + False + <b>Add contacts from directory</b> + True - True - True + False + False + 5 0 - + True False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - False - 0 - none - - - False - - - True - True - - True - False - False - True - True - - - True - True - 0 - - - - - True - True - True - none - - - - True - False - - - True - False - gtk-find - - - True - True - 0 - - - - - True - False - Search - - - True - True - 1 - - - - - - - False - True - 1 - - - - - - - True - False - <b>Add contacts from directory</b> - True - - + + Add contact + True + True + False False - 5 0 - - - True - False - - - Add contact - True - True - - - - False - False - 0 - - - - - False - False - 1 - - False @@ -693,433 +684,106 @@ 1 - - - True - False - end - - - gtk-clear - True - True - True - True - - - - False - False - 0 - - - - - - - - - - - False - True - 2 - - - - - True - True - 0 - - - - - 1 - - - - - True - False - - - - True - False - gtk-refresh - 1 - - - True - True - 0 - - - - - True - False - 0.49000000953674316 - Recent calls - - - True - True - 1 - - - - - 1 - False - - - - - - - - - - - True - True - - - - - True - True - 1 - - - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 - none - - - True - False - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - model3 - 0 - - - - - 0 - - - - - True - True - 0 - - - - - True - True - True - none - - - - False - True - 5 - 1 - - - - - - - True - False - 5 - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - My current identity: - True - - - True - True - 0 - - - - - True - True - True - none - - - - True - True - 1 - - - - - - - False - False - 2 - - - - - True - True - 0 - - - - - False - 0 - etched-out - - - True - False - 12 - - - True - False - - - True - False - gtk-missing-image - - - True - True - 0 - - - - - True - False - 0 - none - - - True - False - 12 - 12 - - - True - False - 5 - 2 - - - - - - True - False - Username - - - - - True - False - Password - - - 1 - 2 - - - - - False - Internet connection: - - - 3 - 4 - - - - - True - True - - False - False - True - True - - - 1 - 2 - - - - - True - True - False - - False - False - True - True - - - 1 - 2 - 1 - 2 - - - - - False - model4 - 0 - - - - 0 - - - - - 1 - 2 - 3 - 4 - - - - - Automatically log me in - True - True - False - True - - - 1 - 2 - 4 - 5 - - - - - False - UserID - - - 2 - 3 - - - - - True - - False - False - True - True - - - 1 - 2 - 2 - 3 - - - - - - - - - True - False - Login information - True - - - - - True - True - 10 - 1 - - - - - True - False - - - gtk-connect - True - True - True - True - False False - 0 + 1 - + + True + False + end + + + gtk-clear + True + True + True + True + + + + False + False + 0 + + + + + + + + + + + False + True + 2 + True True - 2 + 0 + + 1 + + + + + True + False + + + + True + False + gtk-refresh + 1 + + + True + True + 0 + + + + + True + False + 0.49000000953674316 + Recent calls + + + True + True + 1 + + + + + 1 + False + + + + + + + - - - - True - False - <b>Welcome!</b> - True - + + True + True + @@ -1128,6 +792,97 @@ 1 + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + none + + + True + False + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + model3 + 0 + + + + + 0 + + + + + True + True + 0 + + + + + True + True + True + none + + + + False + True + 5 + 1 + + + + + + + True + False + 5 + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + My current identity: + True + + + True + True + 0 + + + + + True + True + True + none + + + + True + True + 1 + + + + + + + False + False + 2 + + True @@ -1144,6 +899,7 @@ False True + end 2 diff --git a/po/POTFILES.in b/po/POTFILES.in index 150dd4748..ebfa3dff3 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -14,9 +14,6 @@ gtk/incall_view.c gtk/loginframe.c gtk/config-fetching.c gtk/audio_assistant.c -gtk/conf_callee_view.ui -gtk/conf_view.ui -gtk/in_call_view.ui [type: gettext/glade]gtk/main.ui [type: gettext/glade]gtk/about.ui [type: gettext/glade]gtk/contact.ui @@ -35,7 +32,11 @@ gtk/in_call_view.ui [type: gettext/glade]gtk/ldap.ui [type: gettext/glade]gtk/config-uri.ui [type: gettext/glade]gtk/provisioning-fetch.ui -[type: gettext/glade]gtk/chat_view.ui +[type: gettext/glade]gtk/chatroom_frame.ui +[type: gettext/glade]gtk/callee_frame.ui +[type: gettext/glade]gtk/conf_frame.ui +[type: gettext/glade]gtk/in_call_frame.ui +[type: gettext/glade]gtk/login_frame.ui coreapi/linphonecore.c coreapi/misc.c coreapi/presence.c From 4b9bb8f8e915f43ffe54a9e6f87817dc2a15bcde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Mon, 10 Aug 2015 00:05:59 +0200 Subject: [PATCH 057/134] Fixes fopen() calls on NULL paths and likely memory corrupions concerning dirname() missuses --- coreapi/lpconfig.c | 122 ++++++++++++++++++++++++++++++--------------- 1 file changed, 83 insertions(+), 39 deletions(-) diff --git a/coreapi/lpconfig.c b/coreapi/lpconfig.c index 921c88997..891097245 100644 --- a/coreapi/lpconfig.c +++ b/coreapi/lpconfig.c @@ -728,19 +728,30 @@ const char* lp_config_get_default_string(const LpConfig *lpconfig, const char *s return lp_config_get_string(lpconfig, default_section, key, default_value); } -static char *_lp_config_dirname(char *path) { +/* + * WARNING: this function is very dangerous. + * Read carefuly the folowing notices: + * 1. The 'path' parameter may be modify by + * the function. Be care to keep a copy of + * the original string. + * 2. The return pointer may points on a part of + * 'path'. So, be care to not free the string + * pointed by 'path' before the last used of + * the returned pointer. + * 3. Do not feed it after midnight + */ +static const char *_lp_config_dirname(char *path) { #ifdef _MSC_VER char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAME]; char ext[_MAX_EXT]; + static char dirname[_MAX_DRIVE + _MAX_DIR]; _splitpath(path, drive, dir, fname, ext); - return ms_strdup_printf("%s%s", drive, dir); + snprintf(dirname, sizeof(dirname), "%s%s", drive, dir); + return dirname; #else - char *tmp = ms_strdup(path); - char *dir = ms_strdup(dirname(tmp)); - ms_free(tmp); - return dir; + return dirname(path); #endif } @@ -748,12 +759,18 @@ bool_t lp_config_relative_file_exists(const LpConfig *lpconfig, const char *file if (lpconfig->filename == NULL) { return FALSE; } else { - char *dir = _lp_config_dirname(lpconfig->filename); + char *filename = ms_strdup(lpconfig->filename); + const char *dir = _lp_config_dirname(filename); char *filepath = ms_strdup_printf("%s/%s", dir, filename); char *realfilepath = lp_realpath(filepath, NULL); - FILE *file = fopen(realfilepath, "r"); - ms_free(dir); + FILE *file; + + ms_free(filename); ms_free(filepath); + + if(realfilepath == NULL) return FALSE; + + file = fopen(realfilepath, "r"); ms_free(realfilepath); if (file) { fclose(file); @@ -763,54 +780,81 @@ bool_t lp_config_relative_file_exists(const LpConfig *lpconfig, const char *file } void lp_config_write_relative_file(const LpConfig *lpconfig, const char *filename, const char *data) { + char *dup_config_file = NULL; + const char *dir = NULL; + char *filepath = NULL; + char *realfilepath = NULL; + FILE *file; + if (lpconfig->filename == NULL) return; - if(strlen(data) > 0) { - char *dir = _lp_config_dirname(lpconfig->filename); - char *filepath = ms_strdup_printf("%s/%s", dir, filename); - char *realfilepath = lp_realpath(filepath, NULL); - FILE *file = fopen(realfilepath, "w"); - if(file != NULL) { - fprintf(file, "%s", data); - fclose(file); - } else { - ms_error("Could not open %s for write", realfilepath); - } - ms_free(dir); - ms_free(filepath); - ms_free(realfilepath); - } else { + + if(strlen(data) == 0) { ms_warning("%s has not been created because there is no data to write", filename); + return; } + + dup_config_file = ms_strdup(lpconfig->filename); + dir = _lp_config_dirname(dup_config_file); + filepath = ms_strdup_printf("%s/%s", dir, filename); + realfilepath = lp_realpath(filepath, NULL); + if(realfilepath == NULL) { + ms_error("Could not resolv %s: %s", filepath, strerror(errno)); + goto end; + } + + file = fopen(realfilepath, "w"); + if(file == NULL) { + ms_error("Could not open %s for write", realfilepath); + goto end; + } + + fprintf(file, "%s", data); + fclose(file); + +end: + ms_free(dup_config_file); + ms_free(filepath); + if(realfilepath) ms_free(realfilepath); } int lp_config_read_relative_file(const LpConfig *lpconfig, const char *filename, char *data, size_t max_length) { - char *dir; - char *filepath; - FILE *file; - char* realfilepath; + char *dup_config_file = NULL; + const char *dir = NULL; + char *filepath = NULL; + FILE *file = NULL; + char* realfilepath = NULL; + if (lpconfig->filename == NULL) return -1; - dir = _lp_config_dirname(lpconfig->filename); + + dup_config_file = ms_strdup(lpconfig->filename); + dir = _lp_config_dirname(dup_config_file); filepath = ms_strdup_printf("%s/%s", dir, filename); realfilepath = lp_realpath(filepath, NULL); + if(realfilepath == NULL) { + ms_error("Could not resolv %s: %s", filepath, strerror(errno)); + goto err; + } + file = fopen(realfilepath, "r"); - if(file != NULL) { - if(fread(data, 1, max_length, file)<=0) { - ms_error("%s could not be loaded. %s", realfilepath, strerror(errno)); - goto err; - } - fclose(file); - } else { + if(file == NULL) { ms_error("Could not open %s for read. %s", realfilepath, strerror(errno)); goto err; } - ms_free(dir); + + if(fread(data, 1, max_length, file)<=0) { + ms_error("%s could not be loaded. %s", realfilepath, strerror(errno)); + goto err; + } + fclose(file); + + ms_free(dup_config_file); ms_free(filepath); ms_free(realfilepath); return 0; err: - ms_free(dir); ms_free(filepath); - ms_free(realfilepath); + ms_free(filepath); + if(realfilepath) ms_free(realfilepath); return -1; } From 973627b1657655667bedc73e31d90f97fde3740b Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 10 Aug 2015 23:02:45 +0200 Subject: [PATCH 058/134] adapt to new mediastreamer2, where big renaming occurs to fix incorrect function naming. Fix an fopen(NULL) reported by valgrind. --- coreapi/linphonecall.c | 101 +++++++++++++++++++++++------------------ coreapi/lpconfig.c | 20 ++++---- coreapi/private.h | 3 +- mediastreamer2 | 2 +- 4 files changed, 69 insertions(+), 57 deletions(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index b942010c6..696da6d39 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -2560,7 +2560,7 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b const char *recfile; const SalStreamDescription *local_st_desc; int crypto_idx; - AudioStreamIO io = { 0 }; + MSMediaStreamIO io = MS_MEDIA_STREAM_IO_INITIALIZER; bool_t use_rtp_io = lp_config_get_int(lc->config, "sound", "rtp_io", FALSE); snprintf(rtcp_tool,sizeof(rtcp_tool)-1,"%s-%s",linphone_core_get_user_agent_name(),linphone_core_get_user_agent_version()); @@ -2599,7 +2599,6 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b captcard=NULL; recfile=NULL; /*And we will eventually play "playfile" if set by the user*/ - /*playfile=NULL;*/ } if (send_ringbacktone){ conf = linphone_core_get_config(lc); @@ -2624,12 +2623,14 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b captcard=playcard=NULL; } use_ec=captcard==NULL ? FALSE : linphone_core_echo_cancellation_enabled(lc); + audio_stream_enable_echo_canceller(call->audiostream, use_ec); if (playcard && stream->max_rate>0) ms_snd_card_set_preferred_sample_rate(playcard, stream->max_rate); if (captcard && stream->max_rate>0) ms_snd_card_set_preferred_sample_rate(captcard, stream->max_rate); audio_stream_enable_adaptive_bitrate_control(call->audiostream,use_arc); media_stream_set_adaptive_bitrate_algorithm(&call->audiostream->ms, ms_qos_analyzer_algorithm_from_string(linphone_core_get_adaptive_rate_algorithm(lc))); audio_stream_enable_adaptive_jittcomp(call->audiostream, linphone_core_audio_adaptive_jittcomp_enabled(lc)); + rtp_session_set_jitter_compensation(call->audiostream->ms.sessions.rtp_session,linphone_core_get_audio_jittcomp(lc)); if (!call->params->in_conference && call->params->record_file){ audio_stream_mixed_record_open(call->audiostream,call->params->record_file); call->current_params->record_file=ms_strdup(call->params->record_file); @@ -2640,8 +2641,8 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, stream->crypto_local_tag); if (crypto_idx >= 0) { - media_stream_set_srtp_recv_key_b64(&(call->audiostream->ms.sessions),stream->crypto[0].algo,stream->crypto[0].master_key); - media_stream_set_srtp_send_key_b64(&(call->audiostream->ms.sessions),stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key); + ms_media_stream_sessions_set_srtp_recv_key_b64(&call->audiostream->ms.sessions, stream->crypto[0].algo,stream->crypto[0].master_key); + ms_media_stream_sessions_set_srtp_send_key_b64(&call->audiostream->ms.sessions, stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key); } else { ms_warning("Failed to find local crypto algo with tag: %d", stream->crypto_local_tag); } @@ -2651,19 +2652,28 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b if (is_multicast) rtp_session_set_multicast_ttl(call->audiostream->ms.sessions.rtp_session,stream->ttl); - if (lc->use_files) { - io.input_file = playfile; - io.output_file = recfile; - } else if (use_rtp_io) { - io.rtp_session = create_audio_rtp_io_session(call); - if (io.rtp_session == NULL) { + if (use_rtp_io) { + io.input.type = io.output.type = MSResourceRtp; + io.input.session = io.output.session = create_audio_rtp_io_session(call); + if (io.input.session == NULL) { ok = FALSE; } - } else if (stream->dir==SalStreamSendOnly) { /*no very good, io.xx versus playcard,captcard and call state should be reworked*/ - io.input_file = playfile; /*quick fix to restaure current behavior which is SalStreamSendOnly=Paused=playfile*/ - } else { - io.playback_card = playcard; - io.capture_card = captcard; + }else { + if (playcard){ + io.output.type = MSResourceSoundcard; + io.output.soundcard = playcard; + }else{ + io.output.type = MSResourceFile; + io.output.file = recfile; + } + if (captcard){ + io.input.type = MSResourceSoundcard; + io.input.soundcard = captcard; + }else{ + io.input.type = MSResourceFile; + io.input.file = playfile; + } + } if (ok == TRUE) { audio_stream_start_from_io(call->audiostream, @@ -2673,14 +2683,12 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b stream->rtcp_addr[0]!='\0' ? stream->rtcp_addr : call->resultdesc->addr, (linphone_core_rtcp_enabled(lc) && !is_multicast) ? (stream->rtcp_port ? stream->rtcp_port : stream->rtp_port+1) : 0, used_pt, - linphone_core_get_audio_jittcomp(lc), - use_ec, &io ); post_configure_audio_streams(call, muted && !send_ringbacktone); } - media_stream_session_encryption_mandatory_enable(&call->audiostream->ms.sessions,linphone_core_is_media_encryption_mandatory(call->core)); + ms_media_stream_sessions_set_encryption_mandatory(&call->audiostream->ms.sessions,linphone_core_is_media_encryption_mandatory(call->core)); if (stream->dir==SalStreamSendOnly && playfile!=NULL){ int pause_time=500; @@ -2736,14 +2744,12 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu MSFilter* source = NULL; bool_t reused_preview = FALSE; bool_t use_rtp_io = lp_config_get_int(lc->config, "video", "rtp_io", FALSE); - VideoStreamIO io = { 0 }; + MSMediaStreamIO io = MS_MEDIA_STREAM_IO_INITIALIZER; /* shutdown preview */ if (lc->previewstream!=NULL) { - if( lc->video_conf.reuse_preview_source == FALSE) video_preview_stop(lc->previewstream); else source = video_preview_stop_reuse_source(lc->previewstream); - lc->previewstream=NULL; } @@ -2756,9 +2762,10 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu call->video_profile=make_profile(call,call->resultdesc,vstream,&used_pt); if (used_pt!=-1){ - VideoStreamDir dir=VideoStreamSendRecv; + MediaStreamDir dir= MediaStreamSendRecv; bool_t is_inactive=FALSE; MSWebCam *cam; + call->current_params->video_codec = rtp_profile_get_payload(call->video_profile, used_pt); call->current_params->has_video=TRUE; @@ -2767,6 +2774,7 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu media_stream_set_adaptive_bitrate_algorithm(&call->videostream->ms, ms_qos_analyzer_algorithm_from_string(linphone_core_get_adaptive_rate_algorithm(lc))); video_stream_enable_adaptive_jittcomp(call->videostream, linphone_core_video_adaptive_jittcomp_enabled(lc)); + rtp_session_set_jitter_compensation(call->videostream->ms.sessions.rtp_session, linphone_core_get_video_jittcomp(lc)); if (lc->video_conf.preview_vsize.width!=0) video_stream_set_preview_size(call->videostream,lc->video_conf.preview_vsize); video_stream_set_fps(call->videostream,linphone_core_get_preferred_framerate(lc)); @@ -2782,20 +2790,20 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu if (is_multicast){ if (vstream->multicast_role == SalMulticastReceiver) - dir=VideoStreamRecvOnly; + dir=MediaStreamRecvOnly; else - dir=VideoStreamSendOnly; + dir=MediaStreamSendOnly; } else if (vstream->dir==SalStreamSendOnly && lc->video_conf.capture ){ - dir=VideoStreamSendOnly; + dir=MediaStreamSendOnly; }else if (vstream->dir==SalStreamRecvOnly && lc->video_conf.display ){ - dir=VideoStreamRecvOnly; + dir=MediaStreamRecvOnly; }else if (vstream->dir==SalStreamSendRecv){ if (lc->video_conf.display && lc->video_conf.capture) - dir=VideoStreamSendRecv; + dir=MediaStreamSendRecv; else if (lc->video_conf.display) - dir=VideoStreamRecvOnly; + dir=MediaStreamRecvOnly; else - dir=VideoStreamSendOnly; + dir=MediaStreamSendOnly; }else{ ms_warning("video stream is inactive."); /*either inactive or incompatible with local capabilities*/ @@ -2810,8 +2818,8 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu if (sal_stream_description_has_srtp(vstream) == TRUE) { int crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, vstream->crypto_local_tag); if (crypto_idx >= 0) { - media_stream_set_srtp_recv_key_b64(&(call->videostream->ms.sessions),vstream->crypto[0].algo,vstream->crypto[0].master_key); - media_stream_set_srtp_send_key_b64(&(call->videostream->ms.sessions),vstream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key); + ms_media_stream_sessions_set_srtp_recv_key_b64(&call->videostream->ms.sessions, vstream->crypto[0].algo,vstream->crypto[0].master_key); + ms_media_stream_sessions_set_srtp_send_key_b64(&call->videostream->ms.sessions, vstream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key); } } configure_rtp_session_for_rtcp_fb(call, vstream); @@ -2837,23 +2845,26 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu } else { bool_t ok = TRUE; if (use_rtp_io) { - io.rtp_session = create_video_rtp_io_session(call); - if (io.rtp_session == NULL) { + io.input.type = io.output.type = MSResourceRtp; + io.input.session = io.output.session = create_video_rtp_io_session(call); + if (io.input.session == NULL) { ok = FALSE; ms_warning("Cannot create video RTP IO session"); } } else { - io.cam = cam; + io.input.type = MSResourceCamera; + io.input.camera = cam; + io.output.type = MSResourceDefault; } if (ok) { video_stream_start_from_io(call->videostream, call->video_profile, rtp_addr, vstream->rtp_port, rtcp_addr, (linphone_core_rtcp_enabled(lc) && !is_multicast) ? (vstream->rtcp_port ? vstream->rtcp_port : vstream->rtp_port+1) : 0, - used_pt, linphone_core_get_video_jittcomp(lc), &io); + used_pt, &io); } } - media_stream_session_encryption_mandatory_enable(&call->videostream->ms.sessions,linphone_core_is_media_encryption_mandatory(call->core)); + ms_media_stream_sessions_set_encryption_mandatory(&call->videostream->ms.sessions,linphone_core_is_media_encryption_mandatory(call->core)); } }else ms_warning("No video stream accepted."); }else{ @@ -3002,9 +3013,9 @@ static bool_t update_stream_crypto_params(LinphoneCall *call, const SalStreamDes int crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, new_stream->crypto_local_tag); if (crypto_idx >= 0) { if (call->localdesc_changed & SAL_MEDIA_DESCRIPTION_CRYPTO_KEYS_CHANGED) - media_stream_set_srtp_send_key_b64(&(ms->sessions),new_stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key); + ms_media_stream_sessions_set_srtp_send_key_b64(&ms->sessions, new_stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key); if (strcmp(old_stream->crypto[0].master_key,new_stream->crypto[0].master_key)!=0){ - media_stream_set_srtp_recv_key_b64(&(ms->sessions),new_stream->crypto[0].algo,new_stream->crypto[0].master_key); + ms_media_stream_sessions_set_srtp_recv_key_b64(&ms->sessions, new_stream->crypto[0].algo,new_stream->crypto[0].master_key); } return TRUE; } else { @@ -3784,10 +3795,10 @@ void linphone_call_handle_stream_events(LinphoneCall *call, int stream_index){ if (call->ice_session == NULL) ms->ice_check_list = NULL; switch(ms->type){ - case AudioStreamType: + case MSAudio: audio_stream_iterate((AudioStream*)ms); break; - case VideoStreamType: + case MSVideo: #ifdef VIDEO_ENABLED video_stream_iterate((VideoStream*)ms); #endif @@ -3806,17 +3817,17 @@ void linphone_call_handle_stream_events(LinphoneCall *call, int stream_index){ linphone_call_notify_stats_updated(call,stream_index); if (evt == ORTP_EVENT_ZRTP_ENCRYPTION_CHANGED){ - if (ms->type==AudioStreamType) + if (ms->type==MSAudio) linphone_call_audiostream_encryption_changed(call, evd->info.zrtp_stream_encrypted); - else if (ms->type==VideoStreamType) + else if (ms->type==MSVideo) propagate_encryption_changed(call); } else if (evt == ORTP_EVENT_ZRTP_SAS_READY) { - if (ms->type==AudioStreamType) + if (ms->type==MSAudio) linphone_call_audiostream_auth_token_ready(call, evd->info.zrtp_sas.sas, evd->info.zrtp_sas.verified); } else if (evt == ORTP_EVENT_DTLS_ENCRYPTION_CHANGED) { - if (ms->type==AudioStreamType) + if (ms->type==MSAudio) linphone_call_audiostream_encryption_changed(call, evd->info.dtls_stream_encrypted); - else if (ms->type==VideoStreamType) + else if (ms->type==MSVideo) propagate_encryption_changed(call); }else if ((evt == ORTP_EVENT_ICE_SESSION_PROCESSING_FINISHED) || (evt == ORTP_EVENT_ICE_GATHERING_FINISHED) || (evt == ORTP_EVENT_ICE_LOSING_PAIRS_COMPLETED) || (evt == ORTP_EVENT_ICE_RESTART_NEEDED)) { diff --git a/coreapi/lpconfig.c b/coreapi/lpconfig.c index 921c88997..08ff9870b 100644 --- a/coreapi/lpconfig.c +++ b/coreapi/lpconfig.c @@ -745,21 +745,23 @@ static char *_lp_config_dirname(char *path) { } bool_t lp_config_relative_file_exists(const LpConfig *lpconfig, const char *filename) { - if (lpconfig->filename == NULL) { - return FALSE; - } else { + bool_t ret = FALSE; + if (lpconfig->filename) { char *dir = _lp_config_dirname(lpconfig->filename); char *filepath = ms_strdup_printf("%s/%s", dir, filename); char *realfilepath = lp_realpath(filepath, NULL); - FILE *file = fopen(realfilepath, "r"); + if (realfilepath){ + FILE *file = fopen(realfilepath, "r"); + ms_free(realfilepath); + if (file){ + ret = TRUE; + fclose(file); + } + } ms_free(dir); ms_free(filepath); - ms_free(realfilepath); - if (file) { - fclose(file); - } - return file != NULL; } + return ret; } void lp_config_write_relative_file(const LpConfig *lpconfig, const char *filename, const char *data) { diff --git a/coreapi/private.h b/coreapi/private.h index 2ba84988d..12fd5b4c4 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -295,6 +295,7 @@ struct _LinphoneCall{ belle_sip_source_t *dtmfs_timer; /*DTMF timer needed to send a DTMF sequence*/ char *dtls_certificate_fingerprint; /**> This fingerprint is computed during stream init and is stored in call to be used when making local media description */ + MSWebCam *cam; /*webcam use for this call*/ bool_t refer_pending; bool_t expect_media_in_ack; bool_t audio_muted; @@ -311,8 +312,6 @@ struct _LinphoneCall{ bool_t record_active; bool_t paused_by_app; - - MSWebCam *cam; /*webcam use for this call*/ }; BELLE_SIP_DECLARE_VPTR(LinphoneCall); diff --git a/mediastreamer2 b/mediastreamer2 index 5ca97404c..7f7befec0 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 5ca97404c6466c6bec2a44deddaadb48a522c2b8 +Subproject commit 7f7befec0ac83febe91aa570e301550392a3feb9 From e4ae91c774a3382b33e66fb7acc79619a5bc06fd Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Tue, 11 Aug 2015 10:09:02 +0200 Subject: [PATCH 059/134] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 7f7befec0..665fd90fe 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 7f7befec0ac83febe91aa570e301550392a3feb9 +Subproject commit 665fd90fe01bbfefbda9e7d9f630be64085413e2 From 3fcc80f87b6ff891b4c08c5894370b94465d8cf1 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Tue, 11 Aug 2015 15:09:21 +0200 Subject: [PATCH 060/134] Clean Visual Studio project for Windows 10. --- .../liblinphone-tester/liblinphone-tester.csproj | 11 ++++------- build/windows10/liblinphone-tester/packages.config | 8 -------- mediastreamer2 | 2 +- 3 files changed, 5 insertions(+), 16 deletions(-) delete mode 100644 build/windows10/liblinphone-tester/packages.config diff --git a/build/windows10/liblinphone-tester/liblinphone-tester.csproj b/build/windows10/liblinphone-tester/liblinphone-tester.csproj index d50b0c18e..7cea98872 100644 --- a/build/windows10/liblinphone-tester/liblinphone-tester.csproj +++ b/build/windows10/liblinphone-tester/liblinphone-tester.csproj @@ -18,8 +18,6 @@ 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} liblinphone-tester_TemporaryKey.pfx - - true @@ -111,6 +109,10 @@ Designer + + + + PreserveNewest @@ -267,14 +269,9 @@ PreserveNewest - - - - - diff --git a/build/windows10/liblinphone-tester/packages.config b/build/windows10/liblinphone-tester/packages.config deleted file mode 100644 index cce808aa7..000000000 --- a/build/windows10/liblinphone-tester/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/mediastreamer2 b/mediastreamer2 index 665fd90fe..9e7e97f5e 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 665fd90fe01bbfefbda9e7d9f630be64085413e2 +Subproject commit 9e7e97f5ed71e4eda8a3b04234fb31e3ebbfb4d9 From 0aef436df6b17cc9d1c70419c92cbd9d12995abb Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 12 Aug 2015 17:35:06 +0200 Subject: [PATCH 061/134] fix crash when terminating call at the GTK interface level. --- coreapi/call_params.h | 2 +- gtk/incall_view.c | 7 +++++-- mediastreamer2 | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/coreapi/call_params.h b/coreapi/call_params.h index 8f9182af1..29c0a1223 100644 --- a/coreapi/call_params.h +++ b/coreapi/call_params.h @@ -37,7 +37,7 @@ enum _LinphoneMediaDirection { LinphoneMediaDirectionInactive, /** No active media not supported yet*/ LinphoneMediaDirectionSendOnly, /** Send only mode*/ LinphoneMediaDirectionRecvOnly, /** recv only mode*/ - LinphoneMediaDirectionSendRecv, /*send receive mode not supported yet*/ + LinphoneMediaDirectionSendRecv, /** send receive*/ }; /** diff --git a/gtk/incall_view.c b/gtk/incall_view.c index 5f2f73fc1..c3b137fb6 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -607,7 +607,8 @@ static gboolean update_audio_meter(volume_ctx_t *ctx){ return TRUE; } -static void on_audio_meter_destroy(guint task_id){ +static void on_audio_meter_destroy(GtkWidget *w, gpointer data){ + guint task_id = GPOINTER_TO_INT(data); g_source_remove(task_id); } @@ -621,7 +622,8 @@ void linphone_gtk_init_audio_meter(GtkWidget *w, get_volume_t get_volume, void * ctx->last_value=0; g_object_set_data_full(G_OBJECT(w),"ctx",ctx,g_free); task_id=g_timeout_add(50,(GSourceFunc)update_audio_meter,ctx); - g_object_set_data_full(G_OBJECT(w),"task_id",GINT_TO_POINTER(task_id),(GDestroyNotify)on_audio_meter_destroy); + g_object_set_data(G_OBJECT(w), "task_id", GINT_TO_POINTER(task_id)); + g_signal_connect(G_OBJECT(w), "destroy", (GCallback)on_audio_meter_destroy, GINT_TO_POINTER(task_id)); } } @@ -630,6 +632,7 @@ void linphone_gtk_uninit_audio_meter(GtkWidget *w){ if (task_id!=0){ g_object_set_data(G_OBJECT(w),"ctx",NULL); g_object_set_data(G_OBJECT(w),"task_id",NULL); + g_source_remove(task_id); } } diff --git a/mediastreamer2 b/mediastreamer2 index 9e7e97f5e..46c025c42 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 9e7e97f5ed71e4eda8a3b04234fb31e3ebbfb4d9 +Subproject commit 46c025c428a0bd7c351258ce0d20d6341e895287 From 075f13f233c21caec79ca0e3ed3796f0e0082e4f Mon Sep 17 00:00:00 2001 From: Margaux Clerc Date: Wed, 12 Aug 2015 17:49:50 +0200 Subject: [PATCH 062/134] Remove textReceived callback Made echo calibration at start --- build/android/Android.mk | 1 + .../core/tutorials/TutorialBuddyStatus.java | 1 - .../core/tutorials/TutorialChatRoom.java | 4 -- .../core/tutorials/TutorialRegistration.java | 1 - coreapi/linphonecore_jni.cc | 40 +++++-------------- .../org/linphone/core/LinphoneCore.java | 2 +- .../linphone/core/LinphoneCoreListener.java | 9 ----- .../core/LinphoneCoreListenerBase.java | 7 ---- .../org/linphone/core/LinphoneCoreImpl.java | 6 +-- mediastreamer2 | 2 +- 10 files changed, 17 insertions(+), 56 deletions(-) diff --git a/build/android/Android.mk b/build/android/Android.mk index bb53ecf40..9fe43d362 100755 --- a/build/android/Android.mk +++ b/build/android/Android.mk @@ -118,6 +118,7 @@ LOCAL_C_INCLUDES += \ $(LOCAL_PATH)/../build/android \ $(LOCAL_PATH)/../oRTP/include \ $(LOCAL_PATH)/../mediastreamer2/include \ + $(LOCAL_PATH)/../mediastreamer2/src/audiofilters/ \ $(LOCAL_PATH)/../../belle-sip/include \ $(LOCAL_PATH)/../../../gen \ $(LOCAL_PATH)/../../externals/libxml2/include \ diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java index 22a850b36..82a094183 100644 --- a/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java +++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java @@ -104,7 +104,6 @@ public class TutorialBuddyStatus implements LinphoneCoreListener { public void displayMessage(LinphoneCore lc, String message) {} public void displayWarning(LinphoneCore lc, String message) {} public void globalState(LinphoneCore lc, GlobalState state, String message) {} - public void textReceived(LinphoneCore lc, LinphoneChatRoom cr,LinphoneAddress from, String message) {} public void callState(LinphoneCore lc, LinphoneCall call, State cstate, String msg) {} public void callStatsUpdated(LinphoneCore lc, LinphoneCall call, LinphoneCallStats stats) {} public void ecCalibrationStatus(LinphoneCore lc, EcCalibratorStatus status,int delay_ms, Object data) {} diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java index e8a7da936..11e436213 100644 --- a/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java +++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java @@ -90,10 +90,6 @@ public class TutorialChatRoom implements LinphoneCoreListener, LinphoneChatMessa public void callEncryptionChanged(LinphoneCore lc, LinphoneCall call,boolean encrypted, String authenticationToken) {} public void notifyReceived(LinphoneCore lc, LinphoneCall call, LinphoneAddress from, byte[] event){} public void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf) {} - - public void textReceived(LinphoneCore lc, LinphoneChatRoom cr,LinphoneAddress from, String message) { - //Deprecated - } diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java index 44c432271..5a2db2568 100644 --- a/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java +++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java @@ -88,7 +88,6 @@ public class TutorialRegistration implements LinphoneCoreListener { public void globalState(LinphoneCore lc, GlobalState state, String message) {} public void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf,String url) {} public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) {} - public void textReceived(LinphoneCore lc, LinphoneChatRoom cr,LinphoneAddress from, String message) {} public void callState(LinphoneCore lc, LinphoneCall call, State cstate, String msg) {} public void callStatsUpdated(LinphoneCore lc, LinphoneCall call, LinphoneCallStats stats) {} public void ecCalibrationStatus(LinphoneCore lc, EcCalibratorStatus status,int delay_ms, Object data) {} diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index b1aba031b..3f43bb41d 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -29,6 +29,7 @@ extern "C" { #include "mediastreamer2/mscommon.h" #include "mediastreamer2/msmediaplayer.h" #include "mediastreamer2/msutils.h" +#include "devices.h" } #include "mediastreamer2/msjava.h" #include "private.h" @@ -377,12 +378,6 @@ public: vTable->notify_presence_received = notify_presence_received; } - /*void textReceived(LinphoneCore lc, LinphoneChatRoom cr,LinphoneAddress from,String message);*/ - textReceivedId = env->GetMethodID(listenerClass,"textReceived","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatRoom;Lorg/linphone/core/LinphoneAddress;Ljava/lang/String;)V"); - if (textReceivedId) { - vTable->text_received = text_received; - } - messageReceivedId = env->GetMethodID(listenerClass,"messageReceived","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatRoom;Lorg/linphone/core/LinphoneChatMessage;)V"); if (messageReceivedId) { vTable->message_received = message_received; @@ -522,7 +517,6 @@ public: jmethodID displayStatusId; jmethodID newSubscriptionRequestId; jmethodID notifyPresenceReceivedId; - jmethodID textReceivedId; jmethodID messageReceivedId; jmethodID isComposingReceivedId; jmethodID dtmfReceivedId; @@ -786,23 +780,6 @@ public: ,dtmf); handle_possible_java_exception(env, lcData->listener); } - static void text_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const char *message) { - JNIEnv *env = 0; - jint result = jvm->AttachCurrentThread(&env,NULL); - if (result != 0) { - ms_error("cannot attach VM"); - return; - } - LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); - env->CallVoidMethod(lcData->listener - ,lcData->textReceivedId - ,lcData->core - ,env->NewObject(lcData->chatRoomClass,lcData->chatRoomCtrId,(jlong)room) - ,env->NewObject(lcData->addressClass,lcData->addressCtrId,(jlong)from) - ,message ? env->NewStringUTF(message) : NULL); - handle_possible_java_exception(env, lcData->listener); - } static void message_received(LinphoneCore *lc, LinphoneChatRoom *room, LinphoneChatMessage *msg) { JNIEnv *env = 0; jobject jmsg; @@ -2008,24 +1985,29 @@ extern "C" jboolean Java_org_linphone_core_LinphoneCoreImpl_needsEchoCalibration ms_error("Could not get soundcard %s", card); return TRUE; } + + SoundDeviceDescription *sound_description = sound_device_description_get(); + if(sound_description != NULL && sound_description == &genericSoundDeviceDescriptor){ + return TRUE; + } if (ms_snd_card_get_capabilities(sndcard) & MS_SND_CARD_CAP_BUILTIN_ECHO_CANCELLER) return FALSE; if (ms_snd_card_get_minimal_latency(sndcard) != 0) return FALSE; return TRUE; } -extern "C" jboolean Java_org_linphone_core_LinphoneCoreImpl_needsEchoCanceler(JNIEnv *env, jobject thiz, jlong lc) { +extern "C" jboolean Java_org_linphone_core_LinphoneCoreImpl_hasBuiltInEchoCanceler(JNIEnv *env, jobject thiz, jlong lc) { MSSndCard *sndcard; MSSndCardManager *m = ms_snd_card_manager_get(); const char *card = linphone_core_get_capture_device((LinphoneCore*)lc); sndcard = ms_snd_card_manager_get_card(m, card); if (sndcard == NULL) { ms_error("Could not get soundcard %s", card); - return TRUE; + return FALSE; } - - if (ms_snd_card_get_capabilities(sndcard) & MS_SND_CARD_CAP_BUILTIN_ECHO_CANCELLER) return FALSE; - return TRUE; + + if (ms_snd_card_get_capabilities(sndcard) & MS_SND_CARD_CAP_BUILTIN_ECHO_CANCELLER) return TRUE; + return FALSE; } extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_getMediaEncryption(JNIEnv* env diff --git a/java/common/org/linphone/core/LinphoneCore.java b/java/common/org/linphone/core/LinphoneCore.java index 410c8930e..e668520f9 100644 --- a/java/common/org/linphone/core/LinphoneCore.java +++ b/java/common/org/linphone/core/LinphoneCore.java @@ -1186,7 +1186,7 @@ public interface LinphoneCore { * Returns true if the software echo canceler needs to be turned on. * If the device has a builtin echo canceller, it will return false. */ - boolean needsEchoCanceler(); + boolean hasBuiltInEchoCanceler(); void enableIpv6(boolean enable); diff --git a/java/common/org/linphone/core/LinphoneCoreListener.java b/java/common/org/linphone/core/LinphoneCoreListener.java index 4067380a0..b7457a777 100644 --- a/java/common/org/linphone/core/LinphoneCoreListener.java +++ b/java/common/org/linphone/core/LinphoneCoreListener.java @@ -53,15 +53,6 @@ public interface LinphoneCoreListener { */ void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf); - /** - * invoked when a new text message is received - * @param lc LinphoneCore - * @param room LinphoneChatRoom involved in this conversation. Can be be created by the framework in case the from is not present in any chat room. - * @param from LinphoneAddress from - * @param message incoming message - */ - void textReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneAddress from, String message); - /** * invoked when a new dtmf is received * @param lc LinphoneCore diff --git a/java/common/org/linphone/core/LinphoneCoreListenerBase.java b/java/common/org/linphone/core/LinphoneCoreListenerBase.java index 158a871af..a7db59c11 100644 --- a/java/common/org/linphone/core/LinphoneCoreListenerBase.java +++ b/java/common/org/linphone/core/LinphoneCoreListenerBase.java @@ -38,13 +38,6 @@ public class LinphoneCoreListenerBase implements LinphoneCoreListener { } - @Override - public void textReceived(LinphoneCore lc, LinphoneChatRoom cr, - LinphoneAddress from, String message) { - // TODO Auto-generated method stub - - } - @Override public void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf) { // TODO Auto-generated method stub diff --git a/java/impl/org/linphone/core/LinphoneCoreImpl.java b/java/impl/org/linphone/core/LinphoneCoreImpl.java index e0f3882bb..3178e8d66 100644 --- a/java/impl/org/linphone/core/LinphoneCoreImpl.java +++ b/java/impl/org/linphone/core/LinphoneCoreImpl.java @@ -1057,10 +1057,10 @@ class LinphoneCoreImpl implements LinphoneCore { public synchronized boolean needsEchoCalibration() { return needsEchoCalibration(nativePtr); } - private native boolean needsEchoCanceler(long ptr); + private native boolean hasBuiltInEchoCanceler(long ptr); @Override - public synchronized boolean needsEchoCanceler() { - return needsEchoCanceler(nativePtr); + public synchronized boolean hasBuiltInEchoCanceler() { + return hasBuiltInEchoCanceler(nativePtr); } private native void declineCall(long coreptr, long callptr, int reason); @Override diff --git a/mediastreamer2 b/mediastreamer2 index 46c025c42..cbdcaacbb 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 46c025c428a0bd7c351258ce0d20d6341e895287 +Subproject commit cbdcaacbb6a4938c2c5997049b4f701c664aa0f1 From e196e55ea3dec7752ba60423b3f78fdf573051e0 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 12 Aug 2015 18:22:14 +0200 Subject: [PATCH 063/134] fix memory leaks in gtk interface --- gtk/incall_view.c | 1 + gtk/main.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gtk/incall_view.c b/gtk/incall_view.c index c3b137fb6..c29e9e118 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -612,6 +612,7 @@ static void on_audio_meter_destroy(GtkWidget *w, gpointer data){ g_source_remove(task_id); } + void linphone_gtk_init_audio_meter(GtkWidget *w, get_volume_t get_volume, void *data){ guint task_id=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w),"task_id")); if (task_id==0){ diff --git a/gtk/main.c b/gtk/main.c index 8a2df40d9..4f0790181 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -398,8 +398,8 @@ GtkWidget *linphone_gtk_create_widget(const char *widget_name) { g_error("'%s' widget not found", widget_name); goto fail; } - - g_object_set_data_full(obj, "builder", builder, g_object_unref); + g_object_set_data(G_OBJECT(obj), "builder", builder); + g_signal_connect_data(G_OBJECT(obj),"destroy",(GCallback)g_object_unref,builder, NULL, G_CONNECT_AFTER|G_CONNECT_SWAPPED); gtk_builder_connect_signals(builder, obj); return GTK_WIDGET(obj); From ced2dc9316a7f4474885ff34dee8e9e742ff3d67 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 13 Aug 2015 17:37:40 +0200 Subject: [PATCH 064/134] Added linphone_call_set_audio_route in linphone API to call audio_stream_set_audio_route in ms2 --- coreapi/linphonecall.c | 6 ++++++ coreapi/linphonecore.h | 9 +++++++++ mediastreamer2 | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 696da6d39..2c8975066 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -4137,3 +4137,9 @@ MSWebCam *linphone_call_get_video_device(const LinphoneCall *call) { return call->cam; } #endif + +void linphone_call_set_audio_route(LinphoneCall *call, MSAudioRoute route) { + if (call != NULL && call->audiostream != NULL){ + audio_stream_set_audio_route(call->audiostream, route); + } +} diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 7f3d7f5ee..158d5cc9d 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -876,6 +876,15 @@ LINPHONE_PUBLIC void linphone_call_enable_echo_limiter(LinphoneCall *call, bool_ **/ LINPHONE_PUBLIC bool_t linphone_call_echo_limiter_enabled(const LinphoneCall *call); +/** + * Change the playback output device (currently only used for blackberry) + * @param call + * @param route the wanted audio route (earpiece, speaker, ...) + * + * @ingroup call_control +**/ +LINPHONE_PUBLIC void linphone_call_set_audio_route(LinphoneCall *call, MSAudioRoute route); + /*keep this in sync with mediastreamer2/msvolume.h*/ /** diff --git a/mediastreamer2 b/mediastreamer2 index 998cdbcc7..50e226c6b 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 998cdbcc79e6871b3029961d1d696bc04aedfefb +Subproject commit 50e226c6baaba262b68bbe1292397558f2d55407 From e369f0e284337f6a369a160ae92a714a1684a227 Mon Sep 17 00:00:00 2001 From: Margaux Clerc Date: Fri, 14 Aug 2015 12:12:11 +0200 Subject: [PATCH 065/134] Disable realpath for android --- coreapi/lpconfig.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreapi/lpconfig.c b/coreapi/lpconfig.c index c6062ae55..ba15adbe0 100644 --- a/coreapi/lpconfig.c +++ b/coreapi/lpconfig.c @@ -86,7 +86,7 @@ struct _LpConfig{ }; char* lp_realpath(const char* file, char* name) { -#if defined(_WIN32) || defined(__QNX__) +#if defined(_WIN32) || defined(__QNX__) || defined(ANDROID) return ms_strdup(file); #else char * output = realpath(file, name); From bec4e9a6a7cf2f61b4df961c8246f23ff8d018fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Fri, 14 Aug 2015 15:30:16 +0200 Subject: [PATCH 066/134] Install index.theme in hicolor in Windows --- pixmaps/CMakeLists.txt | 7 + pixmaps/Makefile.am | 4 + pixmaps/index.theme | 1836 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1847 insertions(+) create mode 100644 pixmaps/index.theme diff --git a/pixmaps/CMakeLists.txt b/pixmaps/CMakeLists.txt index 595130e14..c90f789eb 100644 --- a/pixmaps/CMakeLists.txt +++ b/pixmaps/CMakeLists.txt @@ -49,3 +49,10 @@ install(FILES linphone.png DESTINATION ${ICONS_INSTALL_DIR}/48x48/apps PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ ) + +if(WIN32) + install(FILES index.theme + DESTINATION ${ICONS_INSTALL_DIR} + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ + ) +endif() diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am index 9b690cbfc..2646e8125 100644 --- a/pixmaps/Makefile.am +++ b/pixmaps/Makefile.am @@ -18,6 +18,10 @@ dist_pixmap_DATA= \ notok.png iconsdir=$(datadir)/icons/hicolor +if WIN32 + dist_icons_DATA=index.theme +endif + appiconsdir=$(iconsdir)/48x48/apps dist_appicons_DATA= linphone.png diff --git a/pixmaps/index.theme b/pixmaps/index.theme new file mode 100644 index 000000000..d17354741 --- /dev/null +++ b/pixmaps/index.theme @@ -0,0 +1,1836 @@ +[Icon Theme] +Name=Hicolor +Comment=Fallback icon theme +Hidden=true +Directories=16x16/actions,16x16/animations,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/filesystems,16x16/intl,16x16/mimetypes,16x16/places,16x16/status,16x16/stock/chart,16x16/stock/code,16x16/stock/data,16x16/stock/form,16x16/stock/image,16x16/stock/io,16x16/stock/media,16x16/stock/navigation,16x16/stock/net,16x16/stock/object,16x16/stock/table,16x16/stock/text,22x22/actions,22x22/animations,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/filesystems,22x22/intl,22x22/mimetypes,22x22/places,22x22/status,22x22/stock/chart,22x22/stock/code,22x22/stock/data,22x22/stock/form,22x22/stock/image,22x22/stock/io,22x22/stock/media,22x22/stock/navigation,22x22/stock/net,22x22/stock/object,22x22/stock/table,22x22/stock/text,24x24/actions,24x24/animations,24x24/apps,24x24/categories,24x24/devices,24x24/emblems,24x24/emotes,24x24/filesystems,24x24/intl,24x24/mimetypes,24x24/places,24x24/status,24x24/stock/chart,24x24/stock/code,24x24/stock/data,24x24/stock/form,24x24/stock/image,24x24/stock/io,24x24/stock/media,24x24/stock/navigation,24x24/stock/net,24x24/stock/object,24x24/stock/table,24x24/stock/text,32x32/actions,32x32/animations,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/filesystems,32x32/intl,32x32/mimetypes,32x32/places,32x32/status,32x32/stock/chart,32x32/stock/code,32x32/stock/data,32x32/stock/form,32x32/stock/image,32x32/stock/io,32x32/stock/media,32x32/stock/navigation,32x32/stock/net,32x32/stock/object,32x32/stock/table,32x32/stock/text,36x36/actions,36x36/animations,36x36/apps,36x36/categories,36x36/devices,36x36/emblems,36x36/emotes,36x36/filesystems,36x36/intl,36x36/mimetypes,36x36/places,36x36/status,36x36/stock/chart,36x36/stock/code,36x36/stock/data,36x36/stock/form,36x36/stock/image,36x36/stock/io,36x36/stock/media,36x36/stock/navigation,36x36/stock/net,36x36/stock/object,36x36/stock/table,36x36/stock/text,48x48/actions,48x48/animations,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/filesystems,48x48/intl,48x48/mimetypes,48x48/places,48x48/status,48x48/stock/chart,48x48/stock/code,48x48/stock/data,48x48/stock/form,48x48/stock/image,48x48/stock/io,48x48/stock/media,48x48/stock/navigation,48x48/stock/net,48x48/stock/object,48x48/stock/table,48x48/stock/text,64x64/actions,64x64/animations,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/filesystems,64x64/intl,64x64/mimetypes,64x64/places,64x64/status,64x64/stock/chart,64x64/stock/code,64x64/stock/data,64x64/stock/form,64x64/stock/image,64x64/stock/io,64x64/stock/media,64x64/stock/navigation,64x64/stock/net,64x64/stock/object,64x64/stock/table,64x64/stock/text,72x72/actions,72x72/animations,72x72/apps,72x72/categories,72x72/devices,72x72/emblems,72x72/emotes,72x72/filesystems,72x72/intl,72x72/mimetypes,72x72/places,72x72/status,72x72/stock/chart,72x72/stock/code,72x72/stock/data,72x72/stock/form,72x72/stock/image,72x72/stock/io,72x72/stock/media,72x72/stock/navigation,72x72/stock/net,72x72/stock/object,72x72/stock/table,72x72/stock/text,96x96/actions,96x96/animations,96x96/apps,96x96/categories,96x96/devices,96x96/emblems,96x96/emotes,96x96/filesystems,96x96/intl,96x96/mimetypes,96x96/places,96x96/status,96x96/stock/chart,96x96/stock/code,96x96/stock/data,96x96/stock/form,96x96/stock/image,96x96/stock/io,96x96/stock/media,96x96/stock/navigation,96x96/stock/net,96x96/stock/object,96x96/stock/table,96x96/stock/text,128x128/actions,128x128/animations,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/filesystems,128x128/intl,128x128/mimetypes,128x128/places,128x128/status,128x128/stock/chart,128x128/stock/code,128x128/stock/data,128x128/stock/form,128x128/stock/image,128x128/stock/io,128x128/stock/media,128x128/stock/navigation,128x128/stock/net,128x128/stock/object,128x128/stock/table,128x128/stock/text,192x192/actions,192x192/animations,192x192/apps,192x192/categories,192x192/devices,192x192/emblems,192x192/emotes,192x192/filesystems,192x192/intl,192x192/mimetypes,192x192/places,192x192/status,192x192/stock/chart,192x192/stock/code,192x192/stock/data,192x192/stock/form,192x192/stock/image,192x192/stock/io,192x192/stock/media,192x192/stock/navigation,192x192/stock/net,192x192/stock/object,192x192/stock/table,192x192/stock/text,256x256/actions,256x256/animations,256x256/apps,256x256/categories,256x256/devices,256x256/emblems,256x256/emotes,256x256/filesystems,256x256/intl,256x256/mimetypes,256x256/places,256x256/status,256x256/stock/chart,256x256/stock/code,256x256/stock/data,256x256/stock/form,256x256/stock/image,256x256/stock/io,256x256/stock/media,256x256/stock/navigation,256x256/stock/net,256x256/stock/object,256x256/stock/table,256x256/stock/text,512x512/actions,512x512/animations,512x512/apps,512x512/categories,512x512/devices,512x512/emblems,512x512/emotes,512x512/filesystems,512x512/intl,512x512/mimetypes,512x512/places,512x512/status,512x512/stock/chart,512x512/stock/code,512x512/stock/data,512x512/stock/form,512x512/stock/image,512x512/stock/io,512x512/stock/media,512x512/stock/navigation,512x512/stock/net,512x512/stock/object,512x512/stock/table,512x512/stock/text,scalable/actions,scalable/animations,scalable/apps,scalable/categories,scalable/devices,scalable/emblems,scalable/emotes,scalable/filesystems,scalable/intl,scalable/mimetypes,scalable/places,scalable/status,scalable/stock/chart,scalable/stock/code,scalable/stock/data,scalable/stock/form,scalable/stock/image,scalable/stock/io,scalable/stock/media,scalable/stock/navigation,scalable/stock/net,scalable/stock/object,scalable/stock/table,scalable/stock/text,symbolic/apps + + +[16x16/actions] +Size=16 +Context=Actions +Type=Threshold + +[16x16/animations] +Size=16 +Context=Animations +Type=Threshold + +[16x16/apps] +Size=16 +Context=Applications +Type=Threshold + +[16x16/categories] +Size=16 +Context=Categories +Type=Threshold + +[16x16/devices] +Size=16 +Context=Devices +Type=Threshold + +[16x16/emblems] +Size=16 +Context=Emblems +Type=Threshold + +[16x16/emotes] +Size=16 +Context=Emotes +Type=Threshold + +[16x16/filesystems] +Size=16 +Context=FileSystems +Type=Threshold + +[16x16/intl] +Size=16 +Context=International +Type=Threshold + +[16x16/mimetypes] +Size=16 +Context=MimeTypes +Type=Threshold + +[16x16/places] +Size=16 +Context=Places +Type=Threshold + +[16x16/status] +Size=16 +Context=Status +Type=Threshold + +[16x16/stock/chart] +Size=16 +Context=Stock +Type=Threshold + +[16x16/stock/code] +Size=16 +Context=Stock +Type=Threshold + +[16x16/stock/data] +Size=16 +Context=Stock +Type=Threshold + +[16x16/stock/form] +Size=16 +Context=Stock +Type=Threshold + +[16x16/stock/image] +Size=16 +Context=Stock +Type=Threshold + +[16x16/stock/io] +Size=16 +Context=Stock +Type=Threshold + +[16x16/stock/media] +Size=16 +Context=Stock +Type=Threshold + +[16x16/stock/navigation] +Size=16 +Context=Stock +Type=Threshold + +[16x16/stock/net] +Size=16 +Context=Stock +Type=Threshold + +[16x16/stock/object] +Size=16 +Context=Stock +Type=Threshold + +[16x16/stock/table] +Size=16 +Context=Stock +Type=Threshold + +[16x16/stock/text] +Size=16 +Context=Stock +Type=Threshold + +[22x22/actions] +Size=22 +Context=Actions +Type=Threshold + +[22x22/animations] +Size=22 +Context=Animations +Type=Threshold + +[22x22/apps] +Size=22 +Context=Applications +Type=Threshold + +[22x22/categories] +Size=22 +Context=Categories +Type=Threshold + +[22x22/devices] +Size=22 +Context=Devices +Type=Threshold + +[22x22/emblems] +Size=22 +Context=Emblems +Type=Threshold + +[22x22/emotes] +Size=22 +Context=Emotes +Type=Threshold + +[22x22/filesystems] +Size=22 +Context=FileSystems +Type=Threshold + +[22x22/intl] +Size=22 +Context=International +Type=Threshold + +[22x22/mimetypes] +Size=22 +Context=MimeTypes +Type=Threshold + +[22x22/places] +Size=22 +Context=Places +Type=Threshold + +[22x22/status] +Size=22 +Context=Status +Type=Threshold + +[22x22/stock/chart] +Size=22 +Context=Stock +Type=Threshold + +[22x22/stock/code] +Size=22 +Context=Stock +Type=Threshold + +[22x22/stock/data] +Size=22 +Context=Stock +Type=Threshold + +[22x22/stock/form] +Size=22 +Context=Stock +Type=Threshold + +[22x22/stock/image] +Size=22 +Context=Stock +Type=Threshold + +[22x22/stock/io] +Size=22 +Context=Stock +Type=Threshold + +[22x22/stock/media] +Size=22 +Context=Stock +Type=Threshold + +[22x22/stock/navigation] +Size=22 +Context=Stock +Type=Threshold + +[22x22/stock/net] +Size=22 +Context=Stock +Type=Threshold + +[22x22/stock/object] +Size=22 +Context=Stock +Type=Threshold + +[22x22/stock/table] +Size=22 +Context=Stock +Type=Threshold + +[22x22/stock/text] +Size=22 +Context=Stock +Type=Threshold + +[24x24/actions] +Size=24 +Context=Actions +Type=Threshold + +[24x24/animations] +Size=24 +Context=Animations +Type=Threshold + +[24x24/apps] +Size=24 +Context=Applications +Type=Threshold + +[24x24/categories] +Size=24 +Context=Categories +Type=Threshold + +[24x24/devices] +Size=24 +Context=Devices +Type=Threshold + +[24x24/emblems] +Size=24 +Context=Emblems +Type=Threshold + +[24x24/emotes] +Size=24 +Context=Emotes +Type=Threshold + +[24x24/filesystems] +Size=24 +Context=FileSystems +Type=Threshold + +[24x24/intl] +Size=24 +Context=International +Type=Threshold + +[24x24/mimetypes] +Size=24 +Context=MimeTypes +Type=Threshold + +[24x24/places] +Size=24 +Context=Places +Type=Threshold + +[24x24/status] +Size=24 +Context=Status +Type=Threshold + +[24x24/stock/chart] +Size=24 +Context=Stock +Type=Threshold + +[24x24/stock/code] +Size=24 +Context=Stock +Type=Threshold + +[24x24/stock/data] +Size=24 +Context=Stock +Type=Threshold + +[24x24/stock/form] +Size=24 +Context=Stock +Type=Threshold + +[24x24/stock/image] +Size=24 +Context=Stock +Type=Threshold + +[24x24/stock/io] +Size=24 +Context=Stock +Type=Threshold + +[24x24/stock/media] +Size=24 +Context=Stock +Type=Threshold + +[24x24/stock/navigation] +Size=24 +Context=Stock +Type=Threshold + +[24x24/stock/net] +Size=24 +Context=Stock +Type=Threshold + +[24x24/stock/object] +Size=24 +Context=Stock +Type=Threshold + +[24x24/stock/table] +Size=24 +Context=Stock +Type=Threshold + +[24x24/stock/text] +Size=24 +Context=Stock +Type=Threshold + +[32x32/actions] +Size=32 +Context=Actions +Type=Threshold + +[32x32/animations] +Size=32 +Context=Animations +Type=Threshold + +[32x32/apps] +Size=32 +Context=Applications +Type=Threshold + +[32x32/categories] +Size=32 +Context=Categories +Type=Threshold + +[32x32/devices] +Size=32 +Context=Devices +Type=Threshold + +[32x32/emblems] +Size=32 +Context=Emblems +Type=Threshold + +[32x32/emotes] +Size=32 +Context=Emotes +Type=Threshold + +[32x32/filesystems] +Size=32 +Context=FileSystems +Type=Threshold + +[32x32/intl] +Size=32 +Context=International +Type=Threshold + +[32x32/mimetypes] +Size=32 +Context=MimeTypes +Type=Threshold + +[32x32/places] +Size=32 +Context=Places +Type=Threshold + +[32x32/status] +Size=32 +Context=Status +Type=Threshold + +[32x32/stock/chart] +Size=32 +Context=Stock +Type=Threshold + +[32x32/stock/code] +Size=32 +Context=Stock +Type=Threshold + +[32x32/stock/data] +Size=32 +Context=Stock +Type=Threshold + +[32x32/stock/form] +Size=32 +Context=Stock +Type=Threshold + +[32x32/stock/image] +Size=32 +Context=Stock +Type=Threshold + +[32x32/stock/io] +Size=32 +Context=Stock +Type=Threshold + +[32x32/stock/media] +Size=32 +Context=Stock +Type=Threshold + +[32x32/stock/navigation] +Size=32 +Context=Stock +Type=Threshold + +[32x32/stock/net] +Size=32 +Context=Stock +Type=Threshold + +[32x32/stock/object] +Size=32 +Context=Stock +Type=Threshold + +[32x32/stock/table] +Size=32 +Context=Stock +Type=Threshold + +[32x32/stock/text] +Size=32 +Context=Stock +Type=Threshold + +[36x36/actions] +Size=36 +Context=Actions +Type=Threshold + +[36x36/animations] +Size=36 +Context=Animations +Type=Threshold + +[36x36/apps] +Size=36 +Context=Applications +Type=Threshold + +[36x36/categories] +Size=36 +Context=Categories +Type=Threshold + +[36x36/devices] +Size=36 +Context=Devices +Type=Threshold + +[36x36/emblems] +Size=36 +Context=Emblems +Type=Threshold + +[36x36/emotes] +Size=36 +Context=Emotes +Type=Threshold + +[36x36/filesystems] +Size=36 +Context=FileSystems +Type=Threshold + +[36x36/intl] +Size=36 +Context=International +Type=Threshold + +[36x36/mimetypes] +Size=36 +Context=MimeTypes +Type=Threshold + +[36x36/places] +Size=36 +Context=Places +Type=Threshold + +[36x36/status] +Size=36 +Context=Status +Type=Threshold + +[36x36/stock/chart] +Size=36 +Context=Stock +Type=Threshold + +[36x36/stock/code] +Size=36 +Context=Stock +Type=Threshold + +[36x36/stock/data] +Size=36 +Context=Stock +Type=Threshold + +[36x36/stock/form] +Size=36 +Context=Stock +Type=Threshold + +[36x36/stock/image] +Size=36 +Context=Stock +Type=Threshold + +[36x36/stock/io] +Size=36 +Context=Stock +Type=Threshold + +[36x36/stock/media] +Size=36 +Context=Stock +Type=Threshold + +[36x36/stock/navigation] +Size=36 +Context=Stock +Type=Threshold + +[36x36/stock/net] +Size=36 +Context=Stock +Type=Threshold + +[36x36/stock/object] +Size=36 +Context=Stock +Type=Threshold + +[36x36/stock/table] +Size=36 +Context=Stock +Type=Threshold + +[36x36/stock/text] +Size=36 +Context=Stock +Type=Threshold + +[48x48/actions] +Size=48 +Context=Actions +Type=Threshold + +[48x48/animations] +Size=48 +Context=Animations +Type=Threshold + +[48x48/apps] +Size=48 +Context=Applications +Type=Threshold + +[48x48/categories] +Size=48 +Context=Categories +Type=Threshold + +[48x48/devices] +Size=48 +Context=Devices +Type=Threshold + +[48x48/emblems] +Size=48 +Context=Emblems +Type=Threshold + +[48x48/emotes] +Size=48 +Context=Emotes +Type=Threshold + +[48x48/filesystems] +Size=48 +Context=FileSystems +Type=Threshold + +[48x48/intl] +Size=48 +Context=International +Type=Threshold + +[48x48/mimetypes] +Size=48 +Context=MimeTypes +Type=Threshold + +[48x48/places] +Size=48 +Context=Places +Type=Threshold + +[48x48/status] +Size=48 +Context=Status +Type=Threshold + +[48x48/stock/chart] +Size=48 +Context=Stock +Type=Threshold + +[48x48/stock/code] +Size=48 +Context=Stock +Type=Threshold + +[48x48/stock/data] +Size=48 +Context=Stock +Type=Threshold + +[48x48/stock/form] +Size=48 +Context=Stock +Type=Threshold + +[48x48/stock/image] +Size=48 +Context=Stock +Type=Threshold + +[48x48/stock/io] +Size=48 +Context=Stock +Type=Threshold + +[48x48/stock/media] +Size=48 +Context=Stock +Type=Threshold + +[48x48/stock/navigation] +Size=48 +Context=Stock +Type=Threshold + +[48x48/stock/net] +Size=48 +Context=Stock +Type=Threshold + +[48x48/stock/object] +Size=48 +Context=Stock +Type=Threshold + +[48x48/stock/table] +Size=48 +Context=Stock +Type=Threshold + +[48x48/stock/text] +Size=48 +Context=Stock +Type=Threshold + +[64x64/actions] +Size=64 +Context=Actions +Type=Threshold + +[64x64/animations] +Size=64 +Context=Animations +Type=Threshold + +[64x64/apps] +Size=64 +Context=Applications +Type=Threshold + +[64x64/categories] +Size=64 +Context=Categories +Type=Threshold + +[64x64/devices] +Size=64 +Context=Devices +Type=Threshold + +[64x64/emblems] +Size=64 +Context=Emblems +Type=Threshold + +[64x64/emotes] +Size=64 +Context=Emotes +Type=Threshold + +[64x64/filesystems] +Size=64 +Context=FileSystems +Type=Threshold + +[64x64/intl] +Size=64 +Context=International +Type=Threshold + +[64x64/mimetypes] +Size=64 +Context=MimeTypes +Type=Threshold + +[64x64/places] +Size=64 +Context=Places +Type=Threshold + +[64x64/status] +Size=64 +Context=Status +Type=Threshold + +[64x64/stock/chart] +Size=64 +Context=Stock +Type=Threshold + +[64x64/stock/code] +Size=64 +Context=Stock +Type=Threshold + +[64x64/stock/data] +Size=64 +Context=Stock +Type=Threshold + +[64x64/stock/form] +Size=64 +Context=Stock +Type=Threshold + +[64x64/stock/image] +Size=64 +Context=Stock +Type=Threshold + +[64x64/stock/io] +Size=64 +Context=Stock +Type=Threshold + +[64x64/stock/media] +Size=64 +Context=Stock +Type=Threshold + +[64x64/stock/navigation] +Size=64 +Context=Stock +Type=Threshold + +[64x64/stock/net] +Size=64 +Context=Stock +Type=Threshold + +[64x64/stock/object] +Size=64 +Context=Stock +Type=Threshold + +[64x64/stock/table] +Size=64 +Context=Stock +Type=Threshold + +[64x64/stock/text] +Size=64 +Context=Stock +Type=Threshold +[72x72/actions] +Size=72 +Context=Actions +Type=Threshold + +[72x72/animations] +Size=72 +Context=Animations +Type=Threshold + +[72x72/apps] +Size=72 +Context=Applications +Type=Threshold + +[72x72/categories] +Size=72 +Context=Categories +Type=Threshold + +[72x72/devices] +Size=72 +Context=Devices +Type=Threshold + +[72x72/emblems] +Size=72 +Context=Emblems +Type=Threshold + +[72x72/emotes] +Size=72 +Context=Emotes +Type=Threshold + +[72x72/filesystems] +Size=72 +Context=FileSystems +Type=Threshold + +[72x72/intl] +Size=72 +Context=International +Type=Threshold + +[72x72/mimetypes] +Size=72 +Context=MimeTypes +Type=Threshold + +[72x72/places] +Size=72 +Context=Places +Type=Threshold + +[72x72/status] +Size=72 +Context=Status +Type=Threshold + +[72x72/stock/chart] +Size=72 +Context=Stock +Type=Threshold + +[72x72/stock/code] +Size=72 +Context=Stock +Type=Threshold + +[72x72/stock/data] +Size=72 +Context=Stock +Type=Threshold + +[72x72/stock/form] +Size=72 +Context=Stock +Type=Threshold + +[72x72/stock/image] +Size=72 +Context=Stock +Type=Threshold + +[72x72/stock/io] +Size=72 +Context=Stock +Type=Threshold + +[72x72/stock/media] +Size=72 +Context=Stock +Type=Threshold + +[72x72/stock/navigation] +Size=72 +Context=Stock +Type=Threshold + +[72x72/stock/net] +Size=72 +Context=Stock +Type=Threshold + +[72x72/stock/object] +Size=72 +Context=Stock +Type=Threshold + +[72x72/stock/table] +Size=72 +Context=Stock +Type=Threshold + +[72x72/stock/text] +Size=72 +Context=Stock +Type=Threshold + +[96x96/actions] +Size=96 +Context=Actions +Type=Threshold + +[96x96/animations] +Size=96 +Context=Animations +Type=Threshold + +[96x96/apps] +Size=96 +Context=Applications +Type=Threshold + +[96x96/categories] +Size=96 +Context=Categories +Type=Threshold + +[96x96/devices] +Size=96 +Context=Devices +Type=Threshold + +[96x96/emblems] +Size=96 +Context=Emblems +Type=Threshold + +[96x96/emotes] +Size=96 +Context=Emotes +Type=Threshold + +[96x96/filesystems] +Size=96 +Context=FileSystems +Type=Threshold + +[96x96/intl] +Size=96 +Context=International +Type=Threshold + +[96x96/mimetypes] +Size=96 +Context=MimeTypes +Type=Threshold + +[96x96/places] +Size=96 +Context=Places +Type=Threshold + +[96x96/status] +Size=96 +Context=Status +Type=Threshold + +[96x96/stock/chart] +Size=96 +Context=Stock +Type=Threshold + +[96x96/stock/code] +Size=96 +Context=Stock +Type=Threshold + +[96x96/stock/data] +Size=96 +Context=Stock +Type=Threshold + +[96x96/stock/form] +Size=96 +Context=Stock +Type=Threshold + +[96x96/stock/image] +Size=96 +Context=Stock +Type=Threshold + +[96x96/stock/io] +Size=96 +Context=Stock +Type=Threshold + +[96x96/stock/media] +Size=96 +Context=Stock +Type=Threshold + +[96x96/stock/navigation] +Size=96 +Context=Stock +Type=Threshold + +[96x96/stock/net] +Size=96 +Context=Stock +Type=Threshold + +[96x96/stock/object] +Size=96 +Context=Stock +Type=Threshold + +[96x96/stock/table] +Size=96 +Context=Stock +Type=Threshold + +[96x96/stock/text] +Size=96 +Context=Stock +Type=Threshold + +[128x128/actions] +Size=128 +Context=Actions +Type=Threshold + +[128x128/animations] +Size=128 +Context=Animations +Type=Threshold + +[128x128/apps] +Size=128 +Context=Applications +Type=Threshold + +[128x128/categories] +Size=128 +Context=Categories +Type=Threshold + +[128x128/devices] +Size=128 +Context=Devices +Type=Threshold + +[128x128/emblems] +Size=128 +Context=Emblems +Type=Threshold + +[128x128/emotes] +Size=128 +Context=Emotes +Type=Threshold + +[128x128/filesystems] +Size=128 +Context=FileSystems +Type=Threshold + +[128x128/intl] +Size=128 +Context=International +Type=Threshold + +[128x128/mimetypes] +Size=128 +Context=MimeTypes +Type=Threshold + +[128x128/places] +Size=128 +Context=Places +Type=Threshold + +[128x128/status] +Size=128 +Context=Status +Type=Threshold + +[128x128/stock/chart] +Size=128 +Context=Stock +Type=Threshold + +[128x128/stock/code] +Size=128 +Context=Stock +Type=Threshold + +[128x128/stock/data] +Size=128 +Context=Stock +Type=Threshold + +[128x128/stock/form] +Size=128 +Context=Stock +Type=Threshold + +[128x128/stock/image] +Size=128 +Context=Stock +Type=Threshold + +[128x128/stock/io] +Size=128 +Context=Stock +Type=Threshold + +[128x128/stock/media] +Size=128 +Context=Stock +Type=Threshold + +[128x128/stock/navigation] +Size=128 +Context=Stock +Type=Threshold + +[128x128/stock/net] +Size=128 +Context=Stock +Type=Threshold + +[128x128/stock/object] +Size=128 +Context=Stock +Type=Threshold + +[128x128/stock/table] +Size=128 +Context=Stock +Type=Threshold + +[128x128/stock/text] +Size=128 +Context=Stock +Type=Threshold + +[192x192/actions] +Size=192 +Context=Actions +Type=Threshold + +[192x192/animations] +Size=192 +Context=Animations +Type=Threshold + +[192x192/apps] +Size=192 +Context=Applications +Type=Threshold + +[192x192/categories] +Size=192 +Context=Categories +Type=Threshold + +[192x192/devices] +Size=192 +Context=Devices +Type=Threshold + +[192x192/emblems] +Size=192 +Context=Emblems +Type=Threshold + +[192x192/emotes] +Size=192 +Context=Emotes +Type=Threshold + +[192x192/filesystems] +Size=192 +Context=FileSystems +Type=Threshold + +[192x192/intl] +Size=192 +Context=International +Type=Threshold + +[192x192/mimetypes] +Size=192 +Context=MimeTypes +Type=Threshold + +[192x192/places] +Size=192 +Context=Places +Type=Threshold + +[192x192/status] +Size=192 +Context=Status +Type=Threshold + +[192x192/stock/chart] +Size=192 +Context=Stock +Type=Threshold + +[192x192/stock/code] +Size=192 +Context=Stock +Type=Threshold + +[192x192/stock/data] +Size=192 +Context=Stock +Type=Threshold + +[192x192/stock/form] +Size=192 +Context=Stock +Type=Threshold + +[192x192/stock/image] +Size=192 +Context=Stock +Type=Threshold + +[192x192/stock/io] +Size=192 +Context=Stock +Type=Threshold + +[192x192/stock/media] +Size=192 +Context=Stock +Type=Threshold + +[192x192/stock/navigation] +Size=192 +Context=Stock +Type=Threshold + +[192x192/stock/net] +Size=192 +Context=Stock +Type=Threshold + +[192x192/stock/object] +Size=192 +Context=Stock +Type=Threshold + +[192x192/stock/table] +Size=192 +Context=Stock +Type=Threshold + +[192x192/stock/text] +Size=192 +Context=Stock +Type=Threshold + +[256x256/actions] +MinSize=64 +Size=256 +MaxSize=256 +Context=Actions +Type=Scalable + +[256x256/animations] +MinSize=64 +Size=256 +MaxSize=256 +Context=Animations +Type=Scalable + +[256x256/apps] +MinSize=64 +Size=256 +MaxSize=256 +Context=Applications +Type=Scalable + +[256x256/categories] +MinSize=64 +Size=256 +MaxSize=256 +Context=Categories +Type=Scalable + +[256x256/devices] +MinSize=64 +Size=256 +MaxSize=256 +Context=Devices +Type=Scalable + +[256x256/emblems] +MinSize=64 +Size=256 +MaxSize=256 +Context=Emblems +Type=Scalable + +[256x256/emotes] +MinSize=64 +Size=256 +MaxSize=256 +Context=Emotes +Type=Scalable + +[256x256/filesystems] +MinSize=64 +Size=256 +MaxSize=256 +Context=FileSystems +Type=Scalable + +[256x256/intl] +MinSize=64 +Size=256 +MaxSize=256 +Context=International +Type=Scalable + +[256x256/mimetypes] +MinSize=64 +Size=256 +MaxSize=256 +Context=MimeTypes +Type=Scalable + +[256x256/places] +MinSize=64 +Size=256 +MaxSize=256 +Context=Places +Type=Scalable + +[256x256/status] +MinSize=64 +Size=256 +MaxSize=256 +Context=Status +Type=Scalable + +[256x256/stock/chart] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[256x256/stock/code] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[256x256/stock/data] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[256x256/stock/form] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[256x256/stock/image] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[256x256/stock/io] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[256x256/stock/media] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[256x256/stock/navigation] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[256x256/stock/net] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[256x256/stock/object] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[256x256/stock/table] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[256x256/stock/text] +MinSize=64 +Size=256 +MaxSize=256 +Context=Stock +Type=Scalable + +[512x512/actions] +MinSize=64 +Size=512 +MaxSize=512 +Context=Actions +Type=Scalable + +[512x512/animations] +MinSize=64 +Size=512 +MaxSize=512 +Context=Animations +Type=Scalable + +[512x512/apps] +MinSize=64 +Size=512 +MaxSize=512 +Context=Applications +Type=Scalable + +[512x512/categories] +MinSize=64 +Size=512 +MaxSize=512 +Context=Categories +Type=Scalable + +[512x512/devices] +MinSize=64 +Size=512 +MaxSize=512 +Context=Devices +Type=Scalable + +[512x512/emblems] +MinSize=64 +Size=512 +MaxSize=512 +Context=Emblems +Type=Scalable + +[512x512/emotes] +MinSize=64 +Size=512 +MaxSize=512 +Context=Emotes +Type=Scalable + +[512x512/filesystems] +MinSize=64 +Size=512 +MaxSize=512 +Context=FileSystems +Type=Scalable + +[512x512/intl] +MinSize=64 +Size=512 +MaxSize=512 +Context=International +Type=Scalable + +[512x512/mimetypes] +MinSize=64 +Size=512 +MaxSize=512 +Context=MimeTypes +Type=Scalable + +[512x512/places] +MinSize=64 +Size=512 +MaxSize=512 +Context=Places +Type=Scalable + +[512x512/status] +MinSize=64 +Size=512 +MaxSize=512 +Context=Status +Type=Scalable + +[512x512/stock/chart] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[512x512/stock/code] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[512x512/stock/data] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[512x512/stock/form] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[512x512/stock/image] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[512x512/stock/io] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[512x512/stock/media] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[512x512/stock/navigation] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[512x512/stock/net] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[512x512/stock/object] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[512x512/stock/table] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[512x512/stock/text] +MinSize=64 +Size=512 +MaxSize=512 +Context=Stock +Type=Scalable + +[scalable/actions] +MinSize=1 +Size=128 +MaxSize=256 +Context=Actions +Type=Scalable + +[scalable/animations] +MinSize=1 +Size=128 +MaxSize=256 +Context=Animations +Type=Scalable + +[scalable/apps] +MinSize=1 +Size=128 +MaxSize=256 +Context=Applications +Type=Scalable + +[scalable/categories] +MinSize=1 +Size=128 +MaxSize=256 +Context=Categories +Type=Scalable + +[scalable/devices] +MinSize=1 +Size=128 +MaxSize=512 +Context=Devices +Type=Scalable + +[scalable/emblems] +MinSize=1 +Size=128 +MaxSize=256 +Context=Emblems +Type=Scalable + +[scalable/emotes] +MinSize=1 +Size=128 +MaxSize=512 +Context=Emotes +Type=Scalable + +[scalable/filesystems] +MinSize=1 +Size=128 +MaxSize=256 +Context=FileSystems +Type=Scalable + +[scalable/intl] +MinSize=1 +Size=128 +MaxSize=512 +Context=International +Type=Scalable + +[scalable/mimetypes] +MinSize=1 +Size=128 +MaxSize=256 +Context=MimeTypes +Type=Scalable + +[scalable/places] +MinSize=1 +Size=128 +MaxSize=512 +Context=Places +Type=Scalable + +[scalable/status] +MinSize=1 +Size=128 +MaxSize=256 +Context=Status +Type=Scalable + +[scalable/stock/chart] +MinSize=1 +Size=128 +MaxSize=512 +Context=Stock +Type=Scalable + +[scalable/stock/code] +MinSize=1 +Size=128 +MaxSize=256 +Context=Stock +Type=Scalable + +[scalable/stock/data] +MinSize=1 +Size=128 +MaxSize=512 +Context=Stock +Type=Scalable + +[scalable/stock/form] +MinSize=1 +Size=128 +MaxSize=256 +Context=Stock +Type=Scalable + +[scalable/stock/image] +MinSize=1 +Size=128 +MaxSize=512 +Context=Stock +Type=Scalable + +[scalable/stock/io] +MinSize=1 +Size=128 +MaxSize=256 +Context=Stock +Type=Scalable + +[scalable/stock/media] +MinSize=1 +Size=128 +MaxSize=512 +Context=Stock +Type=Scalable + +[scalable/stock/navigation] +MinSize=1 +Size=128 +MaxSize=256 +Context=Stock +Type=Scalable + +[scalable/stock/net] +MinSize=1 +Size=128 +MaxSize=512 +Context=Stock +Type=Scalable + +[scalable/stock/object] +MinSize=1 +Size=128 +MaxSize=256 +Context=Stock +Type=Scalable + +[scalable/stock/table] +MinSize=1 +Size=128 +MaxSize=512 +Context=Stock +Type=Scalable + +[scalable/stock/text] +MinSize=1 +Size=128 +MaxSize=256 +Context=Stock +Type=Scalable + +[symbolic/apps] +MinSize=8 +Size=16 +MaxSize=512 +Context=Applications +Type=Scalable From e44edf1efd50bcd5a14127f36adda02ea3031f2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Fri, 14 Aug 2015 15:39:05 +0200 Subject: [PATCH 067/134] Fix build with autotools --- pixmaps/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am index 2646e8125..afa9f411f 100644 --- a/pixmaps/Makefile.am +++ b/pixmaps/Makefile.am @@ -18,7 +18,7 @@ dist_pixmap_DATA= \ notok.png iconsdir=$(datadir)/icons/hicolor -if WIN32 +if BUILD_WIN32 dist_icons_DATA=index.theme endif From 52dc82cd5ba19ccc3706f0b903ca0daf94bffded Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sun, 16 Aug 2015 17:10:57 +0200 Subject: [PATCH 068/134] update ms2 --- coreapi/callbacks.c | 1 + mediastreamer2 | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index 618a14e59..041f36d5b 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -688,6 +688,7 @@ static void call_updated_by_remote(LinphoneCore *lc, LinphoneCall *call, bool_t } } else if( call->state == LinphoneCallPausedByRemote ){ + /* FIXME: the comment below is meaningless. */ /* Case where no SDP is present and we were paused by remote. * We send back an ACK with our SDP and expect the remote to send its own. * No state change here until an answer is received. */ diff --git a/mediastreamer2 b/mediastreamer2 index 50e226c6b..5d245fe6c 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 50e226c6baaba262b68bbe1292397558f2d55407 +Subproject commit 5d245fe6c0a56ac49fcde17988395f6332651e66 From 4942d64689b4cb77ff6e4d157c9787696e0de088 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Mon, 17 Aug 2015 15:06:59 +0200 Subject: [PATCH 069/134] Find for Gettext and libintl only if NLS is enbled --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 30642dcd8..737c15648 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,7 +127,6 @@ if(ENABLE_GTK_UI) set(GTK2_ADDITIONAL_SUFFIXES "../lib/glib-2.0/include" "../lib/gtk-2.0/include") endif() find_package(GTK2 2.18 REQUIRED gtk) - find_package(Intl REQUIRED) if(ENABLE_ASSISTANT AND GTK2_VERSION VERSION_LESS 2.22) message(WARNING "You need at least GTK 2.22 to enable the assistant") set(ENABLE_ASSISTANT OFF CACHE BOOL "Turn on assistant compiling." FORCE) @@ -136,10 +135,10 @@ endif() if(ENABLE_ASSISTANT) set(BUILD_WIZARD 1) endif() -find_package(Gettext) if(ENABLE_NLS) find_package(Gettext REQUIRED) find_package(Intl REQUIRED) + include_directories(${INTL_INCLUDE_DIRS}) endif() From cb2d37fd6e34155d92fd2575c63ac68c2aa36d4b Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 17 Aug 2015 17:23:16 +0200 Subject: [PATCH 070/134] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 5d245fe6c..ba56966dd 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 5d245fe6c0a56ac49fcde17988395f6332651e66 +Subproject commit ba56966ddc579e104f76be472d0b0b60d6e7c507 From 91d5a217cbfd9951dbf0cc67f8a3114565993404 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Tue, 18 Aug 2015 14:32:44 +0200 Subject: [PATCH 071/134] Fix ssrc in SDP for interop with Chrome. --- coreapi/bellesip_sal/sal_sdp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/coreapi/bellesip_sal/sal_sdp.c b/coreapi/bellesip_sal/sal_sdp.c index b9273f5fb..9313a3d43 100644 --- a/coreapi/bellesip_sal/sal_sdp.c +++ b/coreapi/bellesip_sal/sal_sdp.c @@ -267,7 +267,7 @@ static void stream_description_to_sdp ( belle_sdp_session_description_t *session /* insert DTLS session attribute if needed */ if ((stream->proto == SalProtoUdpTlsRtpSavpf) || (stream->proto == SalProtoUdpTlsRtpSavp)) { - char* ssrc_attribute = ms_strdup_printf("%u cname:%s",htonl(stream->rtp_ssrc),stream->rtcp_cname); + char* ssrc_attribute = ms_strdup_printf("%u cname:%s",stream->rtp_ssrc,stream->rtcp_cname); if ((stream->dtls_role != SalDtlsRoleInvalid) && (strlen(stream->dtls_fingerprint)>0)) { switch(stream->dtls_role) { case SalDtlsRoleIsClient: @@ -283,7 +283,7 @@ static void stream_description_to_sdp ( belle_sdp_session_description_t *session } belle_sdp_media_description_add_attribute(media_desc, belle_sdp_attribute_create("fingerprint",stream->dtls_fingerprint)); } - belle_sdp_media_description_add_attribute(media_desc, belle_sdp_attribute_create("ssrc",ssrc_attribute)); /* truc de Jehan a virer? */ + belle_sdp_media_description_add_attribute(media_desc, belle_sdp_attribute_create("ssrc",ssrc_attribute)); ms_free(ssrc_attribute); } From 95921606bb286375fe14c4134d437ffa14b38956 Mon Sep 17 00:00:00 2001 From: Margaux Clerc Date: Tue, 18 Aug 2015 16:30:19 +0200 Subject: [PATCH 072/134] Update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index ba56966dd..2b6697069 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit ba56966ddc579e104f76be472d0b0b60d6e7c507 +Subproject commit 2b6697069c534acf64f12771ba63ec3c1700edd0 From 358bc773993487aab874f77c8a8afed95fda7715 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 18 Aug 2015 16:49:03 +0200 Subject: [PATCH 073/134] Use LinphoneAudioRoute instead of MSAudioRoute in linphone to fix python's wrapper compilation --- coreapi/linphonecall.c | 4 ++-- coreapi/linphonecore.h | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 2c8975066..93670d2de 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -4138,8 +4138,8 @@ MSWebCam *linphone_call_get_video_device(const LinphoneCall *call) { } #endif -void linphone_call_set_audio_route(LinphoneCall *call, MSAudioRoute route) { +void linphone_call_set_audio_route(LinphoneCall *call, LinphoneAudioRoute route) { if (call != NULL && call->audiostream != NULL){ - audio_stream_set_audio_route(call->audiostream, route); + audio_stream_set_audio_route(call->audiostream, (MSAudioRoute) route); } } diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 158d5cc9d..c55bcfd6e 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -876,6 +876,19 @@ LINPHONE_PUBLIC void linphone_call_enable_echo_limiter(LinphoneCall *call, bool_ **/ LINPHONE_PUBLIC bool_t linphone_call_echo_limiter_enabled(const LinphoneCall *call); +/** + * Enum describing type of audio route. +**/ +enum _LinphoneAudioRoute { + LinphoneAudioRouteEarpiece = MSAudioRouteEarpiece, + LinphoneAudioRouteSpeaker = MSAudioRouteSpeaker +}; + +/** + * Enum describing type of audio route. +**/ +typedef enum _LinphoneAudioRoute LinphoneAudioRoute; + /** * Change the playback output device (currently only used for blackberry) * @param call @@ -883,7 +896,7 @@ LINPHONE_PUBLIC bool_t linphone_call_echo_limiter_enabled(const LinphoneCall *ca * * @ingroup call_control **/ -LINPHONE_PUBLIC void linphone_call_set_audio_route(LinphoneCall *call, MSAudioRoute route); +LINPHONE_PUBLIC void linphone_call_set_audio_route(LinphoneCall *call, LinphoneAudioRoute route); /*keep this in sync with mediastreamer2/msvolume.h*/ From c578229f92c9da940e01639df1998480180ab309 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Wed, 19 Aug 2015 10:27:26 +0200 Subject: [PATCH 074/134] Fix automatic wrapper generation. --- coreapi/linphonecore.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index c55bcfd6e..c0d48b1f3 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -878,6 +878,7 @@ LINPHONE_PUBLIC bool_t linphone_call_echo_limiter_enabled(const LinphoneCall *ca /** * Enum describing type of audio route. + * @ingroup call_control **/ enum _LinphoneAudioRoute { LinphoneAudioRouteEarpiece = MSAudioRouteEarpiece, @@ -886,6 +887,7 @@ enum _LinphoneAudioRoute { /** * Enum describing type of audio route. + * @ingroup call_control **/ typedef enum _LinphoneAudioRoute LinphoneAudioRoute; From ee44a22e62a581c90804223edb1669184eab4b8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Thu, 20 Aug 2015 10:08:58 +0200 Subject: [PATCH 075/134] Fix clickable link in chatroom on Windows and MacOS --- gtk/chat.c | 7 +------ gtk/main.c | 31 +++++++++++++++++++------------ 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/gtk/chat.c b/gtk/chat.c index 3b21d4a35..05f13afe3 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -411,12 +411,7 @@ static gboolean link_event_handler(GtkTextTag *tag, GObject *text_view,GdkEvent gtk_text_iter_forward_to_tag_toggle(&uri_end, tag); uri = gtk_text_iter_get_slice(&uri_begin, &uri_end); if(((GdkEventButton *)event)->button == 1) { - GError *error = NULL; - gtk_show_uri(NULL, uri, gdk_event_get_time(event), &error); - if(error) { - g_warning("Could not open %s from chat: %s", uri, error->message); - g_error_free(error); - } + linphone_gtk_open_browser(uri); } else if(((GdkEventButton *)event)->button == 3) { GtkMenu *menu = GTK_MENU(g_object_get_data(text_view, "link_ctx_menu")); g_object_set_data_full(G_OBJECT(menu), "uri", g_strdup(uri), g_free); diff --git a/gtk/main.c b/gtk/main.c index 4f0790181..acecf9086 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1466,19 +1466,26 @@ static void linphone_gtk_registration_state_changed(LinphoneCore *lc, LinphonePr update_registration_status(cfg,rs); } -void linphone_gtk_open_browser(const char *url){ - /*in gtk 2.16, gtk_show_uri does not work...*/ -#ifndef WIN32 -#if GTK_CHECK_VERSION(2,18,3) - gtk_show_uri(NULL,url,GDK_CURRENT_TIME,NULL); -#else - char cl[255]; - snprintf(cl,sizeof(cl),"/usr/bin/x-www-browser %s",url); - g_spawn_command_line_async(cl,NULL); -#endif -#else /*WIN32*/ - ShellExecute(0,"open",url,NULL,NULL,1); +void linphone_gtk_open_browser(const char *uri) { + const char *cmd_name = NULL; + char cmd_line[256]; + GError *error = NULL; + +#ifdef __APPLE__ + cmd_name = "/usr/bin/open"; +#elseif defined(WIN32) + cmd_name = "open"; #endif + if(cmd_name) { + g_snprintf(cmd_line, sizeof(cmd_line), "%s %s", cmd_name, uri); + g_spawn_command_line_async(cmd_line, &error); + } else { + gtk_show_uri(NULL, uri, GDK_CURRENT_TIME, &error); + } + if(error) { + g_warning("Could not open %s: %s", uri, error->message); + g_error_free(error); + } } void linphone_gtk_link_to_website(GtkWidget *item){ From a81d673f94b3d82899734bfb6c8d5625ba34dfce Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 20 Aug 2015 12:02:37 +0200 Subject: [PATCH 076/134] Added API to get the meta RTP transports + test to check we can append a RTP transport modifier on it --- .gitignore | 3 + coreapi/linphonecall.c | 40 ++++++++++++- coreapi/linphonecore.h | 38 +++++++++++- tester/call_tester.c | 132 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 210 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index be3581420..d662f5ade 100644 --- a/.gitignore +++ b/.gitignore @@ -90,3 +90,6 @@ tester/record-call_with_file_player.wav tester/ZIDCache*.xml tester/stereo-record.wav +coreapi/bellesip_sal/.dirstamp +coreapi/ldap/.dirstamp + diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 93670d2de..516617141 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -2009,6 +2009,7 @@ void linphone_call_init_audio_stream(LinphoneCall *call){ ms_free(cname); rtp_session_set_symmetric_rtp(audiostream->ms.sessions.rtp_session,linphone_core_symmetric_rtp_enabled(lc)); setup_dtls_params(call, &audiostream->ms); + media_stream_reclaim_sessions(&audiostream->ms, &call->sessions[0]); }else{ call->audiostream=audio_stream_new_with_sessions(&call->sessions[0]); } @@ -2108,8 +2109,8 @@ void linphone_call_init_video_stream(LinphoneCall *call){ video_stream_set_rtcp_information(call->videostream, cname, rtcp_tool); ms_free(cname); rtp_session_set_symmetric_rtp(call->videostream->ms.sessions.rtp_session,linphone_core_symmetric_rtp_enabled(lc)); - setup_dtls_params(call, &call->videostream->ms); + media_stream_reclaim_sessions(&call->videostream->ms, &call->sessions[1]); }else{ call->videostream=video_stream_new_with_sessions(&call->sessions[1]); } @@ -4143,3 +4144,40 @@ void linphone_call_set_audio_route(LinphoneCall *call, LinphoneAudioRoute route) audio_stream_set_audio_route(call->audiostream, (MSAudioRoute) route); } } + +int linphone_call_get_stream_count(LinphoneCall *call) { + // Revisit when multiple media streams will be implemented + return 2; +} + +MSFormatType linphone_call_get_stream_type(LinphoneCall *call, int stream_index) { + // Revisit when multiple media streams will be implemented + if (stream_index == 0) { + return MSAudio; + } + return MSVideo; +} + +RtpTransport* linphone_call_get_meta_rtp_transport(LinphoneCall *call, int stream_index) { + RtpTransport *meta_rtp; + RtpTransport *meta_rtcp; + + if (!call || stream_index < 0 || stream_index >= linphone_call_get_stream_count(call)) { + return NULL; + } + + rtp_session_get_transports(call->sessions[stream_index].rtp_session, &meta_rtp, &meta_rtcp); + return meta_rtp; +} + +RtpTransport* linphone_call_get_meta_rtcp_transport(LinphoneCall *call, int stream_index) { + RtpTransport *meta_rtp; + RtpTransport *meta_rtcp; + + if (!call || stream_index < 0 || stream_index >= linphone_call_get_stream_count(call)) { + return NULL; + } + + rtp_session_get_transports(call->sessions[stream_index].rtp_session, &meta_rtp, &meta_rtcp); + return meta_rtcp; +} \ No newline at end of file diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index c0d48b1f3..db795a295 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -898,7 +898,43 @@ typedef enum _LinphoneAudioRoute LinphoneAudioRoute; * * @ingroup call_control **/ -LINPHONE_PUBLIC void linphone_call_set_audio_route(LinphoneCall *call, LinphoneAudioRoute route); +LINPHONE_PUBLIC void linphone_call_set_audio_route(LinphoneCall *call, LinphoneAudioRoute route); + +/** + * Returns the number of stream for the given call. + * Currently there is only two (Audio, Video), but later there will be more. + * @param call + * + * @return 2 +**/ +LINPHONE_PUBLIC int linphone_call_get_stream_count(LinphoneCall *call); + +/** + * Returns the type of stream for the given stream index. + * @param call + * @param stream_index + * + * @return MsAudio if stream_index = 0, MsVideo otherwise +**/ +LINPHONE_PUBLIC MSFormatType linphone_call_get_stream_type(LinphoneCall *call, int stream_index); + +/** + * Returns the meta rtp transport for the given stream index. + * @param call + * @param stream_index + * + * @return a pointer to the meta rtp transport if it exists, NULL otherwise +**/ +LINPHONE_PUBLIC RtpTransport* linphone_call_get_meta_rtp_transport(LinphoneCall *call, int stream_index); + +/** + * Returns the meta rtcp transport for the given stream index. + * @param call + * @param stream_index + * + * @return a pointer to the meta rtcp transport if it exists, NULL otherwise +**/ +LINPHONE_PUBLIC RtpTransport* linphone_call_get_meta_rtcp_transport(LinphoneCall *call, int stream_index); /*keep this in sync with mediastreamer2/msvolume.h*/ diff --git a/tester/call_tester.c b/tester/call_tester.c index fbe81b2b6..6b3982a7d 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -33,6 +33,16 @@ #endif #endif +int static min(int a, int b) { + if (a < b) return a; + return b; +} + +int static max(int a, int b) { + if (a < b) return b; + return a; +} + static void srtp_call(void); static char *create_filepath(const char *dir, const char *filename, const char *ext); @@ -4430,6 +4440,125 @@ end: linphone_core_manager_destroy(pauline); } +typedef struct _RtpTransportModifierData { + int packetSentCount; + int packetReceivedCount; +} RtpTransportModifierData; + +static int rtptm_on_send(RtpTransportModifier *rtptm, mblk_t *msg) { + RtpTransportModifierData *data = rtptm->data; + data->packetSentCount += 1; + /* /!\ DO NOT RETURN 0 or the packet will never leave /!\ */ + return msgdsize(msg); +} + +static int rtptm_on_receive(RtpTransportModifier *rtptm, mblk_t *msg) { + RtpTransportModifierData *data = rtptm->data; + data->packetReceivedCount += 1; + return 0; +} + +static void rtptm_destroy(RtpTransportModifier *rtptm) { + // Do nothing, we'll free it later +} + +void static call_state_changed_4(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState cstate, const char *msg){ + if (cstate == LinphoneCallIncomingReceived || cstate == LinphoneCallOutgoingProgress) { + RtpTransport *rtpt = NULL; + RtpTransportModifierData *data = ms_new0(RtpTransportModifierData, 1); + RtpTransportModifier *rtptm = ms_new0(RtpTransportModifier, 1); + + rtpt = linphone_call_get_meta_rtp_transport(call, 0); + rtptm->data = data; + rtptm->t_process_on_send = rtptm_on_send; + rtptm->t_process_on_receive = rtptm_on_receive; + rtptm->t_destroy = rtptm_destroy; + meta_rtp_transport_append_modifier(rtpt, rtptm); + call->user_data = rtptm; + } +} + +static void call_with_custom_rtp_modifier(void) { + LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); + LinphoneCall* call_pauline; + LinphoneCall* call_marie; + const rtp_stats_t * stats; + bool_t call_ok; + LinphoneCoreVTable * v_table; + RtpTransportModifier *rtptm_marie = NULL; + RtpTransportModifier *rtptm_pauline = NULL; + RtpTransportModifierData *data_marie = NULL; + RtpTransportModifierData *data_pauline = NULL; + + v_table = linphone_core_v_table_new(); + v_table->call_state_changed=call_state_changed_4; + linphone_core_add_listener(pauline->lc,v_table); + v_table = linphone_core_v_table_new(); + v_table->call_state_changed=call_state_changed_4; + linphone_core_add_listener(marie->lc,v_table); + + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); + + if (!call_ok) goto end; + + wait_for_until(pauline->lc, marie->lc, NULL, 5, 3000); + + call_pauline = linphone_core_get_current_call(pauline->lc); + rtptm_pauline = (RtpTransportModifier *)call_pauline->user_data; + call_marie = linphone_core_get_current_call(marie->lc); + rtptm_marie = (RtpTransportModifier *)call_marie->user_data; + + linphone_core_pause_call(pauline->lc,call_pauline); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); + + /*stay in pause a little while in order to generate traffic*/ + wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); + + linphone_core_resume_call(pauline->lc,call_pauline); + + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + /*same here: wait a while for a bit of a traffic, we need to receive a RTCP packet*/ + wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); + + /*since RTCP streams are reset when call is paused/resumed, there should be no loss at all*/ + stats = rtp_session_get_stats(call_pauline->sessions->rtp_session); + BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); + + linphone_core_terminate_all_calls(pauline->lc); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + + BC_ASSERT_PTR_NOT_NULL(rtptm_marie); + BC_ASSERT_PTR_NOT_NULL(rtptm_pauline); + data_marie = (RtpTransportModifierData *)rtptm_marie->data; + data_pauline = (RtpTransportModifierData *)rtptm_pauline->data; + + BC_ASSERT_PTR_NOT_NULL(data_marie); + BC_ASSERT_PTR_NOT_NULL(data_pauline); + ms_message("Marie sent %i RTP packets and received %i", data_marie->packetSentCount, data_marie->packetReceivedCount); + ms_message("Pauline sent %i RTP packets and received %i", data_pauline->packetSentCount, data_pauline->packetReceivedCount); + // There will be a few RTP packets sent on marie's side before the call is ended at pauline's request, so we need the threshold + BC_ASSERT_TRUE(max(data_pauline->packetReceivedCount, data_marie->packetSentCount) - min(data_pauline->packetReceivedCount, data_marie->packetSentCount) < 8); + BC_ASSERT_TRUE(data_marie->packetReceivedCount == data_pauline->packetSentCount); + +end: + if (data_pauline) { + ms_free(data_pauline); + } + ms_free(rtptm_pauline); + if (data_marie) { + ms_free(data_marie); + } + ms_free(rtptm_marie); + + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); +} + test_t call_tests[] = { { "Early declined call", early_declined_call }, { "Call declined", call_declined }, @@ -4557,7 +4686,8 @@ test_t call_tests[] = { { "Simple mono call with opus", simple_mono_call_opus }, { "Call with FQDN in SDP", call_with_fqdn_in_sdp}, { "Call with RTP IO mode", call_with_rtp_io_mode }, - { "Call with generic NACK RTCP feedback", call_with_generic_nack_rtcp_feedback } + { "Call with generic NACK RTCP feedback", call_with_generic_nack_rtcp_feedback }, + { "Call with custom RTP Modifier", call_with_custom_rtp_modifier } }; test_suite_t call_test_suite = { From 6b9fe077ed95d439b09a4e7385d3841ba2f68b92 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Thu, 20 Aug 2015 16:16:08 +0200 Subject: [PATCH 077/134] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 2b6697069..07eeb876c 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 2b6697069c534acf64f12771ba63ec3c1700edd0 +Subproject commit 07eeb876c23402422d23efa6880420fa0c90d35a From 06575db0aeb84f7b23cc38a9aad3cf31364b2525 Mon Sep 17 00:00:00 2001 From: Johan Pascal Date: Thu, 20 Aug 2015 23:50:41 +0200 Subject: [PATCH 078/134] Add codec2 capabilities (when mscodec2 plugin is present) - update oRTP and ms2 --- build/android/Android.mk | 5 +++++ coreapi/linphonecore.c | 2 ++ coreapi/linphonecore_jni.cc | 6 ++++++ mediastreamer2 | 2 +- oRTP | 2 +- 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/build/android/Android.mk b/build/android/Android.mk index 9fe43d362..9dfd049fa 100755 --- a/build/android/Android.mk +++ b/build/android/Android.mk @@ -173,6 +173,11 @@ LOCAL_CFLAGS += -DHAVE_SILK LOCAL_STATIC_LIBRARIES += libmssilk endif +ifeq ($(BUILD_CODEC2),1) +LOCAL_CFLAGS += -DHAVE_CODEC2 +LOCAL_STATIC_LIBRARIES += libcodec2 libmscodec2 +endif + ifneq ($(BUILD_WEBRTC_AECM)$(BUILD_WEBRTC_ISAC),00) LOCAL_CFLAGS += -DHAVE_WEBRTC LOCAL_STATIC_LIBRARIES += libmswebrtc diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 2dfe46e8c..618322a2b 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -1565,6 +1565,8 @@ static void linphone_core_register_default_codecs(LinphoneCore *lc){ linphone_core_register_payload_type(lc,&payload_type_aal2_g726_24,NULL,FALSE); linphone_core_register_payload_type(lc,&payload_type_aal2_g726_32,NULL,FALSE); linphone_core_register_payload_type(lc,&payload_type_aal2_g726_40,NULL,FALSE); + linphone_core_register_payload_type(lc,&payload_type_codec2,NULL,FALSE); + diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 3f43bb41d..ab34a3604 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -58,6 +58,9 @@ extern "C" void libmsbcg729_init(); #ifdef HAVE_WEBRTC extern "C" void libmswebrtc_init(); #endif +#ifdef HAVE_CODEC2 +extern "C" void libmscodec2_init(); +#endif #include #endif /*ANDROID*/ @@ -1142,6 +1145,9 @@ extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_newLinphoneCore(JNIEnv* #ifdef HAVE_WEBRTC libmswebrtc_init(); #endif +#ifdef HAVE_CODEC2 + libmscodec2_init(); +#endif jobject core = env->NewGlobalRef(thiz); jlong nativePtr = (jlong)linphone_core_new(vTable, userConfig, factoryConfig, core); diff --git a/mediastreamer2 b/mediastreamer2 index 07eeb876c..588b22dba 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 07eeb876c23402422d23efa6880420fa0c90d35a +Subproject commit 588b22dba73d04fa523f14623fd9f38cb08cc86a diff --git a/oRTP b/oRTP index 714ae3311..8409812bd 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit 714ae33119397055bc0509ea78a3651a3d1b58d5 +Subproject commit 8409812bdf023e5f0b10a2d0644d7bf96603d8d2 From 5c38f6310f59c2d0b1840cd636bc80971590c8d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Fri, 21 Aug 2015 09:53:49 +0200 Subject: [PATCH 079/134] Update ms2 (fix compilation of mkvstream on MacOS) --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 588b22dba..295f179bc 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 588b22dba73d04fa523f14623fd9f38cb08cc86a +Subproject commit 295f179bc724ae7b8b9bf7ac78e76d4f8acd015e From 81dcfc2d51afa5f30b91655e57adcc20fa5c17e7 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 21 Aug 2015 10:05:47 +0200 Subject: [PATCH 080/134] Remove min/max from test, using existing MIN/MAX --- tester/call_tester.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/tester/call_tester.c b/tester/call_tester.c index 6b3982a7d..cc1e24756 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -33,16 +33,6 @@ #endif #endif -int static min(int a, int b) { - if (a < b) return a; - return b; -} - -int static max(int a, int b) { - if (a < b) return b; - return a; -} - static void srtp_call(void); static char *create_filepath(const char *dir, const char *filename, const char *ext); @@ -4542,7 +4532,7 @@ static void call_with_custom_rtp_modifier(void) { ms_message("Marie sent %i RTP packets and received %i", data_marie->packetSentCount, data_marie->packetReceivedCount); ms_message("Pauline sent %i RTP packets and received %i", data_pauline->packetSentCount, data_pauline->packetReceivedCount); // There will be a few RTP packets sent on marie's side before the call is ended at pauline's request, so we need the threshold - BC_ASSERT_TRUE(max(data_pauline->packetReceivedCount, data_marie->packetSentCount) - min(data_pauline->packetReceivedCount, data_marie->packetSentCount) < 8); + BC_ASSERT_TRUE(MAX(data_pauline->packetReceivedCount, data_marie->packetSentCount) - MIN(data_pauline->packetReceivedCount, data_marie->packetSentCount) < 8); BC_ASSERT_TRUE(data_marie->packetReceivedCount == data_pauline->packetSentCount); end: From f3dde2cbd596c32fc4ee6af06359cbe9f627a469 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Fri, 21 Aug 2015 11:04:51 +0200 Subject: [PATCH 081/134] upate ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 295f179bc..e4b458918 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 295f179bc724ae7b8b9bf7ac78e76d4f8acd015e +Subproject commit e4b45891827da158677b417e225737bee182f4da From 04c77d2b21bf8db4143b2e09814d583a4b966fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Fri, 21 Aug 2015 11:17:06 +0200 Subject: [PATCH 082/134] Realy fixes hypertext link in chat rooms on Windows --- gtk/main.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/gtk/main.c b/gtk/main.c index acecf9086..bf9dcd787 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1467,25 +1467,29 @@ static void linphone_gtk_registration_state_changed(LinphoneCore *lc, LinphonePr } void linphone_gtk_open_browser(const char *uri) { - const char *cmd_name = NULL; - char cmd_line[256]; - GError *error = NULL; - #ifdef __APPLE__ - cmd_name = "/usr/bin/open"; -#elseif defined(WIN32) - cmd_name = "open"; -#endif - if(cmd_name) { - g_snprintf(cmd_line, sizeof(cmd_line), "%s %s", cmd_name, uri); - g_spawn_command_line_async(cmd_line, &error); - } else { - gtk_show_uri(NULL, uri, GDK_CURRENT_TIME, &error); - } - if(error) { + GError *error = NULL; + char cmd_line[256]; + + g_snprintf(cmd_line, sizeof(cmd_line), "%s %s", "/usr/bin/open", uri); + g_spawn_command_line_async(cmd_line, &error); + if (error) { g_warning("Could not open %s: %s", uri, error->message); g_error_free(error); } +#elif defined(WIN32) + HINSTANCE instance = ShellExecute(NULL, "open", uri, NULL, NULL, SW_SHOWNORMAL); + if (instance <= 32) { + g_warning("Could not open %s (error #%i)", uri, instance); + } +#else + GError *error = NULL; + gtk_show_uri(NULL, uri, GDK_CURRENT_TIME, &error); + if (error) { + g_warning("Could not open %s: %s", uri, error->message); + g_error_free(error); + } +#endif } void linphone_gtk_link_to_website(GtkWidget *item){ From aa37a963eb9add901ef07e289d4ee5d2158cce74 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 21 Aug 2015 16:28:50 +0200 Subject: [PATCH 083/134] Improved linphone_call_stats_get_rtp_stats and call with custom RTP transport modifier --- coreapi/linphonecall.c | 43 ++++++---- coreapi/linphonecore.h | 3 +- tester/call_tester.c | 182 +++++++++++++++++++++++++++++++++-------- 3 files changed, 181 insertions(+), 47 deletions(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 516617141..1c60558c9 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -3088,6 +3088,17 @@ static void linphone_call_log_fill_stats(LinphoneCallLog *log, MediaStream *st){ } } +static void update_rtp_stats(LinphoneCall *call, int stream_index) { + if (stream_index >= linphone_call_get_stream_count(call)) { + return; + } + + if (call->sessions[stream_index].rtp_session) { + const rtp_stats_t *stats = rtp_session_get_stats(call->sessions[stream_index].rtp_session); + memcpy(&call->stats[stream_index].rtp_stats, stats, sizeof(*stats)); + } +} + static void linphone_call_stop_audio_stream(LinphoneCall *call) { if (call->audiostream!=NULL) { linphone_reporting_update_media_info(call, LINPHONE_CALL_STATS_AUDIO); @@ -3107,6 +3118,7 @@ static void linphone_call_stop_audio_stream(LinphoneCall *call) { linphone_call_remove_from_conf(call); } audio_stream_stop(call->audiostream); + update_rtp_stats(call, 0); rtp_session_unregister_event_queue(call->sessions[0].rtp_session, call->audiostream_app_evq); ortp_ev_queue_flush(call->audiostream_app_evq); ortp_ev_queue_destroy(call->audiostream_app_evq); @@ -3124,6 +3136,7 @@ static void linphone_call_stop_video_stream(LinphoneCall *call) { linphone_call_log_fill_stats(call->log,(MediaStream*)call->videostream); video_stream_stop(call->videostream); call->videostream=NULL; + update_rtp_stats(call, 1); rtp_session_unregister_event_queue(call->sessions[1].rtp_session, call->videostream_app_evq); ortp_ev_queue_flush(call->videostream_app_evq); ortp_ev_queue_destroy(call->videostream_app_evq); @@ -3317,19 +3330,20 @@ float linphone_call_get_average_quality(LinphoneCall *call){ return -1; } -static void update_local_stats(LinphoneCallStats *stats, MediaStream *stream){ - const MSQualityIndicator *qi=media_stream_get_quality_indicator(stream); +static void update_local_stats(LinphoneCallStats *stats, MediaStream *stream) { + const MSQualityIndicator *qi = media_stream_get_quality_indicator(stream); if (qi) { stats->local_late_rate=ms_quality_indicator_get_local_late_rate(qi); stats->local_loss_rate=ms_quality_indicator_get_local_loss_rate(qi); } + media_stream_get_local_rtp_stats(stream, &stats->rtp_stats); } /** * Access last known statistics for audio stream, for a given call. **/ const LinphoneCallStats *linphone_call_get_audio_stats(LinphoneCall *call) { - LinphoneCallStats *stats=&call->stats[LINPHONE_CALL_STATS_AUDIO]; + LinphoneCallStats *stats = &call->stats[LINPHONE_CALL_STATS_AUDIO]; if (call->audiostream){ update_local_stats(stats,(MediaStream*)call->audiostream); } @@ -3340,7 +3354,7 @@ const LinphoneCallStats *linphone_call_get_audio_stats(LinphoneCall *call) { * Access last known statistics for video stream, for a given call. **/ const LinphoneCallStats *linphone_call_get_video_stats(LinphoneCall *call) { - LinphoneCallStats *stats=&call->stats[LINPHONE_CALL_STATS_VIDEO]; + LinphoneCallStats *stats = &call->stats[LINPHONE_CALL_STATS_VIDEO]; if (call->videostream){ update_local_stats(stats,(MediaStream*)call->videostream); } @@ -3474,18 +3488,14 @@ float linphone_call_stats_get_receiver_interarrival_jitter(const LinphoneCallSta return (float)report_block_get_interarrival_jitter(rrb) / (float)pt->clock_rate; } -rtp_stats_t linphone_call_stats_get_rtp_stats(const LinphoneCallStats *stats, LinphoneCall *call) { +rtp_stats_t linphone_call_stats_get_rtp_stats(const LinphoneCallStats *stats) { rtp_stats_t rtp_stats; memset(&rtp_stats, 0, sizeof(rtp_stats)); - if (stats && call) { - if (stats->type == LINPHONE_CALL_STATS_AUDIO && call->audiostream != NULL) - audio_stream_get_local_rtp_stats(call->audiostream, &rtp_stats); - #ifdef VIDEO_ENABLED - else if (call->videostream != NULL) - video_stream_get_local_rtp_stats(call->videostream, &rtp_stats); - #endif + if (stats) { + memcpy(&rtp_stats, &stats->rtp_stats, sizeof(stats->rtp_stats)); } + return rtp_stats; } @@ -3494,7 +3504,7 @@ rtp_stats_t linphone_call_stats_get_rtp_stats(const LinphoneCallStats *stats, Li * @return The cumulative number of late packets **/ uint64_t linphone_call_stats_get_late_packets_cumulative_number(const LinphoneCallStats *stats, LinphoneCall *call) { - return linphone_call_stats_get_rtp_stats(stats, call).outoftime; + return linphone_call_stats_get_rtp_stats(stats).outoftime; } /** @@ -3578,12 +3588,13 @@ static void report_bandwidth(LinphoneCall *call, MediaStream *as, MediaStream *v call->stats[LINPHONE_CALL_STATS_AUDIO].updated|=LINPHONE_CALL_STATS_PERIODICAL_UPDATE; linphone_core_notify_call_stats_updated(call->core, call, &call->stats[LINPHONE_CALL_STATS_AUDIO]); call->stats[LINPHONE_CALL_STATS_AUDIO].updated=0; + update_local_stats(&call->stats[LINPHONE_CALL_STATS_AUDIO], as); } if (vs_active) { call->stats[LINPHONE_CALL_STATS_VIDEO].updated|=LINPHONE_CALL_STATS_PERIODICAL_UPDATE; linphone_core_notify_call_stats_updated(call->core, call, &call->stats[LINPHONE_CALL_STATS_VIDEO]); call->stats[LINPHONE_CALL_STATS_VIDEO].updated=0; - + update_local_stats(&call->stats[LINPHONE_CALL_STATS_VIDEO], vs); } ms_message( "Bandwidth usage for call [%p]:\n" @@ -4147,7 +4158,11 @@ void linphone_call_set_audio_route(LinphoneCall *call, LinphoneAudioRoute route) int linphone_call_get_stream_count(LinphoneCall *call) { // Revisit when multiple media streams will be implemented +#ifdef VIDEO_ENABLED return 2; +#else + return 1; +#endif } MSFormatType linphone_call_get_stream_type(LinphoneCall *call, int stream_index) { diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index db795a295..141fc9b5d 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -551,6 +551,7 @@ struct _LinphoneCallStats { int updated; /**< Tell which RTCP packet has been updated (received_rtcp or sent_rtcp). Can be either LINPHONE_CALL_STATS_RECEIVED_RTCP_UPDATE or LINPHONE_CALL_STATS_SENT_RTCP_UPDATE */ float rtcp_download_bandwidth; /**data; + int i = 0; + int size = msg->b_wptr - msg->b_rptr; + unsigned char *src = msg->b_rptr; + rtp_header_t *rtp = (rtp_header_t*)msg->b_rptr; + + if (rtp->version == 0) { + // This is probably a STUN packet, so don't count it (oRTP won't) and don't encrypt it either + return size; + } + data->packetSentCount += 1; + + // Just for fun, let's do a XOR encryption + for (i = 0; i < size; i++) { + src[0] ^= XOR_KEY[i % strlen(XOR_KEY)]; + src++; + } + /* /!\ DO NOT RETURN 0 or the packet will never leave /!\ */ return msgdsize(msg); } +// Callback called when a packet is on it's way to be received +// This is where we can do some changes on it, like decrypt it static int rtptm_on_receive(RtpTransportModifier *rtptm, mblk_t *msg) { RtpTransportModifierData *data = rtptm->data; + int i = 0; + int size = msg->b_wptr - msg->b_rptr; + unsigned char *src = msg->b_rptr; + rtp_header_t *rtp = (rtp_header_t*)msg->b_rptr; + + if (rtp->version == 0) { + // This is probably a STUN packet, so don't count it (oRTP won't) and don't decrypt it either + return size; + } + data->packetReceivedCount += 1; - return 0; + + // Do the XOR decryption + for (i = 0; i < size; i++) { + src[0] ^= XOR_KEY[i % strlen(XOR_KEY)]; + src++; + } + + /* /!\ DO NOT RETURN 0 or the packet willbe dropped /!\ */ + return msgdsize(msg); } +// This callback is called when the transport modifier is being destroyed +// It is a good place to free the resources allocated for the transport modifier static void rtptm_destroy(RtpTransportModifier *rtptm) { - // Do nothing, we'll free it later + // Do nothing, we'll free it later because we need to access the RtpTransportModifierData structure after the call is ended } -void static call_state_changed_4(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState cstate, const char *msg){ +// This is the callback called when the state of the call change +void static call_state_changed_4(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState cstate, const char *msg) { + int i = 0; + + // To add a custom RTP transport modifier, we have to do it before the call is running, but after the RTP session is created. if (cstate == LinphoneCallIncomingReceived || cstate == LinphoneCallOutgoingProgress) { RtpTransport *rtpt = NULL; RtpTransportModifierData *data = ms_new0(RtpTransportModifierData, 1); RtpTransportModifier *rtptm = ms_new0(RtpTransportModifier, 1); - - rtpt = linphone_call_get_meta_rtp_transport(call, 0); rtptm->data = data; rtptm->t_process_on_send = rtptm_on_send; rtptm->t_process_on_receive = rtptm_on_receive; rtptm->t_destroy = rtptm_destroy; - meta_rtp_transport_append_modifier(rtpt, rtptm); + + // Here we iterate on each meta rtp transport available + for (i = 0; i < linphone_call_get_stream_count(call); i++) { + MSFormatType type; + + rtpt = linphone_call_get_meta_rtp_transport(call, i); + + // If we wanted, we also could get the RTCP meta transports like this: + // rtcpt = linphone_call_get_meta_rtcp_transport(call, i); + + // If you want to know which stream meta RTP transport is the current one, you can use + type = linphone_call_get_stream_type(call, i); + // Currently there is only MSAudio and MSVideo types, but this could change later + if (type == MSAudio) { + // And now we append our RTP transport modifier to the current list of modifiers + meta_rtp_transport_append_modifier(rtpt, rtptm); + } else if (type == MSVideo) { + // Because the call of this test is audio only, we don't have to append our modifier to the meta RTP transport from the video stream + } + + } + // We save the pointer to our RtpTransportModifier in the call user_data to be able to get to it later call->user_data = rtptm; } } -static void call_with_custom_rtp_modifier(void) { +static void custom_rtp_modifier(bool_t pauseResumeTest, bool_t recordTest) { + // This will initialize two linphone core using information contained in the marie_rc and pauline_rc files and wait for them to be correctly registered LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); - LinphoneCall* call_pauline; - LinphoneCall* call_marie; + LinphoneCall* call_pauline = NULL; + LinphoneCall* call_marie = NULL; const rtp_stats_t * stats; bool_t call_ok; LinphoneCoreVTable * v_table; @@ -4481,6 +4550,7 @@ static void call_with_custom_rtp_modifier(void) { RtpTransportModifierData *data_marie = NULL; RtpTransportModifierData *data_pauline = NULL; + // We create a new vtable to listen only to the call state changes, in order to plug our RTP Transport Modifier when the call will be established v_table = linphone_core_v_table_new(); v_table->call_state_changed=call_state_changed_4; linphone_core_add_listener(pauline->lc,v_table); @@ -4488,40 +4558,49 @@ static void call_with_custom_rtp_modifier(void) { v_table->call_state_changed=call_state_changed_4; linphone_core_add_listener(marie->lc,v_table); + // Now the the call should be running (call state StreamsRunning) BC_ASSERT_TRUE((call_ok=call(pauline,marie))); if (!call_ok) goto end; + // This only wait for 3 seconds in order to generate traffic for the test wait_for_until(pauline->lc, marie->lc, NULL, 5, 3000); - call_pauline = linphone_core_get_current_call(pauline->lc); + // Ref the call to keep the pointer valid even after the call is release + call_pauline = linphone_call_ref(linphone_core_get_current_call(pauline->lc)); rtptm_pauline = (RtpTransportModifier *)call_pauline->user_data; - call_marie = linphone_core_get_current_call(marie->lc); + call_marie = linphone_call_ref(linphone_core_get_current_call(marie->lc)); rtptm_marie = (RtpTransportModifier *)call_marie->user_data; + + // This is for the pause/resume test, we don't do it in the call record test to be able to check the recorded call matches the file played + if (pauseResumeTest) { + linphone_core_pause_call(pauline->lc,call_pauline); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); - linphone_core_pause_call(pauline->lc,call_pauline); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); + /*stay in pause a little while in order to generate traffic*/ + wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); - /*stay in pause a little while in order to generate traffic*/ - wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); + linphone_core_resume_call(pauline->lc,call_pauline); - linphone_core_resume_call(pauline->lc,call_pauline); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + + /*same here: wait a while for a bit of a traffic, we need to receive a RTCP packet*/ + wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); - /*same here: wait a while for a bit of a traffic, we need to receive a RTCP packet*/ - wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); - - /*since RTCP streams are reset when call is paused/resumed, there should be no loss at all*/ - stats = rtp_session_get_stats(call_pauline->sessions->rtp_session); - BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); + /*since RTCP streams are reset when call is paused/resumed, there should be no loss at all*/ + stats = rtp_session_get_stats(call_pauline->sessions->rtp_session); + BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); + } + // We termine the call and check the stats to see if the call is correctly ended on both sides linphone_core_terminate_all_calls(pauline->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + // Now we can go fetch our custom structure and check the number of packets sent/received is the same on both sides BC_ASSERT_PTR_NOT_NULL(rtptm_marie); BC_ASSERT_PTR_NOT_NULL(rtptm_pauline); data_marie = (RtpTransportModifierData *)rtptm_marie->data; @@ -4529,13 +4608,29 @@ static void call_with_custom_rtp_modifier(void) { BC_ASSERT_PTR_NOT_NULL(data_marie); BC_ASSERT_PTR_NOT_NULL(data_pauline); - ms_message("Marie sent %i RTP packets and received %i", data_marie->packetSentCount, data_marie->packetReceivedCount); - ms_message("Pauline sent %i RTP packets and received %i", data_pauline->packetSentCount, data_pauline->packetReceivedCount); + ms_message("Marie sent %" PRIu64 " RTP packets and received %" PRIu64 " (through our modifier)", data_marie->packetSentCount, data_marie->packetReceivedCount); + ms_message("Pauline sent %" PRIu64 " RTP packets and received %" PRIu64 " (through our modifier)", data_pauline->packetSentCount, data_pauline->packetReceivedCount); // There will be a few RTP packets sent on marie's side before the call is ended at pauline's request, so we need the threshold - BC_ASSERT_TRUE(MAX(data_pauline->packetReceivedCount, data_marie->packetSentCount) - MIN(data_pauline->packetReceivedCount, data_marie->packetSentCount) < 8); + BC_ASSERT_TRUE(MAX(data_pauline->packetReceivedCount, data_marie->packetSentCount) - MIN(data_pauline->packetReceivedCount, data_marie->packetSentCount) < 50); BC_ASSERT_TRUE(data_marie->packetReceivedCount == data_pauline->packetSentCount); + // At this point, we know each packet that has been processed in the send callback of our RTP modifier also go through the recv callback of the remote. + + // Now we want to ensure that all sent RTP packets actually go through our RTP transport modifier and thus no packet leave without being processed (by any operation we might want to do on it) + { + const LinphoneCallStats *marie_stats = linphone_call_get_audio_stats(call_marie); + const LinphoneCallStats *pauline_stats = linphone_call_get_audio_stats(call_pauline); + rtp_stats_t marie_rtp_stats = linphone_call_stats_get_rtp_stats(marie_stats); + rtp_stats_t pauline_rtp_stats = linphone_call_stats_get_rtp_stats(pauline_stats); + ms_message("Marie sent %" PRIu64 " RTP packets and received %" PRIu64 " (for real)", marie_rtp_stats.packet_sent, marie_rtp_stats.packet_recv); + ms_message("Pauline sent %" PRIu64 " RTP packets and received %" PRIu64 " (for real)", pauline_rtp_stats.packet_sent, pauline_rtp_stats.packet_recv); + BC_ASSERT_TRUE(data_marie->packetReceivedCount == marie_rtp_stats.packet_recv); + BC_ASSERT_TRUE(data_marie->packetSentCount == marie_rtp_stats.packet_sent); + BC_ASSERT_TRUE(data_pauline->packetReceivedCount == pauline_rtp_stats.packet_recv); + BC_ASSERT_TRUE(data_pauline->packetSentCount == pauline_rtp_stats.packet_sent); + } end: + // Since we didn't free the resources of our RTP transport modifier in the rtptm_destroy callback, we'll do it here if (data_pauline) { ms_free(data_pauline); } @@ -4545,10 +4640,31 @@ end: } ms_free(rtptm_marie); + // Unref the previously ref calls + if (call_marie) { + linphone_call_unref(call_marie); + } + if (call_pauline) { + linphone_call_unref(call_pauline); + } + + // The test is finished, the linphone core are no longer needed, we can safely free them linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } +static void call_with_custom_rtp_modifier(void) { + custom_rtp_modifier(FALSE, FALSE); +} + +static void call_paused_resumed_with_custom_rtp_modifier(void) { + custom_rtp_modifier(TRUE, FALSE); +} + +static void call_record_with_custom_rtp_modifier(void) { + custom_rtp_modifier(FALSE, TRUE); +} + test_t call_tests[] = { { "Early declined call", early_declined_call }, { "Call declined", call_declined }, @@ -4677,7 +4793,9 @@ test_t call_tests[] = { { "Call with FQDN in SDP", call_with_fqdn_in_sdp}, { "Call with RTP IO mode", call_with_rtp_io_mode }, { "Call with generic NACK RTCP feedback", call_with_generic_nack_rtcp_feedback }, - { "Call with custom RTP Modifier", call_with_custom_rtp_modifier } + { "Call with custom RTP Modifier", call_with_custom_rtp_modifier }, + { "Call paused resumed with custom RTP Modifier", call_paused_resumed_with_custom_rtp_modifier }, + { "Call record with custom RTP Modifier", call_record_with_custom_rtp_modifier } }; test_suite_t call_test_suite = { From 7cbb44281c1ab12d90b3b712d2a9087df66207d2 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 21 Aug 2015 17:46:51 +0200 Subject: [PATCH 084/134] Added record test with custom RTP transport modifier but removed XOR encryption temporarily (doesn't work really great, have to rework it) --- tester/call_tester.c | 109 +++++++++++++++++++++++++++---------------- 1 file changed, 68 insertions(+), 41 deletions(-) diff --git a/tester/call_tester.c b/tester/call_tester.c index 3c234b640..1291d7612 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -4437,30 +4437,19 @@ typedef struct _RtpTransportModifierData { uint64_t packetReceivedCount; } RtpTransportModifierData; -const char *XOR_KEY = "BELLEDONNECOMMUNICATIONS"; - // Callback called when a packet is on it's way to be sent // This is where we can do some changes on it, like encrypt it static int rtptm_on_send(RtpTransportModifier *rtptm, mblk_t *msg) { RtpTransportModifierData *data = rtptm->data; - int i = 0; - int size = msg->b_wptr - msg->b_rptr; - unsigned char *src = msg->b_rptr; rtp_header_t *rtp = (rtp_header_t*)msg->b_rptr; if (rtp->version == 0) { // This is probably a STUN packet, so don't count it (oRTP won't) and don't encrypt it either - return size; + return msgdsize(msg); } data->packetSentCount += 1; - // Just for fun, let's do a XOR encryption - for (i = 0; i < size; i++) { - src[0] ^= XOR_KEY[i % strlen(XOR_KEY)]; - src++; - } - /* /!\ DO NOT RETURN 0 or the packet will never leave /!\ */ return msgdsize(msg); } @@ -4469,24 +4458,15 @@ static int rtptm_on_send(RtpTransportModifier *rtptm, mblk_t *msg) { // This is where we can do some changes on it, like decrypt it static int rtptm_on_receive(RtpTransportModifier *rtptm, mblk_t *msg) { RtpTransportModifierData *data = rtptm->data; - int i = 0; - int size = msg->b_wptr - msg->b_rptr; - unsigned char *src = msg->b_rptr; rtp_header_t *rtp = (rtp_header_t*)msg->b_rptr; if (rtp->version == 0) { // This is probably a STUN packet, so don't count it (oRTP won't) and don't decrypt it either - return size; + return msgdsize(msg); } data->packetReceivedCount += 1; - // Do the XOR decryption - for (i = 0; i < size; i++) { - src[0] ^= XOR_KEY[i % strlen(XOR_KEY)]; - src++; - } - /* /!\ DO NOT RETURN 0 or the packet willbe dropped /!\ */ return msgdsize(msg); } @@ -4549,43 +4529,61 @@ static void custom_rtp_modifier(bool_t pauseResumeTest, bool_t recordTest) { RtpTransportModifier *rtptm_pauline = NULL; RtpTransportModifierData *data_marie = NULL; RtpTransportModifierData *data_pauline = NULL; + // The following are only used for the record test + LinphonePlayer *player; + char *hellopath = bc_tester_res("sounds/ahbahouaismaisbon.wav"); // File to be played + char *recordpath = create_filepath(bc_tester_get_writable_dir_prefix(), "record-call_with_file_player", "wav"); // File to record the received sound + double similar = 1; // The factor of similarity between the played file and the one recorded + const double threshold = 0.9; // Minimum similarity value to consider the record file equal to the one sent // We create a new vtable to listen only to the call state changes, in order to plug our RTP Transport Modifier when the call will be established v_table = linphone_core_v_table_new(); - v_table->call_state_changed=call_state_changed_4; + v_table->call_state_changed = call_state_changed_4; linphone_core_add_listener(pauline->lc,v_table); v_table = linphone_core_v_table_new(); - v_table->call_state_changed=call_state_changed_4; + v_table->call_state_changed = call_state_changed_4; linphone_core_add_listener(marie->lc,v_table); + + if (recordTest) { // When we do the record test, we need a file player to play the content of a sound file + /*make sure the record file doesn't already exists, otherwise this test will append new samples to it*/ + unlink(recordpath); + + linphone_core_use_files(pauline->lc,TRUE); + linphone_core_set_play_file(pauline->lc,NULL); + linphone_core_set_record_file(pauline->lc,NULL); + + /*callee is recording and plays file*/ + linphone_core_use_files(marie->lc,TRUE); + linphone_core_set_play_file(marie->lc,NULL); + linphone_core_set_record_file(marie->lc,recordpath); + } // Now the the call should be running (call state StreamsRunning) BC_ASSERT_TRUE((call_ok=call(pauline,marie))); if (!call_ok) goto end; - - // This only wait for 3 seconds in order to generate traffic for the test - wait_for_until(pauline->lc, marie->lc, NULL, 5, 3000); // Ref the call to keep the pointer valid even after the call is release call_pauline = linphone_call_ref(linphone_core_get_current_call(pauline->lc)); - rtptm_pauline = (RtpTransportModifier *)call_pauline->user_data; call_marie = linphone_call_ref(linphone_core_get_current_call(marie->lc)); - rtptm_marie = (RtpTransportModifier *)call_marie->user_data; // This is for the pause/resume test, we don't do it in the call record test to be able to check the recorded call matches the file played if (pauseResumeTest) { + // This only wait for 3 seconds in order to generate traffic for the test + wait_for_until(pauline->lc, marie->lc, NULL, 5, 3000); + linphone_core_pause_call(pauline->lc,call_pauline); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallPausing, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneCallPausedByRemote, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallPaused, 1)); /*stay in pause a little while in order to generate traffic*/ wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); linphone_core_resume_call(pauline->lc,call_pauline); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 2)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 2)); /*same here: wait a while for a bit of a traffic, we need to receive a RTCP packet*/ wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); @@ -4593,16 +4591,42 @@ static void custom_rtp_modifier(bool_t pauseResumeTest, bool_t recordTest) { /*since RTCP streams are reset when call is paused/resumed, there should be no loss at all*/ stats = rtp_session_get_stats(call_pauline->sessions->rtp_session); BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); - } - // We termine the call and check the stats to see if the call is correctly ended on both sides - linphone_core_terminate_all_calls(pauline->lc); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + end_call(pauline, marie); + } else if (recordTest) { + player = linphone_call_get_player(call_pauline); + BC_ASSERT_PTR_NOT_NULL(player); + if (player) { + // This will ask marie to play the file + BC_ASSERT_EQUAL(linphone_player_open(player, hellopath, on_eof, pauline),0, int, "%d"); + BC_ASSERT_EQUAL(linphone_player_start(player), 0, int, "%d"); + } + /* This assert should be modified to be at least as long as the WAV file */ + BC_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &pauline->stat.number_of_player_eof, 1, 10000)); + /*wait one second more for transmission to be fully ended (transmission time + jitter buffer)*/ + wait_for_until(pauline->lc, marie->lc, NULL, 0, 1000); + + end_call(pauline, marie); + + BC_ASSERT_EQUAL(ms_audio_diff(hellopath, recordpath, &similar, audio_cmp_max_shift, NULL, NULL), 0, int, "%d"); + + BC_ASSERT_GREATER(similar, threshold, double, "%g"); + BC_ASSERT_LOWER(similar, 1.0, double, "%g"); + if (similar >= threshold && similar <= 1.0) { + // If the similarity value is between perfect (1) and our threshold (0.9), then we delete the file used for the record + remove(recordpath); + } + } else { + // This only wait for 3 seconds in order to generate traffic for the test + wait_for_until(pauline->lc, marie->lc, NULL, 5, 3000); + + // We termine the call and check the stats to see if the call is correctly ended on both sides + end_call(pauline, marie); + } // Now we can go fetch our custom structure and check the number of packets sent/received is the same on both sides - BC_ASSERT_PTR_NOT_NULL(rtptm_marie); - BC_ASSERT_PTR_NOT_NULL(rtptm_pauline); + rtptm_marie = (RtpTransportModifier *)call_marie->user_data; + rtptm_pauline = (RtpTransportModifier *)call_pauline->user_data; data_marie = (RtpTransportModifierData *)rtptm_marie->data; data_pauline = (RtpTransportModifierData *)rtptm_pauline->data; @@ -4651,6 +4675,9 @@ end: // The test is finished, the linphone core are no longer needed, we can safely free them linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); + + ms_free(recordpath); + ms_free(hellopath); } static void call_with_custom_rtp_modifier(void) { From 8b84c365403fcc7226b4d757f9c1d45220494076 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sat, 22 Aug 2015 00:26:59 +0200 Subject: [PATCH 085/134] fix test that broke after fixing a bug in ms2, which resulted in STUN packets not sent for recv-only video streams. --- mediastreamer2 | 2 +- tester/video_tester.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mediastreamer2 b/mediastreamer2 index e4b458918..3923d29b7 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit e4b45891827da158677b417e225737bee182f4da +Subproject commit 3923d29b76dc73666c0fdd2bdab7f9bc7ba2894c diff --git a/tester/video_tester.c b/tester/video_tester.c index 1b21488c5..80e5bc7cc 100644 --- a/tester/video_tester.c +++ b/tester/video_tester.c @@ -449,7 +449,7 @@ static void forked_outgoing_early_media_video_call_with_inactive_audio_test(void BC_ASSERT_EQUAL(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 0, float, "%f"); BC_ASSERT_EQUAL(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 0, float, "%f"); BC_ASSERT_EQUAL(linphone_call_get_audio_stats(marie2_call)->download_bandwidth, 0, float, "%f"); - BC_ASSERT_EQUAL(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 0, float, "%f"); + BC_ASSERT_LOWER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 3, float, "%f"); /*3 because of stun packets*/ BC_ASSERT_GREATER(linphone_call_get_video_stats(marie1_call)->download_bandwidth, 0, float, "%f"); BC_ASSERT_GREATER(linphone_call_get_video_stats(marie2_call)->download_bandwidth, 0, float, "%f"); @@ -465,8 +465,8 @@ static void forked_outgoing_early_media_video_call_with_inactive_audio_test(void wait_for_list(lcs, &dummy, 1, 3000); BC_ASSERT_GREATER(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 71, float, "%f"); BC_ASSERT_GREATER(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 71, float, "%f"); - BC_ASSERT_GREATER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 0, float, "%f"); - BC_ASSERT_GREATER(linphone_call_get_video_stats(marie1_call)->download_bandwidth, 0, float, "%f"); + BC_ASSERT_LOWER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 3, float, "%f"); + BC_ASSERT_LOWER(linphone_call_get_video_stats(marie1_call)->download_bandwidth, 3, float, "%f"); /* send an INFO in reverse side to check that dialogs are properly established */ info = linphone_core_create_info_message(marie1->lc); From 108b2c22555a1d3b73c2640524be5d2be45f3b85 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sun, 23 Aug 2015 19:12:50 +0200 Subject: [PATCH 086/134] fix test again --- mediastreamer2 | 2 +- tester/video_tester.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mediastreamer2 b/mediastreamer2 index 3923d29b7..40eedaea0 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 3923d29b76dc73666c0fdd2bdab7f9bc7ba2894c +Subproject commit 40eedaea06eb52b20ceab6de86de0a251be007e7 diff --git a/tester/video_tester.c b/tester/video_tester.c index 80e5bc7cc..91b90c7ff 100644 --- a/tester/video_tester.c +++ b/tester/video_tester.c @@ -449,7 +449,7 @@ static void forked_outgoing_early_media_video_call_with_inactive_audio_test(void BC_ASSERT_EQUAL(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 0, float, "%f"); BC_ASSERT_EQUAL(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 0, float, "%f"); BC_ASSERT_EQUAL(linphone_call_get_audio_stats(marie2_call)->download_bandwidth, 0, float, "%f"); - BC_ASSERT_LOWER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 3, float, "%f"); /*3 because of stun packets*/ + BC_ASSERT_LOWER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 11, float, "%f"); /*3 because of stun packets*/ BC_ASSERT_GREATER(linphone_call_get_video_stats(marie1_call)->download_bandwidth, 0, float, "%f"); BC_ASSERT_GREATER(linphone_call_get_video_stats(marie2_call)->download_bandwidth, 0, float, "%f"); @@ -465,8 +465,8 @@ static void forked_outgoing_early_media_video_call_with_inactive_audio_test(void wait_for_list(lcs, &dummy, 1, 3000); BC_ASSERT_GREATER(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 71, float, "%f"); BC_ASSERT_GREATER(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 71, float, "%f"); - BC_ASSERT_LOWER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 3, float, "%f"); - BC_ASSERT_LOWER(linphone_call_get_video_stats(marie1_call)->download_bandwidth, 3, float, "%f"); + BC_ASSERT_LOWER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 11, float, "%f"); + BC_ASSERT_LOWER(linphone_call_get_video_stats(marie1_call)->download_bandwidth, 11, float, "%f"); /* send an INFO in reverse side to check that dialogs are properly established */ info = linphone_core_create_info_message(marie1->lc); From db0db1b297febbd427ebf2c680a99d68ea29d954 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sun, 23 Aug 2015 19:24:38 +0200 Subject: [PATCH 087/134] fix win32 build --- gtk/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gtk/main.c b/gtk/main.c index bf9dcd787..ec4df4002 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1479,8 +1479,8 @@ void linphone_gtk_open_browser(const char *uri) { } #elif defined(WIN32) HINSTANCE instance = ShellExecute(NULL, "open", uri, NULL, NULL, SW_SHOWNORMAL); - if (instance <= 32) { - g_warning("Could not open %s (error #%i)", uri, instance); + if ((int)instance <= 32) { + g_warning("Could not open %s (error #%i)", uri, (int)instance); } #else GError *error = NULL; From 7247525fb9893bb2981974b0dedf92e0e42d6734 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 24 Aug 2015 10:00:19 +0200 Subject: [PATCH 088/134] fix crash on windows due to incorrect usage of MultiByteToWideChar() --- coreapi/message_storage.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreapi/message_storage.c b/coreapi/message_storage.c index a5985f4d3..9f55b3ec1 100644 --- a/coreapi/message_storage.c +++ b/coreapi/message_storage.c @@ -618,7 +618,7 @@ static int _linphone_sqlite3_open(const char *db_file, sqlite3 **db) { #elif defined(_WIN32) int ret; wchar_t db_file_utf16[MAX_PATH_SIZE]; - ret = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, db_file, MAX_PATH_SIZE, db_file_utf16, MAX_PATH_SIZE); + ret = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, db_file, -1, db_file_utf16, MAX_PATH_SIZE); if(ret == 0) db_file_utf16[0] = '\0'; return sqlite3_open16(db_file_utf16, db); #else From ed1bac10cf070b94666269535308b572b679696e Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Fri, 7 Aug 2015 17:12:18 +0200 Subject: [PATCH 089/134] coding style: experimental use of a clang-format git pre-commit hook to use code convention --- .clang-format | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ .git-pre-commit | 51 +++++++++++++++++++++++++++++++++++++++ .gitignore | 5 ++-- autogen.sh | 17 +++++++++---- mediastreamer2 | 2 +- 5 files changed, 130 insertions(+), 9 deletions(-) create mode 100644 .clang-format create mode 100755 .git-pre-commit diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000..769b266b1 --- /dev/null +++ b/.clang-format @@ -0,0 +1,64 @@ +--- +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: true +AlignEscapedNewlinesLeft: false +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: false +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Attach +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +ColumnLimit: 120 +CommentPragmas: '^ IWYU pragma:' +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +IndentCaseLabels: false +IndentFunctionDeclarationAfterType: false +IndentWidth: 4 +IndentWrappedFunctionNames: false +KeepEmptyLinesAtTheStartOfBlocks: true +Language: Cpp +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +SpaceAfterCStyleCast: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 4 +UseTab: Always +... diff --git a/.git-pre-commit b/.git-pre-commit new file mode 100755 index 000000000..69a71bea9 --- /dev/null +++ b/.git-pre-commit @@ -0,0 +1,51 @@ +#!/bin/bash + +# This hook purpose is to keep coding style consistent between all developers +# It is automatically installed in .git/hooks folder by cmake on first run. + +# From https://github.com/tatsuhiro-t/nghttp2/blob/master/pre-commit + +function invalid-format-detected { + cat git-clang-format.diff + echo "*****************" + echo "$0: Invalid coding style detected (see git-clang-format.diff for issues). Please correct it using one of the following:" + echo "1) Apply patch located at git-clang-format.diff using:" + echo " cd $(git rev-parse --show-toplevel) && $1" + echo "2) Use clang-format to correctly format source code using:" + echo " $2" + echo "3) Reformat these lines manually." + echo "*** Aborting commit.***" + exit 1 +} +function git-clang-format-diffing { + format_diff=$(which git-clang-format) + format_diff_options="--style=file" + + #only diffing commited files, ignored staged one + $format_diff $format_diff_options --diff $(git --no-pager diff --cached --name-status | grep -v '^D' | cut -f2) > git-clang-format.diff + + if ! grep -q -E '(no modified files to format|clang-format did not modify any files)' git-clang-format.diff; then + invalid-format-detected "git apply git-clang-format.diff" "clang-format $format_diff_options -i " + fi +} + +function clang-format-diff-diffing { + format_diff=$(find /usr/bin/ -name 'clang-format-diff*' -type f | tail -n1) + format_diff_options="-style file" + + git diff-index --cached --diff-filter=ACMR -p HEAD -- | $format_diff $format_diff_options -p1 > git-clang-format.diff + if [ -s git-clang-format.diff ]; then + invalid-format-detected "patch -p0 < git-clang-format.diff" "${format_diff/-diff/} $format_diff_options -i " + fi +} + +set -e +if which git-clang-format &>/dev/null; then + git-clang-format-diffing $@ +elif [ ! -z "$(find /usr/bin/ /usr/local/bin/ /opt/bin/ -name 'clang-format-diff*' -type f 2>/dev/null)" ]; then + # Warning! We need at least version 1.6... + clang-format-diff-diffing $@ +else + echo "$0: Please install clang-format (coding style checker) - could not find git-clang-format nor clang-format-diff in PATH. Skipping code verification..." + exit 0 +fi diff --git a/.gitignore b/.gitignore index d662f5ade..36ee91daf 100644 --- a/.gitignore +++ b/.gitignore @@ -90,6 +90,5 @@ tester/record-call_with_file_player.wav tester/ZIDCache*.xml tester/stereo-record.wav -coreapi/bellesip_sal/.dirstamp -coreapi/ldap/.dirstamp - +.dirstamp +git-clang-format.diff diff --git a/autogen.sh b/autogen.sh index d5ec9ea80..72c4f66b6 100755 --- a/autogen.sh +++ b/autogen.sh @@ -17,18 +17,18 @@ else fi if test -f /opt/local/bin/glibtoolize ; then - # darwin - LIBTOOLIZE=/opt/local/bin/glibtoolize + # darwin + LIBTOOLIZE=/opt/local/bin/glibtoolize else - LIBTOOLIZE=libtoolize + LIBTOOLIZE=libtoolize fi if test -d /opt/local/share/aclocal ; then - ACLOCAL_ARGS="-I /opt/local/share/aclocal" + ACLOCAL_ARGS="-I /opt/local/share/aclocal" fi if test -d /share/aclocal ; then - ACLOCAL_ARGS="$ACLOCAL_ARGS -I /share/aclocal" + ACLOCAL_ARGS="$ACLOCAL_ARGS -I /share/aclocal" fi INTLTOOLIZE=$(which intltoolize) @@ -49,6 +49,13 @@ $AUTOMAKE --force-missing --add-missing --copy autoconf set +x + +#install git pre-commit hooks if possible +if [ -d .git/hooks ] && [ ! -f .git/hooks/pre-commit ]; then + cp .git-pre-commit .git/hooks/pre-commit + chmod +x .git/hooks/pre-commit +fi + if [ "$srcdir" = "." ]; then if [ -x oRTP/autogen.sh ]; then echo "Generating build scripts in oRTP..." diff --git a/mediastreamer2 b/mediastreamer2 index 40eedaea0..51ec0ba6c 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 40eedaea06eb52b20ceab6de86de0a251be007e7 +Subproject commit 51ec0ba6cc09107d90340875dfb418d3a5e18245 From 3f14debcbd2c330fcf837e4cb9c8a0130c023e47 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Mon, 24 Aug 2015 11:02:21 +0200 Subject: [PATCH 090/134] i18n: pull translations and change duration display from HH::MM::ss to HH:MM:ss --- gtk/incall_view.c | 6 +- mediastreamer2 | 2 +- po/ar.po | 609 ++++++++++++++++++++++------------------ po/cs.po | 562 ++++++++++++++++++++----------------- po/de.po | 635 ++++++++++++++++++++++++------------------ po/es.po | 553 ++++++++++++++++++++----------------- po/fr.po | 627 +++++++++++++++++++++++------------------ po/he.po | 561 ++++++++++++++++++++----------------- po/hu.po | 573 ++++++++++++++++++++------------------ po/it.po | 690 ++++++++++++++++++++++++++-------------------- po/ja.po | 571 ++++++++++++++++++++------------------ po/nb_NO.po | 542 +++++++++++++++++++----------------- po/nl.po | 591 +++++++++++++++++++++------------------ po/pl.po | 526 ++++++++++++++++++----------------- po/pt_BR.po | 523 ++++++++++++++++++----------------- po/ru.po | 637 ++++++++++++++++++++++++------------------ po/sr.po | 616 +++++++++++++++++++++++------------------ po/sv.po | 537 +++++++++++++++++++----------------- po/tr.po | 561 ++++++++++++++++++++----------------- po/zh_CN.po | 531 ++++++++++++++++++----------------- po/zh_TW.po | 537 +++++++++++++++++++----------------- 21 files changed, 5990 insertions(+), 5000 deletions(-) diff --git a/gtk/incall_view.c b/gtk/incall_view.c index c29e9e118..9aaefff91 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -510,7 +510,7 @@ void linphone_gtk_in_call_view_set_calling(LinphoneCall *call){ gtk_label_set_markup(GTK_LABEL(status),_("Calling...")); display_peer_name_in_label(callee,linphone_call_get_remote_address (call)); - gtk_label_set_text(GTK_LABEL(duration),_("00::00::00")); + gtk_label_set_text(GTK_LABEL(duration),_("00:00:00")); linphone_gtk_in_call_set_animation_spinner(callview); } @@ -653,7 +653,7 @@ static void volume_control_value_changed(GtkScaleButton *button, gdouble value, static void volume_control_button_update_value(GtkWidget *widget) { LinphoneCall *call = (LinphoneCall *)g_object_get_data(G_OBJECT(widget), "call"); VolumeControlType type = (VolumeControlType)g_object_get_data(G_OBJECT(widget), "type"); - + if(type == VOLUME_CTRL_PLAYBACK) { gtk_scale_button_set_value(GTK_SCALE_BUTTON(widget), linphone_call_get_speaker_volume_gain(call)); } else if(type == VOLUME_CTRL_RECORD) { @@ -764,7 +764,7 @@ void linphone_gtk_in_call_view_set_in_call(LinphoneCall *call){ gtk_widget_set_sensitive(linphone_gtk_get_widget(callview,"conference_button"),!in_conf); gtk_widget_set_sensitive(linphone_gtk_get_widget(callview,"transfer_button"),!in_conf); - gtk_label_set_text(GTK_LABEL(duration),_("00::00::00")); + gtk_label_set_text(GTK_LABEL(duration),_("00:00:00")); linphone_gtk_in_call_set_animation_image(callview,GTK_STOCK_MEDIA_PLAY,TRUE); linphone_gtk_call_update_tab_header(call,FALSE); linphone_gtk_enable_mute_button( diff --git a/mediastreamer2 b/mediastreamer2 index 51ec0ba6c..2fcbd0776 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 51ec0ba6cc09107d90340875dfb418d3a5e18245 +Subproject commit 2fcbd0776bcd712f566be5d1e8f053142723e91d diff --git a/po/ar.po b/po/ar.po index e1e5e75a5..182dc5b2b 100644 --- a/po/ar.po +++ b/po/ar.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # محيي الدين , 2014 # محيي الدين , 2014-2015 @@ -9,15 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" -"PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Arabic (http://www.transifex.com/p/linphone-gtk/language/ar/)\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" +"PO-Revision-Date: 2015-07-21 23:38+0000\n" +"Last-Translator: محيي الدين \n" +"Language-Team: Arabic (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/ar/)\n" +"Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ar\n" -"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 #, c-format @@ -77,14 +79,16 @@ msgstr[5] "%i ثانية" msgid "" "%s\tQuality: %s\n" "%s\t%s\t" -msgstr "%s\tالجودة : %s\n%s\t%s\t" +msgstr "" +"%s\tالجودة : %s\n" +"%s\t%s\t" #: ../gtk/calllogs.c:342 #, c-format msgid "%s\t%s" msgstr "%s\t%s" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "اجتماع" @@ -97,6 +101,10 @@ msgstr "أنا" msgid "Couldn't find pixmap file: %s" msgstr "أيقونة غير موجودة : %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "أظهِرْ بعض معلومات التنقيح خلال التشغيل." @@ -123,9 +131,10 @@ msgstr "العنوان المُراد الاتصال به الآن" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "حدِّد مجلد العمل (الذي سيكون مجلد التثبيت، مثلا c:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"حدِّد مجلد العمل (الذي سيكون مجلد التثبيت، مثلا c:\\Program Files\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -139,88 +148,96 @@ msgstr "ابدأ مرشد الصوت" msgid "Run self test and exit 0 if succeed" msgstr "شغِّل الاختبار الذاتي ثم اخرِجْ 0 إذا نجح" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" +"يود %s إضافتك إلى جهات اتصاله.\n" +"هل تريد إضافته إلى جهات اتصالك والسماح له برؤية حالة حضورك ؟\n" +"إن كان الجواب بالرفض، سوف يجري حظر هذا الشخص مؤقتا." -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "ادخل كلمة السر لـ %s\n في نطاق %s:" +msgstr "" +"ادخل كلمة السر لـ %s\n" +" في نطاق %s:" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "خطأ في المكالمة" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "إنتهت المكالمة" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "مكالمة واردة" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "أجِبْ" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "ارفضْ" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "المكالمة متوقفة" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "بواسطة %s" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "يود %s تشغيل الفيديو. هل تقبل ذلك ؟" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "وصلة إلى الموقع وِبْ" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "لِنْفُونْ" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "الهاتف المرئي عبر الإنترنت" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (افتراضي)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "التحويل إلى %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "لا وجود للوحة الصوت على هذا الحاسوب.\nلن تتمكن من تلقي أو إجراء أي مكالمة." +msgstr "" +"لا وجود للوحة الصوت على هذا الحاسوب.\n" +"لن تتمكن من تلقي أو إجراء أي مكالمة." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "هاتف SIP المرئي الحر" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "أهلا\n" @@ -298,108 +315,108 @@ msgstr "مفعَّل" msgid "Disabled" msgstr "غير مفعَّل" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "الحساب" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "English" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Français" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Svenska" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Español" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Português do Brasil" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Polski" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Deutsch" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Русский" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "日本語" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Nederlands" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Magyar" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Čeština" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "简体中文" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "繁体中文" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "Norsk bokmål" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "עברית" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "Српски" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "العربية" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "Türkçe" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "يجب إعادة تشغيل لِنْفُونْ لكي تٌفعَّل اللغة المختارة." -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "بدون" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ZRTP" @@ -408,7 +425,9 @@ msgstr "ZRTP" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "يوجد إصدار حديث من طرف %s.\nهل تريد فتح المتصفح لتنزيله ؟" +msgstr "" +"يوجد إصدار حديث من طرف %s.\n" +"هل تريد فتح المتصفح لتنزيله ؟" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -445,149 +464,157 @@ msgstr[3] "عُثِر على %i جهات اتصال" msgstr[4] "عُثِر على %i جهة اتصال" msgstr[5] "عُثِر على %i جهة اتصال" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." -msgstr "مرحبا !\nسيمكنك هذا المرشد من إعداد حسابك SIP لإجراء المكالمات." +msgstr "" +"مرحبا !\n" +"سيمكنك هذا المرشد من إعداد حسابك SIP لإجراء المكالمات." -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "إنشاء حساب في linphone.org" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "أتوفر مسبقا على حساب في linphone.org وأريد فقط استخدامه" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "أتوفر مسبقا على حساب sip وأريد فقط استخدامه" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "أريد تحديد عنوان التهيئة عن بعد" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "ادخل معلومات حسابك" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "اسم المستخدم*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "كلمة السر*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "النطاق*" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "الوكيل" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "أدخِل اسم المستخدم في linphone.org" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "اسم المستخدم :" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "كلمة السر :" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) حقول ضرورية" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "اسم المستخدم* : (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "كلمة السر* : (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "البريد الالكتروني : (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "أكِّد كلمة السر : (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "أحطني علما بتحديثات لِنْفُونْ" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "يُرجى الانتظار، يجري الآن إنشاء حسابك." -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "يُرجى تأكيد حسابك وذلك بالضغط على الوصلة التي أرسلناها لك بالبريد الإلكتروني.\nثم ارجع إلى هنا واضغط على زر التالي." +msgstr "" +"يُرجى تأكيد حسابك وذلك بالضغط على الوصلة التي أرسلناها لك بالبريد " +"الإلكتروني.\n" +"ثم ارجع إلى هنا واضغط على زر التالي." -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "يُرجى الانتظار، يجري الآن فحص التحقق من صحة حسابك." -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "خطأ، لم يتم تأكيد الحساب، سبق استخدام اسم المستخدم أو تعذر الوصول للخادم.\nيُرجى إعادة المحاولة لاحقا." +msgstr "" +"خطأ، لم يتم تأكيد الحساب، سبق استخدام اسم المستخدم أو تعذر الوصول للخادم.\n" +"يُرجى إعادة المحاولة لاحقا." -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "شكرا لك، لقد جرت تهيئة حسابك وهو الآن قابل للاستخدام." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "مرشد تهيئة حساب SIP" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "مرحبا بك في مرشد إعداد الحساب" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "مرشد تهيئة الحساب" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "تهيئة حسابك (المرحلة 1/1)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "أدخل اسم المستخدم SIP (المرحلة 1/1)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "أدخل معلومات حسابك (المرحلة 1/2)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "إنشاء الحساب في تقدم" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "تأكيد (المرحلة 2/2)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "التحقق من الحساب في تقدم" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "خطأ" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "في طور الإنهاء" @@ -658,7 +685,9 @@ msgstr "مباشرة أو عبر خادم" msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "التنزيل % f\nالرفع : %f (ك.بِتْ/الثانية)" +msgstr "" +"التنزيل % f\n" +"الرفع : %f (ك.بِتْ/الثانية)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format @@ -670,115 +699,118 @@ msgstr "%ix%i @ %f fps" msgid "%.3f seconds" msgstr "%.3f ثانية" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "ضع السماعة" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "يجري الاتصال..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "المكالمة الواردة" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "جيدة" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "متوسطة" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "ضعيفة" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "ضعيفة جدا" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "سيِّئة جيدا" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "غير متاحة" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "آمن بواسطة SRTP" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "مُؤمَّن بواسطة DTLS" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "آمن بواسطة ZRTP - [شارة الهوية : %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "أكِّدْ عدم تحقُّقك" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "أكِّدْ تحقُّقَك" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "في اجتماع" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "المكالمة جارية" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "المكالمة متوقفة مؤقتا" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "إنتهت المكالمة." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "يجري الإرسال" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "انتهى الإرسال." -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "فَشِل الإرسال." -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "استأنِفْ" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "إيقاف مؤقت" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" -msgstr "يسجل في\n%s %s" +msgstr "" +"يسجل في\n" +"%s %s" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(متوقف)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "يُرجى إدخال معلومات الولوج ل %s" @@ -825,7 +857,9 @@ msgstr "لم يتمكن من تشغيل التحكم في الصوت للنظا msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" -msgstr "مرحبا !\nسيمكنك هذا المرشد من تهيئة إعدادات الصوت من أجل لِنْفُونْ" +msgstr "" +"مرحبا !\n" +"سيمكنك هذا المرشد من تهيئة إعدادات الصوت من أجل لِنْفُونْ" #: ../gtk/audio_assistant.c:335 msgid "Capture device" @@ -875,7 +909,7 @@ msgstr "لنُشغِّل لِنْفُونْ الآن" msgid "Audio Assistant" msgstr "مرشد الصوت" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "مرشد الصوت" @@ -892,165 +926,97 @@ msgid "Record and Play" msgstr "سَجِّل واقرأ " #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "اسم المنادَى" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "أرسِلْ" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "أنْهِ الاجتماع" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "سَجِّل هذه المكالمة في ملف صوتي" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "مرئي" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "اصمُتْ" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "إرسال" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "المكالمة جارية" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "المدة" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "تقييم جودة المكالمة" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "كل المستخدمين" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "المستخدمون المتصلون" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "قناة الألياف الضوئية" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "افتراضي" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "احذف" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "الخ_يارات" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "عنوان URI للتهيئة" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "شغِّل الفيديو دائما" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "فعِّل رؤية نفسي" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "ال_مساعدة" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "أظهِر نافذة التنقيح" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "موق_ع الوِبْ" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "تحقق من التح_ديثات" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "مرشد الحساب" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "عنوان SIP أو رقم الهاتف :" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "ابدأ مكالمة جديدة" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "جهات الاتصال" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "بحث" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "إضافة جهات الاتصال من الدليل" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "إضافة جهة الاتصال" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "المكالمات السابقة" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "هويتي الحالية :" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "اسم المستخدم" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "كلمة السر" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "الاتصال بالإنترنت :" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "سَجِّل دخولي تلقائيا" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "مُعرِّف المستخدم" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "معلومات الولوج" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "مرحبا !" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "حول لِنْفُونْ" @@ -1077,7 +1043,20 @@ msgid "" "cs: Petr Pisar \n" "hu: anonymous\n" "he: Eli Zaretskii \n" -msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni \nde: Jean-Jacques Sarton \nsv: Daniel Nylander \nes: Jesus Benitez \nja: YAMAGUCHI YOSHIYA \npt_BR: Rafael Caesar Lenzi \npl: Robert Nasiadek \ncs: Petr Pisar \nhu: anonymous\nhe: Eli Zaretskii \nar: Muhiyeddine Cherik \n" +msgstr "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" +"ar: Muhiyeddine Cherik \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1111,6 +1090,10 @@ msgstr "لِنْفُونْ - يجب التحقق من الهوية" msgid "Please enter the domain password" msgstr "أدخل كلمة سر النطاق" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "مُعرِّف المستخدم" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "تاريخ المكالمات" @@ -1391,7 +1374,9 @@ msgstr "فعِّل التحكم المتكيف مع الصبيب" msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." -msgstr "التحكم المتكيف مع الصبيب هو تقنية لملائمة جودة الصوت والصورة بناءً على سعة قناة الاتصال المتاحة خلال المكالمة." +msgstr "" +"التحكم المتكيف مع الصبيب هو تقنية لملائمة جودة الصوت والصورة بناءً على سعة " +"قناة الاتصال المتاحة خلال المكالمة." #: ../gtk/parameters.ui.h:53 msgid "Bandwidth control" @@ -1653,6 +1638,14 @@ msgstr "المنفذ" msgid "Configure tunnel" msgstr "تهيئة النفق" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "اسم المستخدم" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "كلمة السر" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "تهيئة وكيل http (اختياري)" @@ -1752,9 +1745,16 @@ msgstr "تحديد عنوان URI التهيئة عن بعد" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " -msgstr "يسمح لك مربع الحوار هذا بإعداد عنوان http أو https الذي من خلاله تود جلب التهيئة عند بدء البرنامج.\nأدخل العنوان أسفله. بعد تأكيد الأمر، ستجري إعادة تشغيل لِنْفُونْ تلقائيا من أجل جلب والأخذ بعين الاعتبار الإعدادات الحديثة." +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " +msgstr "" +"يسمح لك مربع الحوار هذا بإعداد عنوان http أو https الذي من خلاله تود جلب " +"التهيئة عند بدء البرنامج.\n" +"أدخل العنوان أسفله. بعد تأكيد الأمر، ستجري إعادة تشغيل لِنْفُونْ تلقائيا من أجل " +"جلب والأخذ بعين الاعتبار الإعدادات الحديثة." #: ../gtk/provisioning-fetch.ui.h:1 msgid "Configuring..." @@ -1764,60 +1764,112 @@ msgstr "تجري التهيئة..." msgid "Please wait while fetching configuration from server..." msgstr "رجاءً انتظر ريثما ينتهي من جلب الإعدادات من الخادم..." +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "أرسِلْ" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "اسم المنادَى" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "أنْهِ الاجتماع" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "سَجِّل هذه المكالمة في ملف صوتي" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "مرئي" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "اصمُتْ" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "إرسال" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "المكالمة جارية" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "المدة" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "تقييم جودة المكالمة" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "الاتصال بالإنترنت :" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "سَجِّل دخولي تلقائيا" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "معلومات الولوج" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "مرحبا !" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "جاهز" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "تجري التهيئة" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "يجري البحث عن وجهة رقم الهاتف..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "لم يتمكن من إيجاد هذا الرقم." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "يتصل ب" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "لم يتمكن من الاتصال" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "آسف، وصل عدد المكالمات الآنية إلى حده الأقصى" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "يتصل بك" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "ويطلب ردا تلقائيا." -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "يجري تعديل إعدادات المكالمة..." -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "متصل." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "أُلغيت المكالمة" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "لم يتمكن من توقيف المكالمة مؤقتا" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "وضع المكالمة قيد الانتظار..." @@ -1881,23 +1933,39 @@ msgstr "في عطلة" msgid "Unknown status" msgstr "حالة مجهولة" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "إن عنوان SIP الذي أدخلت غير صحيح، يجب أن يبدأ بـ \"sip:‎\" متبوعا باسم المضيف." +msgstr "" +"إن عنوان SIP الذي أدخلت غير صحيح، يجب أن يبدأ بـ \"sip:‎\" متبوعا باسم المضيف." -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "إن هوية SIP التي أدخلت غير صحيحة.\nيجب أن تكون بهذا النمط sip:username@proxydomain، مثلا sip:alice@example.net" +msgstr "" +"إن هوية SIP التي أدخلت غير صحيحة.\n" +"يجب أن تكون بهذا النمط sip:username@proxydomain، مثلا sip:alice@example.net" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "يجري البحث عن وجهة رقم الهاتف..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "لم يتمكن من إيجاد هذا الرقم." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "تعذر الولوج بالهوية %s" +#: ../coreapi/proxy.c:1494 +#, fuzzy, c-format +msgid "Refreshing on %s..." +msgstr "يجلب من %s" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "يرن الجرس عن بعد..." @@ -1933,7 +2001,7 @@ msgstr "أجاب عن المكالمة %s." msgid "Incompatible, check codecs or security settings..." msgstr "غير موائم، تحقق من المراميز أو إعدادات الأمان..." -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "إعدادات الوسائط غير موائمة." @@ -1951,59 +2019,59 @@ msgstr "وُقِّفت المكالمة مؤقتا من طرف آخر." msgid "Call is updated by remote." msgstr "حُدِّث الاتصال من البعيد." -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "أُنهيت المكالمة." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "المستخدم مشغول." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "المستخدم غير متاح مؤقتا." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "لا يريد المستخدم أي إزعاج." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "تم تجاهل المكالمة." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "انتهت مهلة الطلب." -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "مُوجَّه" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "فشل الاتصال." -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "تم التسجيل في %s بنجاح." -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "أُلغي التسجيل في %s ." -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "لا إجابة قبل انتهاء المهلة" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "فَشِل التسجيل في %s: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "خدمة غير متاحة، تجري الإعادة" @@ -2013,11 +2081,11 @@ msgstr "خدمة غير متاحة، تجري الإعادة" msgid "Authentication token is %s" msgstr "شارة التحقق من الهوية هي %s" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "عُدِّلت معاملات المكالمات بنجاج." -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." @@ -2052,7 +2120,12 @@ msgid "" "To: %s\n" "Status: %s\n" "Duration: %i mn %i sec\n" -msgstr "%s في %s\nمن : %s\nإلى : %s\nالحالة : %s\nالمدة : %i دقيقة %i ثانية\n" +msgstr "" +"%s في %s\n" +"من : %s\n" +"إلى : %s\n" +"الحالة : %s\n" +"المدة : %i دقيقة %i ثانية\n" #: ../coreapi/call_log.c:221 msgid "Outgoing call" diff --git a/po/cs.po b/po/cs.po index 9feeb6130..3b8d4b0f9 100644 --- a/po/cs.po +++ b/po/cs.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Klara Cihlarova , 2005 # Petr Pisar , 2006-2011,2013 @@ -9,14 +9,16 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Czech (http://www.transifex.com/p/linphone-gtk/language/cs/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Czech (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/cs/)\n" +"Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -71,14 +73,16 @@ msgstr[2] "%i sekund" msgid "" "%s\tQuality: %s\n" "%s\t%s\t" -msgstr "%s\tKvalita: %s\n%s\t%s\t" +msgstr "" +"%s\tKvalita: %s\n" +"%s\t%s\t" #: ../gtk/calllogs.c:342 #, c-format msgid "%s\t%s" msgstr "%s\t%s" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "Konference" @@ -91,6 +95,10 @@ msgstr "Já" msgid "Couldn't find pixmap file: %s" msgstr "Nelze najít soubor s obrázkem: %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "Za běhu vypisuje některé ladicí informace na standardní výstup." @@ -117,9 +125,11 @@ msgstr "Zavolá právě teď na tuto adresu" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Zadejte pracovní adresář (měl by být základní instalační adresář, například " "c:\\Program Files\\Linphone)" -msgstr "Zadejte pracovní adresář (měl by být základní instalační adresář, například c:\\Program Files\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -133,88 +143,91 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "Chyba hovoru" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "Hovor ukončen" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Příchozí hovor" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "Odpovědět" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "Odmítnout" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "Hovor odložen" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "kým: %s" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s navrhuje začít videohovor. Přijímáte?" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "Odkaz na webovou stránku" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (Výchozí)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "Byly jsme přepojeni na %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "Na tomto počítači nebyla objevena žádná zvuková karta.\nNebudete moci vytáčet a přijímat a zvukové hovory." +msgstr "" +"Na tomto počítači nebyla objevena žádná zvuková karta.\n" +"Nebudete moci vytáčet a přijímat a zvukové hovory." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "Volný SIP videofon" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -292,108 +305,108 @@ msgstr "Povoleno" msgid "Disabled" msgstr "Zakázáno" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Účet" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "angličtina" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "francouzština" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "švédština" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "italština" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "španělština" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "brazilská portugalština" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "polština" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "němčina" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "ruština" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "japonština" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "dánština" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "maďarština" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "čeština" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "čínština" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "tradiční čínština" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "norština" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "hebrejština" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "srbština" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Aby se projevil výběr nového jazyka, je nutné znovu spustit linphone." -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "Žádné" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ZRTP" @@ -402,7 +415,9 @@ msgstr "ZRTP" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "Na %s je dostupná novější verze.\nPřejete si otevřít prohlížeč, abyste si ji mohli stáhnout?" +msgstr "" +"Na %s je dostupná novější verze.\n" +"Přejete si otevřít prohlížeč, abyste si ji mohli stáhnout?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -436,149 +451,156 @@ msgstr[0] "Nalezen %i kontakt" msgstr[1] "Nalezeny %i kontakty" msgstr[2] "Nalezeno %i kontaktů" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "Vytvořit účet na linphone.org" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "Účet na linphone.org již mám a chci jej použít" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "SIP účet již mám a chci jej použít" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "Uživatelské jméno*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "Heslo*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "Doména*" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "Proxy" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "Zadejte uživatelské jméno na linphone.org" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Uživatelské jméno:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Heslo:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) Povinné položky" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "Uživatelské jméno: (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "Heslo: (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "E-mail: (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "Potvrďte heslo: (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "Prosím, ověřte svůj účet tak, že kliknete na odkaz, který jsme vám právě zaslali e-mailem.\nPak se sem vraťte a stiskněte tlačítko Další." +msgstr "" +"Prosím, ověřte svůj účet tak, že kliknete na odkaz, který jsme vám právě " +"zaslali e-mailem.\n" +"Pak se sem vraťte a stiskněte tlačítko Další." -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "Došlo k chybě (účet nebyl ověřen, uživatelské jméno již existuje nebo server není dostupný).\nProsím, vraťte se a zkoste to znovu." +msgstr "" +"Došlo k chybě (účet nebyl ověřen, uživatelské jméno již existuje nebo server " +"není dostupný).\n" +"Prosím, vraťte se a zkoste to znovu." -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "Děkujeme vám. Váš účet je nyní nastaven a připraven k použití." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "Vítejte v průvodci nastavení účtu" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Průvodce nastavením účtu" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "Nastavit účet (krok 1/1)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "Zadejte vaše sipové uživatelské jméno (krok 1/1)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "Zadejte údaje o účtu (krok 1/2)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "Ověření (krok 2/2)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "Chyba" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Ukončuje se" @@ -649,7 +671,9 @@ msgstr "Přímé nebo skrze server" msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "příchozí: %f\nodchozí: %f (kb/s)" +msgstr "" +"příchozí: %f\n" +"odchozí: %f (kb/s)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format @@ -661,115 +685,119 @@ msgstr "" msgid "%.3f seconds" msgstr "%.3f sekund" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "Zavěsit" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "Volá se…" -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +#, fuzzy +msgid "00:00:00" msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "Příchozí hovor" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "dobrá" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "průměrná" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "slabá" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "velmi slabá" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "příliš špatná" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "nedostupná" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "Zabezpečeno pomocí SRTP" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Zabezpečeno pomocí ZRTP – [ověřovací klíč: %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "Nastavit na neověřeno" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "Nastavit na ověřeno" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "Probíhá konference" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "Probíhá hovor" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "Odložený hovor" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "Hovor skončil." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "Probíhá přepojení" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "Přepojení dokončeno." -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "Přepojení selhalo." -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "Obnovit" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "Odložit" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" -msgstr "Nahrává se do\n%s %s" +msgstr "" +"Nahrává se do\n" +"%s %s" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(Odloženo)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "Prosím, zadejte své přihlašovací jméno pro %s:" @@ -866,7 +894,7 @@ msgstr "" msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "" @@ -883,165 +911,97 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "Jméno volaného" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "Odeslat" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "Ukončit konferenci" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "Nahrát tento hovor do zvukového souboru" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "Obraz" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "Ztišit" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "Přepojit" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "Telefonuje se" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "Délka" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "Hodnocení kvality hovoru" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "všech uživatelích" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "připojených uživatelích" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "Fiber Channel" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "Výchozí" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "Smazat" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "V_olby" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "Vždy spustit obraz" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "Zobrazovat sám sebe" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "Nápo_věda" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "Zobrazit ladicí okno" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_Domovská stránka" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "Vyhledat akt_ualizace" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "Průvodce účtem" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "SIP adresa nebo telefonní číslo:" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "Zahájit nový hovor" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "Kontakty" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Hledat" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "Přidat kontakty z adresáře" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "Přidat kontakt" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "Nedávné hovory" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "Moje současná totožnost:" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "Uživatelské jméno" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "Heslo" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "Připojení k Internetu:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "Přihlašovat mě automaticky" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "Identifikátor uživatele" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "Informace o přihlášení" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "" @@ -1102,6 +1062,10 @@ msgstr "Linphone – Ověření totožnosti vyžadováno" msgid "Please enter the domain password" msgstr "Prosím, zadejte heslo pro doménu" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "Identifikátor uživatele" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "Historie volání" @@ -1382,7 +1346,9 @@ msgstr "Zapnout přizpůsobující se řízení rychlosti" msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." -msgstr "Přizpůsobující se řízení rychlosti je technika dynamického odhadu dostupného pásma během hovoru." +msgstr "" +"Přizpůsobující se řízení rychlosti je technika dynamického odhadu " +"dostupného pásma během hovoru." #: ../gtk/parameters.ui.h:53 msgid "Bandwidth control" @@ -1644,6 +1610,14 @@ msgstr "Port" msgid "Configure tunnel" msgstr "Nastavit tunel" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "Uživatelské jméno" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "Heslo" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "Nastavit HTTP proxy (volitelné)" @@ -1743,8 +1717,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1755,60 +1732,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "Odeslat" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "Jméno volaného" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "Ukončit konferenci" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "Nahrát tento hovor do zvukového souboru" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "Obraz" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "Ztišit" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "Přepojit" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "Telefonuje se" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "Délka" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "Hodnocení kvality hovoru" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "Připojení k Internetu:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "Přihlašovat mě automaticky" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "Informace o přihlášení" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Připraven." -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Vyhledává se umístění čísla…" - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "Toto číslo nelze vyhledat." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "Navazuje se spojení" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "Nelze volat" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Je nám líto, ale byl dosažen maximální počet současných hovorů." -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "vás volá" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr " a požaduje automatickou zvednutí." -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "Upravují se parametry hovoru…" -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Připojeno." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "Hovor přerušen" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "Hovor nebylo možné odložit" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "Současný hovor se odkládá…" @@ -1872,23 +1901,40 @@ msgstr "" msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "Adresa SIP proxy, kterou jste zadali, není platná. Musí začínat na „sip:“ a pak musí následovat jméno stroje." +msgstr "" +"Adresa SIP proxy, kterou jste zadali, není platná. Musí začínat na „sip:“ a " +"pak musí následovat jméno stroje." -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "SIP identita, kterou jste zadali, není platná.\nMěla by mít tvar sip:uživatel@proxydoména, například sip:alice@example.net" +msgstr "" +"SIP identita, kterou jste zadali, není platná.\n" +"Měla by mít tvar sip:uživatel@proxydoména, například sip:alice@example.net" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Vyhledává se umístění čísla…" + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "Toto číslo nelze vyhledat." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "Nelze se přihlásit jako %s" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "Vyzvání na druhé straně." @@ -1924,7 +1970,7 @@ msgstr "Hovor přijat kým: %s." msgid "Incompatible, check codecs or security settings..." msgstr "Není slučitelné. Zkontrolujte nastavení kodeků a zabezpečení…" -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "Neslučitelné parametry médií." @@ -1942,59 +1988,59 @@ msgstr "Byli jsme odloženi protistranou." msgid "Call is updated by remote." msgstr "Hovor byl aktualizován protistranou." -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "Hovor ukončen." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Uživatel je zaneprázdněn." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "Uživatel je dočasně nedostupný." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "Uživatel si nepřeje být rušen." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Volání odmítnuto." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "Přesměrováno" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "Volání se nezdařilo." -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "Registrace na %s byla úspěšná." -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "Odregistrování z %s hotovo." -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "odpověď nedorazila včas" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrace na %s selhala: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -2004,11 +2050,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "Klíč k ověření totožnosti je %s" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/de.po b/po/de.po index 738db0d49..9fd715fe7 100644 --- a/po/de.po +++ b/po/de.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # andreas, 2014 # andreas, 2014 @@ -12,14 +12,16 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: German (http://www.transifex.com/p/linphone-gtk/language/de/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: German (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -72,14 +74,16 @@ msgstr[1] "%i Sekunden" msgid "" "%s\tQuality: %s\n" "%s\t%s\t" -msgstr "%s\tQualität: %s\n%s\t%s\t" +msgstr "" +"%s\tQualität: %s\n" +"%s\t%s\t" #: ../gtk/calllogs.c:342 #, c-format msgid "%s\t%s" msgstr "%s\t%s" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "Konferenz" @@ -92,6 +96,10 @@ msgstr "Eigenes Telefon" msgid "Couldn't find pixmap file: %s" msgstr "Pixmapdatei %s kann nicht gefunden werden." +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "Ausgabe von Debug-Informationen auf stdout während der Laufzeit" @@ -110,7 +118,9 @@ msgstr "Linphone mit ausgeschaltetem Video starten." #: ../gtk/main.c:142 msgid "Start only in the system tray, do not show the main interface." -msgstr "Nur im Systemabschnitt der Kontrollleiste starten, aber das Hauptfenster nicht zeigen." +msgstr "" +"Nur im Systemabschnitt der Kontrollleiste starten, aber das Hauptfenster " +"nicht zeigen." #: ../gtk/main.c:143 msgid "address to call right now" @@ -118,9 +128,11 @@ msgstr "Im Moment anzurufende Adresse" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "Geben Sie einen Arbeitsordner an (sollte der Installationsordner sein, z. B. C:\\Programme\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Geben Sie einen Arbeitsordner an (sollte der Installationsordner sein, z. B. " +"C:\\Programme\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -134,88 +146,93 @@ msgstr "Starte den Audio-Assistent" msgid "Run self test and exit 0 if succeed" msgstr "Selbsttest ausführen und mit 0 beenden, wenn erfolgreich" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "Bitte geben Sie Ihr Passwort für den Benutzernamen %s\n für Bereich %s ein:" +msgstr "" +"Bitte geben Sie Ihr Passwort für den Benutzernamen %s\n" +" für Bereich %s ein:" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "Anruf fehlgeschlagen" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "Anruf beendet" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Eingehender Anruf" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "Annehmen" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "Abweisen" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "Anruf wird gehalten" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "von %s" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s schlägt vor, eine Videoübertragung zu starten. Nehmen Sie an?" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "Website-Verknüpfung" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "Ein Internet-Video-Telefon" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (Vorgabe)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "Vermittlung nach %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "Auf diesem Rechner können keine Soundkarten gefunden werden.\nSie können keine Audio-Anrufe tätigen oder entgegennehmen." +msgstr "" +"Auf diesem Rechner können keine Soundkarten gefunden werden.\n" +"Sie können keine Audio-Anrufe tätigen oder entgegennehmen." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "Ein freies SIP-Video-Telefon" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "Hallo\n" @@ -293,108 +310,110 @@ msgstr "Freigegeben" msgid "Disabled" msgstr "Gesperrt" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Konto" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "Englisch" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Französisch" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Schwedisch" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Italienisch" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Spanisch" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Brasilianisches Portugiesisch" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Polnisch" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Deutsch" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Russisch" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "Japanisch" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Niederländisch" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Ungarisch" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Tschechisch" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "Chinesisch" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "Traditionelles Chinesisch" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "Norwegisch" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "Hebräisch" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "Serbisch" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "Arabisch" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "Türkisch" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." -msgstr "Linphone muss neu gestartet werden, damit die neue Spracheinstellung wirksam wird." +msgstr "" +"Linphone muss neu gestartet werden, damit die neue Spracheinstellung wirksam " +"wird." -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "Keinen" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ZRTP" @@ -403,7 +422,9 @@ msgstr "ZRTP" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "Eine neuere Version ist von %s verfügbar.\nMöchten Sie einen Browser zum Herunterladen öffnen?" +msgstr "" +"Eine neuere Version ist von %s verfügbar.\n" +"Möchten Sie einen Browser zum Herunterladen öffnen?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -436,149 +457,160 @@ msgid_plural "Found %i contacts" msgstr[0] "%i Kontakt gefunden" msgstr[1] "%i Kontakte gefunden" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." -msgstr "Willkommen!\nDieser Assistent hilft Ihnen dabei ein SIP-Konto einzurichten." +msgstr "" +"Willkommen!\n" +"Dieser Assistent hilft Ihnen dabei ein SIP-Konto einzurichten." -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "Ein Konto bei linphone.org erstellen." -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" -msgstr "Ich habe bereits ein Konto bei linphone.org und möchte es jetzt benutzen." +msgstr "" +"Ich habe bereits ein Konto bei linphone.org und möchte es jetzt benutzen." -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "Ich habe bereits ein SIP-Konto und möchte es jetzt benutzen." -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "Ich möchte eine URI zur Fernkonfiguration angeben" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "Geben Sie Ihre Zugangsdaten ein" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "Benutzername*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "Passwort*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "Domäne*" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "Proxy" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "Geben Sie Ihren Benutzernamen bei linphone.org ein." -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Benutzername:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Passwort:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) erforderliche Felder" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "Benutzername: (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "Passwort: (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "E-Mail: (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "Bestätigen Sie Ihr Passwort: (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "Halte mich über linphone Aktualisierungen auf dem laufenden" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "Ihr Konto wird erstellt, bitte warten." -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "Bitte bestätigen Sie Ihr Konto, indem Sie auf die Verknüpfung klicken, die wir Ihnen soeben per E-Mail geschickt haben.\nDanach gehen Sie hierher zurück und drücken auf „Vor“." +msgstr "" +"Bitte bestätigen Sie Ihr Konto, indem Sie auf die Verknüpfung klicken, die " +"wir Ihnen soeben per E-Mail geschickt haben.\n" +"Danach gehen Sie hierher zurück und drücken auf „Vor“." -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "Es wird überprüft, ob Ihr Konto gültig ist, bitte warten." -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "Fehler, Konto kann nicht bestätigt werden. Der Benutzername wird bereits\nverwendet oder der Server ist unerreichbar.\nBitte gehen Sie zurück und versuchen Sie es noch einmal." +msgstr "" +"Fehler, Konto kann nicht bestätigt werden. Der Benutzername wird bereits\n" +"verwendet oder der Server ist unerreichbar.\n" +"Bitte gehen Sie zurück und versuchen Sie es noch einmal." -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." -msgstr "Danke. Ihr Konto ist nun fertig eingerichtet und kann verwendet werden." +msgstr "" +"Danke. Ihr Konto ist nun fertig eingerichtet und kann verwendet werden." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "SIP-Konto-Einrichtungsassistent" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "Willkommen zum Konto-Einrichtungsassistenten" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Konto-Einrichtungsassistent" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "Konto einrichten (Schritt 1/1)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "Geben Sie Ihren SIP-Benutzernamen ein (Schritt 1/1)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "Geben Sie Ihre Zugangsdaten ein (Schritt 1/2)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "Kontoerstellung läuft" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "Bestätigung (Schritt 2/2)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "Kontogültigkeitsprüfung läuft" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "Fehler" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Fertigstellen" @@ -649,7 +681,9 @@ msgstr "Direkt oder über Server" msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "Herunterladen: %f\nHochladen: %f (kbit/s)" +msgstr "" +"Herunterladen: %f\n" +"Hochladen: %f (kbit/s)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format @@ -661,115 +695,118 @@ msgstr "%ix%i @ %f bps" msgid "%.3f seconds" msgstr "%.3f Sekunden" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "Auflegen" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "Verbindungsaufbau..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "Eingehender Anruf" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "gut" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "durchschnittlich" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "schlecht" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "sehr schlecht" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "zu schlecht" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "nicht verfügbar" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "Gesichert durch SRTP" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "Gesichert durch DTLS" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Gesichert durch ZRTP - [Auth.-Token: %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "Auf „Ungeprüft“ setzen" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "Auf „Geprüft“ setzen" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "In Konferenz" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "Im Gespräch" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "Gehaltener Anruf" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "Anruf beendet." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "Vermittlung läuft" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "Vermittlung abgeschlossen." -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "Vermittlung fehlgeschlagen." -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "Fortsetzen" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "Halten" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" -msgstr "Recording into\n%s %s" +msgstr "" +"Recording into\n" +"%s %s" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(pausiert)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "Bitte geben Sie die Anmeldeinformationen für %s ein." @@ -816,7 +853,10 @@ msgstr "Systemtonsteuerung kann nicht gestartet werden" msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" -msgstr "Willkommen!\nDieser Assistent hilft Ihnen die Audioeinstellungen für Linphone einzurichten." +msgstr "" +"Willkommen!\n" +"Dieser Assistent hilft Ihnen die Audioeinstellungen für Linphone " +"einzurichten." #: ../gtk/audio_assistant.c:335 msgid "Capture device" @@ -866,7 +906,7 @@ msgstr "Linphone jetzt starten" msgid "Audio Assistant" msgstr "Audio-Assistant" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "Audio-Assistant" @@ -883,165 +923,97 @@ msgid "Record and Play" msgstr "aufnehmen und abspielen" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "Name des Angerufenen" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "Senden" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "Konferenz beenden" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "Speichere den Anruf in eine Audio-Datei" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "Video" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "Stumm" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "Vermittlung" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "Im Gespräch" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "Dauer" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "Bewertung der Verbindungsqualität" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "Alle Teilnehmer" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "Angemeldete Teilnehmer" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "Glasfaserkabel" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "Vorgabe" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "Löschen" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_Optionen" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "Konfigurations URI angeben" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "Video immer starten" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "Selbstansicht ein" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "_Hilfe" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "Debug-Fenster anzeigen" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_Homepage" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "Auf _Aktualisierungen überprüfen" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "Konto-Einrichtungsassistent" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "SIP-Adresse oder Telefonnummer:" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "Einen neuen Anruf beginnen" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "Kontakte" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Suchen" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "Kontakte aus einem Verzeichnis hinzufügen" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "Kontakt hinzufügen" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "Letzte Gespräche" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "Aktuelle Identität:" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "Benutzername" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "Passwort" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "Internetverbindung:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "Automatisch anmelden" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "Benutzer-ID" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "Anmeldeinformationen" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "Willkommen!" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "Über Linphone" @@ -1052,7 +1024,9 @@ msgstr "(C) Belledonne Communications, 2010\n" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "Ein Internet-Video-Telefon, das das Standard-SIP-Protokoll (RFC3261) verwendet." +msgstr "" +"Ein Internet-Video-Telefon, das das Standard-SIP-Protokoll (RFC3261) " +"verwendet." #: ../gtk/about.ui.h:5 msgid "" @@ -1068,7 +1042,19 @@ msgid "" "cs: Petr Pisar \n" "hu: anonymous\n" "he: Eli Zaretskii \n" -msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni \nde: Jean-Jacques Sarton \nsv: Daniel Nylander \nes: Jesus Benitez \nja: YAMAGUCHI YOSHIYA \npt_BR: Rafael Caesar Lenzi \npl: Robert Nasiadek \ncs: Petr Pisar \nhu: anonymous\nhe: Eli Zaretskii \n" +msgstr "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1102,6 +1088,10 @@ msgstr "Linphone - Authentifikation erforderlich" msgid "Please enter the domain password" msgstr "Bitte das Passwort der Domäne eingeben" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "Benutzer-ID" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "Anrufchronik" @@ -1244,7 +1234,9 @@ msgstr "Einstellungen" #: ../gtk/parameters.ui.h:18 msgid "This section defines your SIP address when not using a SIP account" -msgstr "In diesem Bereich legen Sie Ihre SIP-Adresse fest, wenn Sie kein SIP-Konto verwenden." +msgstr "" +"In diesem Bereich legen Sie Ihre SIP-Adresse fest, wenn Sie kein SIP-Konto " +"verwenden." #: ../gtk/parameters.ui.h:19 msgid "Your display name (eg: John Doe):" @@ -1382,7 +1374,9 @@ msgstr "Adaptive Ratenregelung ein" msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." -msgstr "Adaptive Ratenregelung ist eine Technik zur dynamischen Abschätzung der zur Verfügung stehenden Bandbreite während eines Anrufs." +msgstr "" +"Adaptive Ratenregelung ist eine Technik zur dynamischen Abschätzung der " +"zur Verfügung stehenden Bandbreite während eines Anrufs." #: ../gtk/parameters.ui.h:53 msgid "Bandwidth control" @@ -1644,6 +1638,14 @@ msgstr "Port" msgid "Configure tunnel" msgstr "Tunnel einrichten" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "Benutzername" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "Passwort" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "Configure http proxy (optional)" @@ -1743,9 +1745,17 @@ msgstr "Eine URI zur FErnkonfiguration angeben" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " -msgstr "Diese Maske erlaubt Ihnen für das Laden der Konfiguration beim Programmstart eine http- oder https-Adresse anzugeben.\nBitte geben Sie unten die Konfigurations-URI ein oder ändern diese. Nach dem Bestätigen mit OK wird Linphone automatisch neustarten, um die neuen Einstellungen zu übernehmen." +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " +msgstr "" +"Diese Maske erlaubt Ihnen für das Laden der Konfiguration beim Programmstart " +"eine http- oder https-Adresse anzugeben.\n" +"Bitte geben Sie unten die Konfigurations-URI ein oder ändern diese. Nach dem " +"Bestätigen mit OK wird Linphone automatisch neustarten, um die neuen " +"Einstellungen zu übernehmen." #: ../gtk/provisioning-fetch.ui.h:1 msgid "Configuring..." @@ -1753,62 +1763,115 @@ msgstr "Einstellen..." #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." -msgstr "Bitte warten Sie während die Einstellungen vom Server abgerufen werden..." +msgstr "" +"Bitte warten Sie während die Einstellungen vom Server abgerufen werden..." + +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "Senden" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "Name des Angerufenen" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "Konferenz beenden" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "Speichere den Anruf in eine Audio-Datei" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "Video" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "Stumm" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "Vermittlung" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "Im Gespräch" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "Dauer" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "Bewertung der Verbindungsqualität" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "Internetverbindung:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "Automatisch anmelden" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "Anmeldeinformationen" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "Willkommen!" #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Bereit" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "Einstellen" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Telefonnummernziel wird gesucht..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "Diese Nummer kann nicht aufgelöst werden." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "Verbindungsaufbau" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "Anruf kann nicht getätigt werden." -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Die maximale Anzahl der gleichzeitigen Anrufe ist erreicht." -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "ruft Sie an" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr " und fragt nach automatischer Antwort." -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "Die Anrufparameter werden verändert..." -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Verbunden." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "Anruf abgebrochen" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "Anruf kann nicht gehalten werden" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "Aktueller Anruf wird gehalten..." @@ -1872,23 +1935,41 @@ msgstr "Urlaub" msgid "Unknown status" msgstr "Unbekannter Status" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "Die von Ihnen eingegebene SIP-Proxy-Adresse ist ungültig, sie muss mit „sip:“ gefolgt vom Hostnamen beginnen." +msgstr "" +"Die von Ihnen eingegebene SIP-Proxy-Adresse ist ungültig, sie muss mit " +"„sip:“ gefolgt vom Hostnamen beginnen." -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "Die von Ihnen eingegebene SIP-Identität ist ungültig.\nSie sollte wie sip:benutzername@proxydomain aussehen, also z.B. sip:alice@beispiel.net" +msgstr "" +"Die von Ihnen eingegebene SIP-Identität ist ungültig.\n" +"Sie sollte wie sip:benutzername@proxydomain aussehen, also z.B. sip:" +"alice@beispiel.net" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Telefonnummernziel wird gesucht..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "Diese Nummer kann nicht aufgelöst werden." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "Anmeldung als %s fehlgeschlagen" +#: ../coreapi/proxy.c:1494 +#, fuzzy, c-format +msgid "Refreshing on %s..." +msgstr "abrufen von %s" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "Klingeln bei der Gegenseite." @@ -1922,9 +2003,10 @@ msgstr "Anruf wird von %s entgegengenommen." #: ../coreapi/callbacks.c:598 msgid "Incompatible, check codecs or security settings..." -msgstr "Inkompatibel, überprüfen Sie die Codecs oder die Sicherheitseinstellungen..." +msgstr "" +"Inkompatibel, überprüfen Sie die Codecs oder die Sicherheitseinstellungen..." -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "Inkompatible Medienparameter." @@ -1942,59 +2024,59 @@ msgstr "Anruf wird von der Gegenseite gehalten." msgid "Call is updated by remote." msgstr "Anruf ist von der Gegenseite aktualisiert worden." -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "Anruf beendet." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Teilnehmer ist besetzt." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "Teilnehmer zur Zeit nicht verfügbar." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "Teilnehmer möchte nicht gestört werden." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Anruf abgewiesen" -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "Zeitüberschreitung bei der Anfrage" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "Umgeleitet" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "Anruf fehlgeschlagen." -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "Registrierung auf %s erfolgreich." -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "Abmeldung von %s ist erfolgt." -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "Zeitüberschreitung bei der Antwort" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrierung auf %s fehlgeschlagen: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "Service nicht verfügbar, versuche erneut" @@ -2004,11 +2086,11 @@ msgstr "Service nicht verfügbar, versuche erneut" msgid "Authentication token is %s" msgstr "Authentifizierungs-Token ist %s" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "Anrufparameter wurden erfolgreich geändert." -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." @@ -2039,7 +2121,12 @@ msgid "" "To: %s\n" "Status: %s\n" "Duration: %i mn %i sec\n" -msgstr "%s um %s\nVon: %s\nAn: %s\nStatus: %s\nDauer: %i Min. %i Sek.\n" +msgstr "" +"%s um %s\n" +"Von: %s\n" +"An: %s\n" +"Status: %s\n" +"Dauer: %i Min. %i Sek.\n" #: ../coreapi/call_log.c:221 msgid "Outgoing call" diff --git a/po/es.po b/po/es.po index c18f02175..82a9efe16 100644 --- a/po/es.po +++ b/po/es.po @@ -1,20 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Spanish (http://www.transifex.com/p/linphone-gtk/language/es/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Spanish (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -74,7 +76,7 @@ msgstr "" msgid "%s\t%s" msgstr "" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "Conferencia" @@ -87,9 +89,14 @@ msgstr "Yo" msgid "Couldn't find pixmap file: %s" msgstr "No se pudo encontrar el archivo pixmap: %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." -msgstr "registra a stdout cierta información de depuración durante la ejecución." +msgstr "" +"registra a stdout cierta información de depuración durante la ejecución." #: ../gtk/main.c:139 msgid "display version and exit." @@ -113,9 +120,11 @@ msgstr "dirección a la que llamar inmediatamente" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "Especifique un directorio de trabajo (debería ser la raíz de la instalación, ej: c:\\Archivos de Programa\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Especifique un directorio de trabajo (debería ser la raíz de la instalación, " +"ej: c:\\Archivos de Programa\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -129,88 +138,91 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Llamada entrante" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "Contestar" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "Enlace a la Web" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (Opción predeterminada)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "Somos transferidos a %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "No se ha encontrado una tarjeta de sonido en este equipo.\nNo será posible realizar o recibir llamadas de audio." +msgstr "" +"No se ha encontrado una tarjeta de sonido en este equipo.\n" +"No será posible realizar o recibir llamadas de audio." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "Un video-teléfono SIP gratuito" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -288,108 +300,108 @@ msgstr "Activado" msgid "Disabled" msgstr "Desactivado" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Cuenta" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "Inglés" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Francés" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Sueco" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Español" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Portugués de Brasil" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Polaco" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Alemán" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Ruso" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "Japonés" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Holandés" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Húngaro" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Checo" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "Chino" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "Chino Tradicional" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "Noruego" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Deberá reiniciar linphone para aplicar la nueva selección de lenguaje" -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ZRTP" @@ -431,149 +443,150 @@ msgid_plural "Found %i contacts" msgstr[0] "Se encontró %i contacto" msgstr[1] "Se encontraron %i contactos" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "Gracias. Su cuenta está configurada y lista para su utilización." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "Bienvenido al asistente de configuración de cuenta" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Asistente de configuración de cuenta" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -656,115 +669,116 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "" -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "buena" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "media" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "mala" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "muy mala" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "demasiado mala" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "no disponible" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "Cifrada con SRTP" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Cifrada con ZRTP - [token de autenticación: %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "Set sin verificar" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "Set verificado" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "En conferencia" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "" -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "" -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "Reanudar" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "Pausar" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "Por favor, introduzca los datos de inicio de sesión para %s" @@ -861,7 +875,7 @@ msgstr "" msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "" @@ -878,165 +892,97 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "Transferir" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "Calidad de la llamada" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "Todos los usuarios" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "Canal de Fibra" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_Opciones" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "_Ayuda" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_Pagina_de_Inicio" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "Buscar_Actualizaciones" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "Iniciar nueva llamada" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Buscar" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "Conexión a Internet" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "Iniciar sesión automáticamente" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "UserID" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "" @@ -1047,7 +993,9 @@ msgstr "" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "Un vídeo-teléfono a través de Internet que usa el protocolo estándar SIP (rfc3261)" +msgstr "" +"Un vídeo-teléfono a través de Internet que usa el protocolo estándar SIP " +"(rfc3261)" #: ../gtk/about.ui.h:5 msgid "" @@ -1097,6 +1045,10 @@ msgstr "" msgid "Please enter the domain password" msgstr "Por favor introduzca la contraseña del dominio" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "UserID" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "Registro de llamadas" @@ -1377,7 +1329,9 @@ msgstr "Activar control de frecuencia adaptativo" msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." -msgstr "Control de frecuencia adaptativo es una técnica que estima dinámicamente el ancho de banda disponible durante la llamada." +msgstr "" +"Control de frecuencia adaptativo es una técnica que estima dinámicamente " +"el ancho de banda disponible durante la llamada." #: ../gtk/parameters.ui.h:53 msgid "Bandwidth control" @@ -1639,6 +1593,14 @@ msgstr "" msgid "Configure tunnel" msgstr "" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "" @@ -1738,8 +1700,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1750,60 +1715,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "Transferir" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "Calidad de la llamada" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "Conexión a Internet" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "Iniciar sesión automáticamente" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Buscando el número de teléfono del destinatario…" - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "No se ha podido resolver este número." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Disculpe, se ha alcanzado el máximo número de llamadas simultáneas" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "y ha solicitado auto respuesta." -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "Modificando parámetros de llamada…" -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Conectado." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "No se pudo pausar la llamada" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "Pausando la llamada actual..." @@ -1867,23 +1884,41 @@ msgstr "" msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "La dirección del Proxy SIP que ha introducido no es válida, debe empezar con \"sip:\" seguido del hostname." +msgstr "" +"La dirección del Proxy SIP que ha introducido no es válida, debe empezar con " +"\"sip:\" seguido del hostname." -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "La identidad SIP que ha introducido no es válida.\nDebe ser del tipo sip:username@proxydomain, como por ejemplo sip:alice@example.net" +msgstr "" +"La identidad SIP que ha introducido no es válida.\n" +"Debe ser del tipo sip:username@proxydomain, como por ejemplo sip:" +"alice@example.net" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Buscando el número de teléfono del destinatario…" + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "No se ha podido resolver este número." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "" @@ -1919,7 +1954,7 @@ msgstr "" msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "" @@ -1937,59 +1972,59 @@ msgstr "" msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "" -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "El usuario está ocupado." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "El usuario no está disponible temporalmente." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "El usuario no quiere que le molesten." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Llamada rechazada." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "Redigirida" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:1007 -#, c-format -msgid "Registration on %s successful." -msgstr "" - #: ../coreapi/callbacks.c:1008 #, c-format +msgid "Registration on %s successful." +msgstr "" + +#: ../coreapi/callbacks.c:1009 +#, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "timeout sin respuesta" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -1999,11 +2034,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/fr.po b/po/fr.po index 751217994..f15677f13 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Belledonne Communications , 2015 # Gautier Pelloux-Prayer , 2014 @@ -12,14 +12,15 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" -"PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: French (http://www.transifex.com/p/linphone-gtk/language/fr/)\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" +"PO-Revision-Date: 2015-08-23 09:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: French (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -72,14 +73,16 @@ msgstr[1] "%i secondes" msgid "" "%s\tQuality: %s\n" "%s\t%s\t" -msgstr "%s\tQualité: %s\n%s\t%s\t" +msgstr "" +"%s\tQualité: %s\n" +"%s\t%s\t" #: ../gtk/calllogs.c:342 #, c-format msgid "%s\t%s" msgstr "%s\t%s" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "Conférence" @@ -92,6 +95,10 @@ msgstr "Moi" msgid "Couldn't find pixmap file: %s" msgstr "Icone non trouvée: %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "affiche des informations de debogage" @@ -118,9 +125,11 @@ msgstr "adresse à appeler maintenant" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "Spécifie un répertoire de travail (qui devrait être le répertoire d'installation, par exemple c:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Spécifie un répertoire de travail (qui devrait être le répertoire " +"d'installation, par exemple c:\\Program Files\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -134,88 +143,98 @@ msgstr "Démarre l'assistant audio" msgid "Run self test and exit 0 if succeed" msgstr "Exécuter le test local et retourner 0 en cas de succès" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" +"%s souhaite vous ajouter à sa liste de contact.\n" +"Souhaitez vous l'ajouter à votre liste également et l'autoriser à voir votre " +"information de présence ?\n" +"Si vous répondez non, cette personne sera mise temporairement sur liste " +"noire." -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "Entrez le mot de passe pour %s\n sur le domaine %s:" +msgstr "" +"Entrez le mot de passe pour %s\n" +" sur le domaine %s:" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "Erreur lors de l'appel" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "Appel terminé." -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Appel entrant" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "Répondre" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "Refuser" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "Appel en pause" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "b>par %s" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s propose de démarrer la vidéo. Acceptez-vous ?" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "Lien site web" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "Appels vidéo via internet" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (par défaut)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "Transfert vers %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "Aucune carte son n'a été détectée sur cet ordinateur.\nVous ne pourrez pas effectuer d'appels audio." +msgstr "" +"Aucune carte son n'a été détectée sur cet ordinateur.\n" +"Vous ne pourrez pas effectuer d'appels audio." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "Un visiophone libre" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "Bonjour\n" @@ -293,108 +312,110 @@ msgstr "Activé" msgid "Disabled" msgstr "Désactivé" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Compte" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "Anglais" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Français" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Suédois" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Italien" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Espagnol" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Portugais brésilien" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Polonais" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Allemand" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Russe" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "日本語" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Néérlandais" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Hongrois" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Tchèque" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "简体中文" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "Chinois traditionnel" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "Norvégien" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "Hébreu" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "Serbe" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "Arabe" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "Turc" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." -msgstr "La nouvelle selection de langue prendra effet au prochain démarrage de linphone." +msgstr "" +"La nouvelle selection de langue prendra effet au prochain démarrage de " +"linphone." -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "Aucun" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ZRTP" @@ -403,7 +424,10 @@ msgstr "ZRTP" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "Une version plus récente est disponible sur %s.\nVoulez vous ouvrir le navigateur afin de pouvoir télécharger la dernière version ?" +msgstr "" +"Une version plus récente est disponible sur %s.\n" +"Voulez vous ouvrir le navigateur afin de pouvoir télécharger la dernière " +"version ?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -436,149 +460,158 @@ msgid_plural "Found %i contacts" msgstr[0] "%i contact trouvé." msgstr[1] "%i contacts trouvés." -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." -msgstr "Bienvenue !\nCet assistant va vous aider à utiliser un compte SIP pour vos appels." +msgstr "" +"Bienvenue !\n" +"Cet assistant va vous aider à utiliser un compte SIP pour vos appels." -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "Créer un compte sur linphone.org" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "J'ai déjà un compte linphone.org et je souhaite l'utiliser" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "J'ai déjà un compte Sip et je souhaite l'utiliser" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "Je veux spécifier une URI de configuration" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "Entrez vos paramètres de compte" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "Nom d'utilisateur*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "Mot de passe*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "Domaine*" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "Proxy" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "Entrez votre identifiant linphone.org" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Nom d'utilisateur:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Mot de passe:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) Champs requis" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "Nom d'utilisateur: (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "Mot de passe: (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "Email : (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "Confirmez votre mot de passe: (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "Me tenir informé des mises à jour de Linphone " -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "Votre compte est en cours de création. Veuillez patienter." -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "Merci de valider votre compte en cliquant sur le lien que nous avons envoyé par email.\nPuis appuyez sur suivant." +msgstr "" +"Merci de valider votre compte en cliquant sur le lien que nous avons envoyé " +"par email.\n" +"Puis appuyez sur suivant." -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "Vérification que le compte a été validé. Veuillez patienter." -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "Erreur, le compte n'est pas validé, l'identifiant est déjà utilisé ou le serveur n'est pas accessible.\nMerci d'essayer à nouveau." +msgstr "" +"Erreur, le compte n'est pas validé, l'identifiant est déjà utilisé ou le " +"serveur n'est pas accessible.\n" +"Merci d'essayer à nouveau." -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "Merci. Votre compte est maintenant configuré et prêt à être utilisé." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "Assistant de configuration de compte." -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "Bienvenue dans l'assistant de configuration de compte." -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Assistant de configuration de compte." -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "Configurez votre compte (étape 1/1)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "Entrez votre identifiant sip (étape 1/1)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "Entrez les informations concernant votre compte (étape 1/2)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "Création du compte en cours" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "Validation (étape 2/2)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "Vérification de la validité du compte en cours" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "Erreur" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "En cours d’arrêt." @@ -649,7 +682,9 @@ msgstr "Directe ou via un serveur" msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "débit descendant : %f\ndébit ascendant : %f (kbits/s)" +msgstr "" +"débit descendant : %f\n" +"débit ascendant : %f (kbits/s)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format @@ -661,115 +696,118 @@ msgstr "%ix%i @ %f fps" msgid "%.3f seconds" msgstr "%.3f secondes" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "Raccrocher" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "Tentative d'appel..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "Appel entrant" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "bon" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "moyen" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "faible" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "très faible" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "nulle" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "indisponible" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "Sécurisé par SRTP" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "Sécurisé par DTLS" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Sécurisé par ZRTP- [jeton: %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "Marquer comme non vérifié" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "Marquer comme vérifié" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "En conférence" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "Appel en cours" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "Appel en attente" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "Appel terminé." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "Transfert en cours" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "Transfert terminé" -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "Transfert échoué" -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "Reprendre" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "Pause" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" -msgstr "Enregistrement dans\n%s %s" +msgstr "" +"Enregistrement dans\n" +"%s %s" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(en attente)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "Entrez vos identifiants pour %s" @@ -816,7 +854,10 @@ msgstr "Impossible de démarrer le contrôleur système du son" msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" -msgstr "Bienvenue !\nCet assistant va vous aider à régler les paramètres audio de votre ordinateur pour une utilisation optimale avec Linphone." +msgstr "" +"Bienvenue !\n" +"Cet assistant va vous aider à régler les paramètres audio de votre " +"ordinateur pour une utilisation optimale avec Linphone." #: ../gtk/audio_assistant.c:335 msgid "Capture device" @@ -866,7 +907,7 @@ msgstr "Démarrons Linphone maintenant" msgid "Audio Assistant" msgstr "Assistant audio" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "Assistant audio" @@ -883,165 +924,97 @@ msgid "Record and Play" msgstr "Enregistrer et joue" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "Nom du correspondant" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "Envoyer" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "Fin de conférence" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "Enregistrement de l'appel dans un fichier audio." - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "Vidéo" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "Couper le son" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "Transfert" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "Appel en cours" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "Durée" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "Qualité de l'appel" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "Tous" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "En ligne" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "Fibre optique" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "Par défaut" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "Supprimer" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_Options" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "URI de configuration" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "Toujours activer la vidéo" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "Se voir" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "_Aide" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "Fenêtre de débogage" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_Site web" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "_Mises à jour" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "Assistant de compte" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "Adresse SIP ou numéro" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "Démarrer un nouvel appel" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "Contacts" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Rechercher" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "Ajouter un contact depuis l'annuaire" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "Ajouter un contact." -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "Appels récents" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "Mon identité SIP :" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "Nom d'utilisateur" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "Mot de passe" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "Connexion internet:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "Me connecter automatiquement" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "ID utilisateur" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "Information de login" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "Bienvenue !" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "À propos de Linphone" @@ -1068,7 +1041,19 @@ msgid "" "cs: Petr Pisar \n" "hu: anonymous\n" "he: Eli Zaretskii \n" -msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni \nde: Jean-Jacques Sarton \nsv: Daniel Nylander \nes: Jesus Benitez \nja: YAMAGUCHI YOSHIYA \npt_BR: Rafael Caesar Lenzi \npl: Robert Nasiadek \ncs: Petr Pisar \nhu: anonymous\nhe: Eli Zaretskii \n" +msgstr "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1102,6 +1087,10 @@ msgstr "Linphone - Authentification demandée" msgid "Please enter the domain password" msgstr "Entrez votre mot de passe pour le domaine" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "ID utilisateur" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "Historique des appels" @@ -1244,7 +1233,9 @@ msgstr "Réglages" #: ../gtk/parameters.ui.h:18 msgid "This section defines your SIP address when not using a SIP account" -msgstr "Cette rubrique permet de définir son adresse SIP lorsqu'on ne possède pas de compte SIP" +msgstr "" +"Cette rubrique permet de définir son adresse SIP lorsqu'on ne possède pas de " +"compte SIP" #: ../gtk/parameters.ui.h:19 msgid "Your display name (eg: John Doe):" @@ -1382,7 +1373,10 @@ msgstr "Activer le control de débit adaptatif." msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." -msgstr "Le control de débit adaptatif est une technique pour adapter la qualité de l'audio et de la video en fonction de la bande passante disponible, durant l'appel." +msgstr "" +"Le control de débit adaptatif est une technique pour adapter la qualité " +"de l'audio et de la video en fonction de la bande passante disponible, " +"durant l'appel." #: ../gtk/parameters.ui.h:53 msgid "Bandwidth control" @@ -1644,6 +1638,14 @@ msgstr "Port" msgid "Configure tunnel" msgstr "Configuration du tunnel" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "Mot de passe" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "Configuration d'un proxy http (optionel)" @@ -1743,9 +1745,17 @@ msgstr "Spécifier une URI de configuration" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " -msgstr "Cette boite de dialogue vous permet de spécifier une addresse http ou https où la configuration doit être téléchargée au démarrage.\nVeuillez entrer l'URI http(s) ci dessous. Après avoir validé, Linphone va redémarrer automatiquement pour charger et prendre en compte la nouvelle configuration." +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " +msgstr "" +"Cette boite de dialogue vous permet de spécifier une addresse http ou https " +"où la configuration doit être téléchargée au démarrage.\n" +"Veuillez entrer l'URI http(s) ci dessous. Après avoir validé, Linphone va " +"redémarrer automatiquement pour charger et prendre en compte la nouvelle " +"configuration." #: ../gtk/provisioning-fetch.ui.h:1 msgid "Configuring..." @@ -1753,62 +1763,116 @@ msgstr "Configuration en cours" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." -msgstr "Veuillez patenter un instant pendant le chargement de la configuration distante..." +msgstr "" +"Veuillez patenter un instant pendant le chargement de la configuration " +"distante..." + +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "Envoyer" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "Nom du correspondant" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "Fin de conférence" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "Enregistrement de l'appel dans un fichier audio." + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "Vidéo" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "Couper le micro" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "Transfert" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "Appel en cours" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "Durée" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "Qualité de l'appel" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "Connexion internet:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "Me connecter automatiquement" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "Information de login" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "Bienvenue !" #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Prêt." -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "Configuration en cours" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Recherche de la destination du numéro de téléphone..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "La destination n'a pu être trouvée." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "Appel de" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "Echec de l'appel" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Désolé, le nombre maximum d'appels simultanés est atteint." -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "vous appelle" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "et sollicite un décrochage automatique." -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "Modifications des paramètres d'appels..." -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "En ligne." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "Appel abandonné" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "La mise en attente a échoué" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "Mise en attente de l'appel..." @@ -1872,23 +1936,41 @@ msgstr "En congé" msgid "Unknown status" msgstr "Status inconnu" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "L'adresse SIP du proxy est invalide. Elle doit commencer par \"sip:\" suivie par un nom de domaine." +msgstr "" +"L'adresse SIP du proxy est invalide. Elle doit commencer par \"sip:\" suivie " +"par un nom de domaine." -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "L'identité SIP que vous avez fourni est invalide.\nElle doit être de la forme sip:utilisateur@domaine, comme par exemple sip:alice@example.net" +msgstr "" +"L'identité SIP que vous avez fourni est invalide.\n" +"Elle doit être de la forme sip:utilisateur@domaine, comme par exemple sip:" +"alice@example.net" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Recherche de la destination du numéro de téléphone..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "La destination n'a pu être trouvée." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "Echec de la connexion en tant que %s" +#: ../coreapi/proxy.c:1494 +#, fuzzy, c-format +msgid "Refreshing on %s..." +msgstr "chargement depuis %s" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "Sonnerie distante." @@ -1924,7 +2006,7 @@ msgstr "Appel répondu par %s." msgid "Incompatible, check codecs or security settings..." msgstr "Incompatible, vérfiez les codecs ou les paramètres de sécurité..." -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "Paramètres media incompatibles." @@ -1942,59 +2024,59 @@ msgstr "L'appel a été mis en attente." msgid "Call is updated by remote." msgstr "L'appel est modifié par la partie distante." -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "Appel terminé." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Occupé..." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "L'usager est temporairement indisponible." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "L'usager ne souhaite pas être dérangé" -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Appel décliné." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "Délai d'attente de la requête dépassé." -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "Redirection" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "L'appel a échoué." -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "Enregistrement sur %s effectué." -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "Désenregistrement sur %s effectué." -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "Pas de réponse" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "Echec de l'enregistrement sur %s: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "Service indisponible, nouvelle tentative" @@ -2004,11 +2086,11 @@ msgstr "Service indisponible, nouvelle tentative" msgid "Authentication token is %s" msgstr "Le jeton d'authentification est %s" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "Les paramètres d'appel ont été modifiés avec succès." -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." @@ -2039,7 +2121,12 @@ msgid "" "To: %s\n" "Status: %s\n" "Duration: %i mn %i sec\n" -msgstr "%s à %s\nDe : %s\nVers : %s\nStatus : %s\nDurée : %i min %i sec\n" +msgstr "" +"%s à %s\n" +"De : %s\n" +"Vers : %s\n" +"Status : %s\n" +"Durée : %i min %i sec\n" #: ../coreapi/call_log.c:221 msgid "Outgoing call" diff --git a/po/he.po b/po/he.po index 2b1539249..540d02ee6 100644 --- a/po/he.po +++ b/po/he.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Eli Zaretskii , 2012 # Gautier Pelloux-Prayer , 2015 @@ -12,14 +12,16 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Hebrew (http://www.transifex.com/p/linphone-gtk/language/he/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Hebrew (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/he/)\n" +"Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: he\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -72,14 +74,16 @@ msgstr[1] "%i שניות" msgid "" "%s\tQuality: %s\n" "%s\t%s\t" -msgstr "%s\tאיכות: %s\n%s\t%s\t" +msgstr "" +"%s\tאיכות: %s\n" +"%s\t%s\t" #: ../gtk/calllogs.c:342 #, c-format msgid "%s\t%s" msgstr "" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "ועידה" @@ -92,6 +96,10 @@ msgstr "אני" msgid "Couldn't find pixmap file: %s" msgstr "לא ניתן למצוא קובץ ‫pixmap: ‫%s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "" @@ -118,8 +126,8 @@ msgstr "" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" msgstr "" #: ../gtk/main.c:145 @@ -134,88 +142,93 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "אנא הזן סיסמה עבור משתמש %s\nבמתחם %s:" +msgstr "" +"אנא הזן סיסמה עבור משתמש %s\n" +"במתחם %s:" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "שגיאת קריאה" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "שיחה הסתיימה" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "קריאה נכנסת" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "לענות" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "לדחות" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "שיחה הושהתה" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "על ידי %s" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "‏%s רוצה להתחיל וידאו. האם אתה מסכים ?" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "קישור אתר רשת" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "‫%s (ברירת מחדל)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "אנחנו מועברים אל %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "לא אותרו כרטיסי קול במחשב זה.\nלא תהיה ביכולתך לשלוח או לקבל שיחות אודיו." +msgstr "" +"לא אותרו כרטיסי קול במחשב זה.\n" +"לא תהיה ביכולתך לשלוח או לקבל שיחות אודיו." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "וידאופון SIP חופשי" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -293,108 +306,108 @@ msgstr "מופעל" msgid "Disabled" msgstr "לא מופעל" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "חשבון" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "English" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Français" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Svenska" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Español" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "português brasileiro" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Polski" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Deutsch" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Русский" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "日本語" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Nederlands" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Magyar" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Česky" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "中文" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "繁體字" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "norsk" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "עברית" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "српски srpski" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "עליך לאתחל את לינפון כדי שהשפה החדשה תיכנס לתוקף." -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "ללא" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "" @@ -403,7 +416,9 @@ msgstr "" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "גרסא מאוחרת יותר זמינה מן %s.\nהאם ברצונך לפתוח דפדפן בכדי להורידה ?" +msgstr "" +"גרסא מאוחרת יותר זמינה מן %s.\n" +"האם ברצונך לפתוח דפדפן בכדי להורידה ?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -436,149 +451,154 @@ msgid_plural "Found %i contacts" msgstr[0] "נמצא איש קשר %i" msgstr[1] "נמצאו %i אנשי קשר" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "צור חשבון אצל linphone.org" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "כבר קיים חשבון linphone.org ברשותי וברצוני לעשות בו שימוש" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "כבר קיים חשבון sip ברשותי וברצוני לעשות בו שימוש" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "שם משתמש*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "סיסמה*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "מתחם*" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "פרוקסי" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "הזן את שם משתמשך אצל linphone.org" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "שם משתמש:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "סיסמה:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) שדות חובה" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "שם משתמש: (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "סיסמה: (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "דוא״ל: (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "אימות סיסמתך: (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "נא לאמת את חשבונך באמצעות הקלקה על הקישור ששלחנו לך עתה באמצעות דוא״ל.\nאחרי כן נא לחזור לכאן וללחוץ על הלחצן 'קדימה'." +msgstr "" +"נא לאמת את חשבונך באמצעות הקלקה על הקישור ששלחנו לך עתה באמצעות דוא״ל.\n" +"אחרי כן נא לחזור לכאן וללחוץ על הלחצן 'קדימה'." -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "שגיאה, חשבון לא אומת, שם משתמש כבר בשימוש או שרת לא ניתן להשגה.\nנא לחזור ולנסות שוב." +msgstr "" +"שגיאה, חשבון לא אומת, שם משתמש כבר בשימוש או שרת לא ניתן להשגה.\n" +"נא לחזור ולנסות שוב." -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "תודה לך. חשבונך מוגדר ומוכן לשימוש כעת." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "ברוך בואך אל אשף הגדרת החשבון" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "אשף הגדרת חשבון" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "הגדרת חשבונך (צעד 1/1)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "הזנת שם משתמש sip (צעד 1/1)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "הזנת מידע חשבון (צעד 1/2)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "אימות (צעד 2/2)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "שגיאה" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "מסיים כעת" @@ -649,7 +669,9 @@ msgstr "ישיר או דרך שרת" msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "הורדה: %f\nהעלאה: %f (קי״ב/שנ׳)" +msgstr "" +"הורדה: %f\n" +"העלאה: %f (קי״ב/שנ׳)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format @@ -661,115 +683,119 @@ msgstr "" msgid "%.3f seconds" msgstr "%.3f שניות" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "נתק" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "מתקשר כעת..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +#, fuzzy +msgid "00:00:00" msgstr "‭00::00::00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "קריאה נכנסת" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "טובה" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "ממוצעת" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "דלה" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "דלה מאוד" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "גרועה מדי" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "לא זמינה" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "מאובטחת על ידי SRTP" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "מאובטחת על ידי ZRTP - [אות אימות: %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "הגדר כלא מאומתת" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "הגדר כמאומתת" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "בשיחת ועידה" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "בשיחה כעת" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "שיחה מושהית" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "שיחה הסתיימה." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "העברה מצויה כעת בעיצומה" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "העברה הסתיימה." -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "העברה נכשלה." -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "חזור" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "השהה" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" -msgstr "מקליט אל תוך\n%s %s" +msgstr "" +"מקליט אל תוך\n" +"%s %s" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(מושהה)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "נא להזין מידע התחברות עבור %s" @@ -866,7 +892,7 @@ msgstr "הבא נתחיל את Linphone עכשיו" msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "" @@ -883,165 +909,97 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "שם מקבל" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "שלח" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "סיים ועידה" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "הקלט את שיחה זו אל קובץ אודיו" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "וידאו" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "השתק" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "העבר" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "בשיחה כעת" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "משך זמן" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "אומדן איכות שיחה" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "כל המשתמשים" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "משתמשים מקוונים" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "‫ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "ערוץ סיב" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "ברירת מחדל" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "מחק" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_אפשרויות" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "התחל תמיד וידאו" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "אפשר ראות-עצמית" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "_עזרה" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "הצג חלון ניפוי שגיאות" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_עמוד הבית" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "בדיקת _עדכונים" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "אשף חשבון" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "כתובת SIP או מספר טלפון" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "התחל שיחה חדשה" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "אנשי קשר" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "חיפוש" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "הוסף אנשי קשר מן מדור" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "הוסף איש קשר" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "שיחות אחרונות" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "זהותי הנוכחית:" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "שם משתמש" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "סיסמה" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "חיבור אינטרנט:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "חבר אותי אוטומטית" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "מזהה משתמש" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "מידע התחברות" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "" @@ -1102,6 +1060,10 @@ msgstr "‫Linphone - נדרש אימות" msgid "Please enter the domain password" msgstr "נא להזין את סיסמת המתחם" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "מזהה משתמש" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "היסטוריית שיחות" @@ -1382,7 +1344,9 @@ msgstr "אפשר בקרת קצב מסתגלת" msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." -msgstr "בקרת קצב מסתגלת הינה טכניקה להשערה דינמית של רוחב הפס הזמין במהלך שיחה." +msgstr "" +"בקרת קצב מסתגלת הינה טכניקה להשערה דינמית של רוחב הפס הזמין במהלך שיחה." #: ../gtk/parameters.ui.h:53 msgid "Bandwidth control" @@ -1644,6 +1608,14 @@ msgstr "פורט" msgid "Configure tunnel" msgstr "הגדר מינהור" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "שם משתמש" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "סיסמה" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "הגדר http proxy (רשות)" @@ -1743,8 +1715,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1755,60 +1730,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "שלח" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "שם מקבל" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "סיים ועידה" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "הקלט את שיחה זו אל קובץ אודיו" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "וידאו" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "השתק" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "העבר" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "בשיחה כעת" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "משך זמן" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "אומדן איכות שיחה" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "חיבור אינטרנט:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "חבר אותי אוטומטית" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "מידע התחברות" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "מוכן" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "מחפש כעת עבור יעד מספר טלפון..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "לא ניתן לפתור את מספר זה." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "מתקשר כעת" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "לא ניתן להתקשר" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "הגענו אל המספר המרבי של שיחות מקבילות, עמך הסליחה" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "מתקשר/ת אליך" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr " ומבקש/ת מענה אוטומטי." -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "מתאים כעת פרמטרים של שיחה..." -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "מקושר." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "קריאה בוטלה" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "לא ניתן להשהות את השיחה" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "משהה כעת שיחה נוכחית..." @@ -1872,23 +1899,39 @@ msgstr "" msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "כתובת sip proxy שהזנת הינה שגויה, זו צריכה להתחיל עם‭\"sip:\" ‬ לאחר שם מארח." +msgstr "" +"כתובת sip proxy שהזנת הינה שגויה, זו צריכה להתחיל עם‭\"sip:\" ‬ לאחר שם מארח." -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "זהות sip שהוזנה הינה שגויה.\nזו צריכה להיראות כמו sip:username@proxydomain, למשל sip:alice@example.net" +msgstr "" +"זהות sip שהוזנה הינה שגויה.\n" +"זו צריכה להיראות כמו sip:username@proxydomain, למשל sip:alice@example.net" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "מחפש כעת עבור יעד מספר טלפון..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "לא ניתן לפתור את מספר זה." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "לא ניתן להתחבר בזהות %s" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "צלצול מרוחק." @@ -1924,7 +1967,7 @@ msgstr "קריאה נענתה על ידי %s." msgid "Incompatible, check codecs or security settings..." msgstr "חוסר תאימות, בדוק קודקים או הגדרות אבטחה..." -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "פרמטריי מדיה חסרי תואמים." @@ -1942,59 +1985,59 @@ msgstr "אנו מושהים על ידי צד אחר." msgid "Call is updated by remote." msgstr "שיחה עודכנה מרחוק." -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "קריאה הסתיימה." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "משתמש עסוק כעת." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "משתמש לא זמין זמנית." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "משתמש לא מעוניין שיפריעו לו." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "קריאה סורבה." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "מכוון מחדש" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "קריאה נכשלה." -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "רישום אצל %s הושלם בהצלחה." -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "אי רישום אצל %s סוים." -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "אין היענות תוך זמן מוגדר" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "רישום אצל %s נכשל: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -2004,11 +2047,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "אות האימות הינה %s" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/hu.po b/po/hu.po index 6e8ab77e8..dc1155db5 100644 --- a/po/hu.po +++ b/po/hu.po @@ -1,20 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Hungarian (http://www.transifex.com/p/linphone-gtk/language/hu/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Hungarian (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/hu/)\n" +"Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -74,7 +76,7 @@ msgstr "" msgid "%s\t%s" msgstr "" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "Konferencia" @@ -87,6 +89,10 @@ msgstr "én" msgid "Couldn't find pixmap file: %s" msgstr "Nemtalálható a pixmap fájl: %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "Futás közben némi hibakeresési információ az stdout-ra naplózása." @@ -113,9 +119,11 @@ msgstr "Cím azonnali híváshoz" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "Adjon meg egy munkakönyvtárat (ennek az installációs könyvtárnak kéne lennie, pl. C:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Adjon meg egy munkakönyvtárat (ennek az installációs könyvtárnak kéne " +"lennie, pl. C:\\Program Files\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -129,88 +137,91 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "Hiba a hívás közben" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "Hívás vége" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Beérkező hívás" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "Hívás fogadása" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "Elutasítás" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "Hívás várakoztatva" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "a következő által: %s" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s szerené elidítani a videót. Elfogadja?" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "Internetes oldal" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (Alapértelmezett)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "Át vagyunk irányítva ide: %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "Hangkártya nincs érzékelve ezen a számítógépen.\nNem fog tudni hang hívásokat küldeni vagy fogadni." +msgstr "" +"Hangkártya nincs érzékelve ezen a számítógépen.\n" +"Nem fog tudni hang hívásokat küldeni vagy fogadni." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "Egy ingyenes SIP video-telefon" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -288,108 +299,110 @@ msgstr "Engedélyezve" msgid "Disabled" msgstr "Tiltva" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Hozzáférés" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "angol" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "francia" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "svéd" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "olasz" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "spanyol" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "brazil-portugál" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "lengyel" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "német" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "orosz" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "japán" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "holland" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "magyar" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "cseh" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "egyszerúsített kínai" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "tradícionális kínai" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "norvég" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "héber" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." -msgstr "Újra kell indítania a linphone-t, hogy az új nyelv kiválasztása érvényre jusson. " +msgstr "" +"Újra kell indítania a linphone-t, hogy az új nyelv kiválasztása érvényre " +"jusson. " -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "Nincs" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ZRTP" @@ -398,7 +411,9 @@ msgstr "ZRTP" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "Elérhető egy újabb verzió a következőn: %s.\nSzeretné, hogy a letöltéshez egy új böngésző ablak nyíljon?" +msgstr "" +"Elérhető egy újabb verzió a következőn: %s.\n" +"Szeretné, hogy a letöltéshez egy új böngésző ablak nyíljon?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -431,149 +446,156 @@ msgid_plural "Found %i contacts" msgstr[0] "" msgstr[1] "" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "Fiók létrehozása a linphone.org -on" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "Már rendelkezem linphone.org fiókkal, azt szeretném használni" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "Már rendelkezem sip fiókkal, azt szeretném használni" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "Felhasználónév*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "Jelszó*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "Tartomány" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "Proxy" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "Adja meg linphone.org felhasználónevét" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Felhasználónév:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Jelszó:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) Mező kitöltése szükséges" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "Felhasználónév: (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "Jelszó: (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "E-mail: (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "Jelszó megerősítése: (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "Kérjük, érvényesítse fiókját az általunk elektronikus levélben küldött hivatkozásra kattintva.\nAzután térjen vissza ide és kattintson a Következő gombra." +msgstr "" +"Kérjük, érvényesítse fiókját az általunk elektronikus levélben küldött " +"hivatkozásra kattintva.\n" +"Azután térjen vissza ide és kattintson a Következő gombra." -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "Hiba, a fiók nincs érvényesítve. Valaki már használja ezt a felhasználónevet vagy a kiszolgáló nem elérhető.\nKérjük, lépjen vissza és próbálja újra." +msgstr "" +"Hiba, a fiók nincs érvényesítve. Valaki már használja ezt a felhasználónevet " +"vagy a kiszolgáló nem elérhető.\n" +"Kérjük, lépjen vissza és próbálja újra." -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "Köszönjük! Az Ön fiókját beállítottuk és használatra kész." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "A fiók beállítása varázsló üdvözli Önt" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Fiók beállítása varázsló" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "Az Ön fiókjának beállítása (1/1 lépés)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "Adja meg sip felhasználónevét (1/2 lépés)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "Adja meg a fiókinformációt (1/2 lépés)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "Érvényesítés (2/2 lépés)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "Hiba" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Befejezés" @@ -644,7 +666,9 @@ msgstr "közvetlen vagy kiszolgálón keresztül" msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "letöltés: %f\nfeltöltés: %f (kbit/mp)" +msgstr "" +"letöltés: %f\n" +"feltöltés: %f (kbit/mp)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format @@ -656,115 +680,118 @@ msgstr "" msgid "%.3f seconds" msgstr "%.3f másodperc" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "Befejezés" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "Hívás folyamatban..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "Beérkező hívás" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "jó" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "közepes" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "gyenge" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "nagyon gyenge" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "rossz" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "nem elérhető" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "SRTP-vel titkosítva" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "ZRTP-vel titkosítva - [hitelesítési jel: %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "Beállítás ellenőrizetlenként" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "Beállítás ellenőrzöttként" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "Konferencián" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "vonalban" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "Várakoztatott hívás" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "Hívás vége." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "Átvitel folyamatban" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "Átvitel befejezve." -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "Az átvitel sikertelen." -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "Visszatérés" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "Várakoztatás" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" -msgstr "Felvétel a következőbe\n%s %s" +msgstr "" +"Felvétel a következőbe\n" +"%s %s" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(Várakoztatva)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "Kérem, adja meg a bejelentkezési információt %s -hoz" @@ -861,7 +888,7 @@ msgstr "" msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "" @@ -878,165 +905,97 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "Hívott neve" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "Küld" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "Konferencia vége" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "Beszélgetés felvétele hangfájlba" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "Videó" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "Elnémítás" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "Átvitel" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "vonalban" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "Időtartam" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "Hívásminőség" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "Minden felhasználó" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "Elérhető" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "Fiber csatorna" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "Alapértelmezett" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "Törlés" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_Beállítások" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "Videó indítása mindig" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "Saját nézet" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "_Segítség" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "Hibakeresési ablak mutatása" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_Honlap" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "Frissítések keresése" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "Fiók varázsló" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "Adja meg a SIP címet vagy a telefonszámot:" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "Új hívás kezdeményezése" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "Partnerek" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Keresés" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "Partnerek hozzáadása könyvtárból" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "Partner hozzáadása" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "Legutóbbi hívások" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "Jelenlegi identitásom:" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "Felhasználónév" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "Jelszó" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "Internet kapcsolat:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "Jelentkeztessen be automatikusan" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "Felhasználó azonosító" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "Bejelentkezési információ" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "" @@ -1047,7 +1006,9 @@ msgstr "" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "Internetes videó telefon, mely a szabványos SIP (rfc3261) protokolt használja." +msgstr "" +"Internetes videó telefon, mely a szabványos SIP (rfc3261) protokolt " +"használja." #: ../gtk/about.ui.h:5 msgid "" @@ -1097,6 +1058,10 @@ msgstr "Linphone - Hitelesítés szükséges" msgid "Please enter the domain password" msgstr "Kérem adja meg a tartomány jelszavát" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "Felhasználó azonosító" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "Híváselőzmények" @@ -1377,7 +1342,9 @@ msgstr "Alkalmazkodó mérték-szabályozás engedélyezése" msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." -msgstr "Az alkalmazkodó mérték-szabályozás egy módszer, mely erőteljesen próbálja megállapítani a rendelkezésre álló sávszélességet hívás alatt." +msgstr "" +"Az alkalmazkodó mérték-szabályozás egy módszer, mely erőteljesen próbálja " +"megállapítani a rendelkezésre álló sávszélességet hívás alatt." #: ../gtk/parameters.ui.h:53 msgid "Bandwidth control" @@ -1639,6 +1606,14 @@ msgstr "Port" msgid "Configure tunnel" msgstr "Alagút beállítása" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "Felhasználónév" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "Jelszó" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "http proxy beállítása (nem kötelező)" @@ -1738,8 +1713,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1750,60 +1728,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "Küld" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "Hívott neve" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "Konferencia vége" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "Beszélgetés felvétele hangfájlba" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "Videó" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "Elnémítás" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "Átvitel" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "vonalban" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "Időtartam" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "Hívásminőség" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "Internet kapcsolat:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "Jelentkeztessen be automatikusan" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "Bejelentkezési információ" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Kész" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Telefonszám-cél keresése..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "Nem sikkerült értelmezni a számot." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "Kapcsolódás" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "Nem sikerült hívni" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Elnézést, elértük a egyidejű hívások maximális számát" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "kapcsolatba lépett veled." -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "és automatikus választ kért." -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "A hívási jellemzők módosítása..." -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Kapcsolódva." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "Hívás megszakítva" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "Nem sikerült várakoztatni a hívást" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "Jelenlegi hívás várakoztatásának aktiválása..." @@ -1867,23 +1897,41 @@ msgstr "" msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "Az Ön által megadott SIP proxy cím érvénytelen. \"sip:\"-tal kell kezdődnie, ezt egy hosztnév követi." +msgstr "" +"Az Ön által megadott SIP proxy cím érvénytelen. \"sip:\"-tal kell kezdődnie, " +"ezt egy hosztnév követi." -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "Az Ön által megadott SIP identitás érvénytelen.\nÍgy kéne kinéznie: sip:felhasznalonev@proxytartomany, például sip:aladar@pelda.hu" +msgstr "" +"Az Ön által megadott SIP identitás érvénytelen.\n" +"Így kéne kinéznie: sip:felhasznalonev@proxytartomany, például sip:" +"aladar@pelda.hu" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Telefonszám-cél keresése..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "Nem sikkerült értelmezni a számot." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "Nem sikerült belépni ezzel: %s" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "Távoli csengés." @@ -1917,9 +1965,10 @@ msgstr "%s válaszolt a hívásra." #: ../coreapi/callbacks.c:598 msgid "Incompatible, check codecs or security settings..." -msgstr "Nem kompatibilis, ellenőrizze a kódek- vagy a biztonsági beállításokat..." +msgstr "" +"Nem kompatibilis, ellenőrizze a kódek- vagy a biztonsági beállításokat..." -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "Nem kompatibilis médiajellemzők." @@ -1937,59 +1986,59 @@ msgstr "Megállítva a másik fél által." msgid "Call is updated by remote." msgstr "A hívás távolról frissítve." -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "A hívás befejezve." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "A felhasználó foglalt." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "A felhasználó ideiglenesen nem elérhető" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "A felhasználó nem akarja, hogy zavarják." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Hívás elutasítva" -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "Átirányítva" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "Nem sikerült a hívás." -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "A regisztáció a %s -n sikerült." -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "A kiregisztrálás kész a következőn: %s ." -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "időtúllépés után nincs válasz" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "A regisztáció a %s -n nem sikerült: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -1999,11 +2048,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "Hitelesítési jel: %s" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/it.po b/po/it.po index ac1690617..12b147d6d 100644 --- a/po/it.po +++ b/po/it.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Fabrizio Carrai, 2015 msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" -"PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Italian (http://www.transifex.com/p/linphone-gtk/language/it/)\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" +"PO-Revision-Date: 2015-08-03 18:31+0000\n" +"Last-Translator: Fabrizio Carrai\n" +"Language-Team: Italian (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/it/)\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -68,14 +69,16 @@ msgstr[1] "%i secondi" msgid "" "%s\tQuality: %s\n" "%s\t%s\t" -msgstr "%s\tQualità: %s\n%s\t%s\t" +msgstr "" +"%s\tQualità: %s\n" +"%s\t%s\t" #: ../gtk/calllogs.c:342 #, c-format msgid "%s\t%s" msgstr "%s\t%s" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "Conferenza" @@ -88,9 +91,15 @@ msgstr "Me" msgid "Couldn't find pixmap file: %s" msgstr "Impossibile trovare il file pixmap %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." -msgstr "alcune informazioni di debug verranno registrate sullo stdout durante l'esecuzione" +msgstr "" +"alcune informazioni di debug verranno registrate sullo stdout durante " +"l'esecuzione" #: ../gtk/main.c:139 msgid "display version and exit." @@ -114,9 +123,11 @@ msgstr "indirizzo da chiamare adesso" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "Specificare una directory di lavoro (dovrebbe essere quella di installazione, es: c:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Specificare una directory di lavoro (dovrebbe essere quella di " +"installazione, es: c:\\Program Files\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -130,88 +141,97 @@ msgstr "Avvia l'assistente audio" msgid "Run self test and exit 0 if succeed" msgstr "Esegui il self test e esci con 0 in caso di successo" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" +"%s vorrebbe aggiungerti alla sua lista dei contatti.\n" +"Vuoi aggiungerlo/a ai tuoi contatti e pemettergli di conoscere la tua " +"presenza?\n" +"Se rispondi NO questa persona verrà temporaneamente bloccata." -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "Digitare la password per l'utente %s\nnel dominio %s:" +msgstr "" +"Digitare la password per l'utente %s\n" +"nel dominio %s:" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "Errore durante la chiamata" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "Chiamata terminata" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Chiamata in arrivo" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "Risposta" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "Rifiuta" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "Chiamata in pausa" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "da %s" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s chiede di avviare il video. Accetti ?" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "Collegamento al sito web" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "Un videotelefono su internet" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (Default)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "Siamo trasferiti verso %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "Non è stata trovata nessuna scheda audio.\nNon sarà possibile effettuare o ricevere chiamate in voce." +msgstr "" +"Non è stata trovata nessuna scheda audio.\n" +"Non sarà possibile effettuare o ricevere chiamate in voce." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "Un videotelefono SIP free" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "Salve\n" @@ -289,108 +309,108 @@ msgstr "Attivato" msgid "Disabled" msgstr "Disattivato" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Account" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "Inglese" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Francese" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Svedese" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Spagnolo" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Portoghese brasiliano" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Polacco" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Tedesco" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Russo" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "Giapponese" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Olandese" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Ungherese" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Ceco" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "Cinese" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "Cinese tradizionale" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "Norvegese" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "Ebraico" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "Serbo" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "Arabo" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "Turco" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Riavviare il software per utilizzare la nuova lingua selezionata" -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "Nessuno" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ZRTP" @@ -399,7 +419,9 @@ msgstr "ZRTP" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "Una versione più recente è disponibile su %s.\nVuoi aprire un browser per eseguire il download ?" +msgstr "" +"Una versione più recente è disponibile su %s.\n" +"Vuoi aprire un browser per eseguire il download ?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -432,149 +454,158 @@ msgid_plural "Found %i contacts" msgstr[0] "Trovato %i contatto" msgstr[1] "Trovati %i contatti" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." -msgstr "Benvenuto!\nL'assistente vi aiuterà ad usare un indirizzo SIP per le vostre chiamate." +msgstr "" +"Benvenuto!\n" +"L'assistente vi aiuterà ad usare un indirizzo SIP per le vostre chiamate." -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "Creare un account su linphone.org" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "Ho già un account su linphone.org che voglio usare." -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "Ho già un account SIP e voglio usarlo" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "Voglio specificare un URI per la configurazione remota" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "Inserire i dati del vostro account" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "Nome utente*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "Password*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "Dominio*" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "Proxy" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "Immettere il vostro nome utente su linphone.org" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Nome utente:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Password:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) Campi obbligatori" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "Nome utente: (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "Password: (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "Email: (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "Confermare la password: (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "Mantenetemi aggiornato sugli aggiornamenti di linphone" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "Il vostro account è stato creato, attendere." -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "Attivate il vostro account cin il link che vi è appena stato inviato per posta elettronica.\nQuindi tornare qui e premere il tasto \"Avanti\"." +msgstr "" +"Attivate il vostro account cin il link che vi è appena stato inviato per " +"posta elettronica.\n" +"Quindi tornare qui e premere il tasto \"Avanti\"." -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "Verifica della validazione dell'account, attendere." -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "Errore, account non valido, nome utente già in uso o server non raggiungibile.\nTornare indietro e riprovare." +msgstr "" +"Errore, account non valido, nome utente già in uso o server non " +"raggiungibile.\n" +"Tornare indietro e riprovare." -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "Grazie. Il tuo account è configurato e pronto all'uso" -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "Assistente per la configurazione di un account SIP" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "Benvenuto nel configuratore di account" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Configuratore di account" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "Configurare il tuo account (passo 1/1)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "Introdurre il vostro nome utente SIP (passo 1/1)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "Introdurre le informazioni dell'account (passo 1/2)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "Creazione dell'account in corso" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "Validazione (passo 2/2)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "Controllo della validazione dell'account in corso" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "Errore" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Terminando" @@ -645,7 +676,9 @@ msgstr "Diretto o attraverso un server" msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "download: %f\nupload: %f (kbit/s)" +msgstr "" +"download: %f\n" +"upload: %f (kbit/s)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format @@ -657,115 +690,118 @@ msgstr "%ix%i @ %f fps" msgid "%.3f seconds" msgstr "%.3f secondi" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "Riagganciare" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "Chiamando..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "Chiamata in ingresso" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "bene" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "media" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "ridotto" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "molto poco" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "troppo brutto" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "non disponibile" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "Trasmissione sicura con SRTP" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "Trasmissione sicura con DTLS" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Trasmissione sicura con ZRTP - [auth token: %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "Marcato con non verificato" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "Marcato come verificato" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "In conferenza" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "Chiamata in corso" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "Chiamata sospesa" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "Chiamata terminata." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "Trasferimento in corso" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "Trasferimento completato." -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "Trasferimento fallito." -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "Riprendere" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "Pausa" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" -msgstr "Registrare in\n%s %s" +msgstr "" +"Registrare in\n" +"%s %s" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(Sospeso)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "Prego inserire le proprie credenziali di accesso per %s" @@ -812,7 +848,9 @@ msgstr "Non è possibile eseguire il controllo dell'audio di sistema" msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" -msgstr "Benvenuto!\nL'assistente ti aiuterà a configurare i settaggi audio di Linphone" +msgstr "" +"Benvenuto!\n" +"L'assistente ti aiuterà a configurare i settaggi audio di Linphone" #: ../gtk/audio_assistant.c:335 msgid "Capture device" @@ -862,7 +900,7 @@ msgstr "Ora avviamo Linphone" msgid "Audio Assistant" msgstr "Assistente Audio" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "Assistente Audio" @@ -879,165 +917,97 @@ msgid "Record and Play" msgstr "Registra e Riproduci" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "Nome del chiamato" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "Invia" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "Fine della conferenza" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "Registra questa chiamata su un file audio" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "Video" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "Silenzia" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "Trasferimento" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "In chiamata" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "Durata" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "Giudizio della qualità della chiamata" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "Tutti gli utenti" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "Utenti in linea" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "Fibra ottica" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "Default" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "Cancellare" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_Options" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "Imposta l' URI di configurazione" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "Avvia sempre il video" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "Self-view abilitato" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "_Help" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "Mostra la finestra di debug" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_Homepage" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "Check _Updates" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "Assistente per l'account" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "Indirizzo sip o numero." -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "Inizia una nuova chiamata" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "Contatti" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Ricerca" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "Aggiungi contatti dalla directory" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "Aggiungi un contatto" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "Chiamate recenti" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "Identità corrente" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "Username" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "Password" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "Connessione Internet:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "Login Automatico" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "Identificativo utente" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "Credenziali di accesso" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "Benvenuto!" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "Su Linphone" @@ -1064,7 +1034,20 @@ msgid "" "cs: Petr Pisar \n" "hu: anonymous\n" "he: Eli Zaretskii \n" -msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni \nit: Fabrizio Carrai\nde: Jean-Jacques Sarton \nsv: Daniel Nylander \nes: Jesus Benitez \nja: YAMAGUCHI YOSHIYA \npt_BR: Rafael Caesar Lenzi \npl: Robert Nasiadek \ncs: Petr Pisar \nhu: anonymous\nhe: Eli Zaretskii \n" +msgstr "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"it: Fabrizio Carrai\n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1098,6 +1081,10 @@ msgstr "Linphone - E' richiesta l'autenticazione" msgid "Please enter the domain password" msgstr "Prego inserire la password di dominio" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "Identificativo utente" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "Cronologia" @@ -1240,7 +1227,8 @@ msgstr "Preferenze" #: ../gtk/parameters.ui.h:18 msgid "This section defines your SIP address when not using a SIP account" -msgstr "questa sezione definisce il tuo indirizzo SIP se non hai account attivi" +msgstr "" +"questa sezione definisce il tuo indirizzo SIP se non hai account attivi" #: ../gtk/parameters.ui.h:19 msgid "Your display name (eg: John Doe):" @@ -1378,7 +1366,9 @@ msgstr "Abilita il controllo adattivo del rate" msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." -msgstr "Il controllo adattivo del rate è una tecnica per la stima dinamica della banda disponibile durante una chiamata" +msgstr "" +"Il controllo adattivo del rate è una tecnica per la stima dinamica della " +"banda disponibile durante una chiamata" #: ../gtk/parameters.ui.h:53 msgid "Bandwidth control" @@ -1594,7 +1584,7 @@ msgstr "Banda IP impiegata per l'audio" #: ../gtk/call_statistics.ui.h:5 msgid "Audio Media connectivity" -msgstr "" +msgstr "Supporto audio" #: ../gtk/call_statistics.ui.h:6 msgid "Video IP bandwidth usage" @@ -1602,7 +1592,7 @@ msgstr "Banda IP impiegata per il video" #: ../gtk/call_statistics.ui.h:7 msgid "Video Media connectivity" -msgstr "" +msgstr "Supporto video" #: ../gtk/call_statistics.ui.h:8 msgid "Round trip time" @@ -1640,6 +1630,14 @@ msgstr "Porta" msgid "Configure tunnel" msgstr "Configurazione del tunnel" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "Username" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "Password" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "Configurazione del proxy http (opzionale)" @@ -1662,11 +1660,11 @@ msgstr "Connessione" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" -msgstr "" +msgstr "Bind DN" #: ../gtk/ldap.ui.h:10 msgid "Authname" -msgstr "" +msgstr "Authname" #: ../gtk/ldap.ui.h:11 msgid "Realm" @@ -1711,7 +1709,7 @@ msgstr "Massimo numero di risultati:" #: ../gtk/ldap.ui.h:22 msgid "Follow Aliases" -msgstr "" +msgstr "Segui gli Aliases" #: ../gtk/ldap.ui.h:23 msgid "Miscellaneous" @@ -1723,88 +1721,148 @@ msgstr "ANONYMOUS" #: ../gtk/ldap.ui.h:25 msgid "SIMPLE" -msgstr "" +msgstr "SEMPLICE" #: ../gtk/ldap.ui.h:26 msgid "DIGEST-MD5" -msgstr "" +msgstr "DIGEST-MD5" #: ../gtk/ldap.ui.h:27 msgid "NTLM" -msgstr "" +msgstr "NTLM" #: ../gtk/config-uri.ui.h:1 msgid "Specifying a remote configuration URI" -msgstr "" +msgstr "Specificare un URI per la configurazione remota" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" +"Questo modulo permette di impostare un indirizzo http o https da cui " +"prelevare la configurazione all'avvio.\n" +"Di seguito inserire o modificare l' URI della configurazione. Dopo aver " +"selezionato OK Linphone verrà automaticamente riavvato per leggere ed usare " +"la nuova configurazione." #: ../gtk/provisioning-fetch.ui.h:1 msgid "Configuring..." -msgstr "" +msgstr "Configurando..." #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." +msgstr "Caricamento della configurazione dal server, attendere..." + +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "Invia" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "Nome del chiamato" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "Fine della conferenza" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" msgstr "" +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "Registra questa chiamata su un file audio" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "Video" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "Silenzia" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "Trasferimento" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "In chiamata" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "Durata" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "Giudizio della qualità della chiamata" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "Connessione Internet:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "Login Automatico" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "Credenziali di accesso" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "Benvenuto!" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Pronto" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" -msgstr "" - -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Ricerca numero destinazione..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "Impossibile risolvere il numero." +msgstr "Configurando" #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "In connessione" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "Impossibile chiamare" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Spiacenti, è stato raggiunto il massimo numero di chiamate simultanee" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "ti sta contattando" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "e ha richiesto la risposta automatica" -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "Modificando i parametri di chiamata..." -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Connessione" -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "Chiamata annullata" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "Impossibile sospendere la chiamata" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "Sospensione della chiamata in corso..." @@ -1814,7 +1872,7 @@ msgstr "Ricerca Stun in progresso ..." #: ../coreapi/misc.c:617 msgid "ICE local candidates gathering in progress..." -msgstr "" +msgstr "Raccolta dei candidati ICE locali in corso..." #: ../coreapi/friend.c:33 msgid "Online" @@ -1862,40 +1920,57 @@ msgstr "Pendente" #: ../coreapi/friend.c:66 msgid "Vacation" -msgstr "" +msgstr "Assente" #: ../coreapi/friend.c:68 msgid "Unknown status" msgstr "Stato sconosciuto" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "L'indirizzo sip proxy utilizzato è invalido, deve iniziare con \"sip:\" seguito dall' hostaname." +msgstr "" +"L'indirizzo sip proxy utilizzato è invalido, deve iniziare con \"sip:\" " +"seguito dall' hostaname." -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "L'identità sip utilizza è invalida.\nDovrebbre essere sip:username@proxydomain, esempio: sip:alice@example.net" +msgstr "" +"L'identità sip utilizza è invalida.\n" +"Dovrebbre essere sip:username@proxydomain, esempio: sip:alice@example.net" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Ricerca numero destinazione..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "Impossibile risolvere il numero." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "impossibile login come %s" +#: ../coreapi/proxy.c:1494 +#, fuzzy, c-format +msgid "Refreshing on %s..." +msgstr "prelevando da %s" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." -msgstr "" +msgstr "Il chiamato sta squillando." #: ../coreapi/callbacks.c:454 msgid "Remote ringing..." -msgstr "" +msgstr "Il chiamato sta squillando..." #: ../coreapi/callbacks.c:475 msgid "Early media." -msgstr "" +msgstr "Early media." #: ../coreapi/callbacks.c:548 #, c-format @@ -1905,127 +1980,127 @@ msgstr "La chiamata con %s è stata sospesa." #: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s - on hold." -msgstr "" +msgstr "Chiamata con %s - in attesa." #: ../coreapi/callbacks.c:571 msgid "Call resumed." -msgstr "" +msgstr "Prosecuzione della chiamata." #: ../coreapi/callbacks.c:575 #, c-format msgid "Call answered by %s." -msgstr "" +msgstr "Risposta da %s." #: ../coreapi/callbacks.c:598 msgid "Incompatible, check codecs or security settings..." -msgstr "" +msgstr "Incompatibile, controllare i codecs o i parametri della sicurezza..." -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." -msgstr "" +msgstr "Parametri di comunicazione incompatibili." #: ../coreapi/callbacks.c:633 msgid "We have been resumed." -msgstr "" +msgstr "La comunicazione è stata ripresa." #. we are being paused #: ../coreapi/callbacks.c:642 msgid "We are paused by other party." -msgstr "" +msgstr "L'interlocutore ci ha messi in attesa." #. reINVITE and in-dialogs UPDATE go here #: ../coreapi/callbacks.c:680 msgid "Call is updated by remote." -msgstr "" +msgstr "Aggiornamento della chiamata dalla parte remota." -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "Chiamata terminata." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Utente occupato" -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "Utente non disponibile" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "L'utente non vuole essere disturbato" -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Chiamata rifiutata" -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." -msgstr "" +msgstr "Richiesta scaduta" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" -msgstr "" +msgstr "Trasferito" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." -msgstr "" +msgstr "Chiamata non riuscita." -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "Registrazione su %s attiva" -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "Unregistrazione su %s" -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "timeout no risposta" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrazione su %s fallita: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" -msgstr "" +msgstr "Servizio non disponibile, nuovo tentativo in corso" #. if encryption is DTLS, no status to be displayed #: ../coreapi/linphonecall.c:181 #, c-format msgid "Authentication token is %s" -msgstr "" +msgstr "Il codice di autenticazione è %s" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." -msgstr "" +msgstr "I parametri della chiamata sono stati modificati con successo." -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i chiamata persa." +msgstr[1] "%i chiamate perse." #: ../coreapi/call_log.c:209 msgid "aborted" -msgstr "" +msgstr "annulata" #: ../coreapi/call_log.c:212 msgid "completed" -msgstr "" +msgstr "completata" #: ../coreapi/call_log.c:215 msgid "missed" -msgstr "" +msgstr "persa" #: ../coreapi/call_log.c:218 msgid "unknown" -msgstr "" +msgstr "sconosciuto" #: ../coreapi/call_log.c:220 #, c-format @@ -2036,12 +2111,17 @@ msgid "" "Status: %s\n" "Duration: %i mn %i sec\n" msgstr "" +"%s a %s\n" +"Da: %s\n" +"A: %s\n" +"Stato: %s\n" +"Durata: %i min %i sec\n" #: ../coreapi/call_log.c:221 msgid "Outgoing call" -msgstr "" +msgstr "chiamata in uscita" #: ../gtk/videowindow.c:66 #, c-format msgid "Cannot play %s." -msgstr "" +msgstr "Impossibile riprodurre %s." diff --git a/po/ja.po b/po/ja.po index 5bf3b38a4..c0d7b5838 100644 --- a/po/ja.po +++ b/po/ja.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Alexander, 2014 # Alexander, 2014-2015 @@ -9,14 +9,16 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Japanese (http://www.transifex.com/p/linphone-gtk/language/ja/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Japanese (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/ja/)\n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -67,14 +69,16 @@ msgstr[0] "%i 秒" msgid "" "%s\tQuality: %s\n" "%s\t%s\t" -msgstr "%s品質: %s\n%s⇥%s⇥" +msgstr "" +"%s品質: %s\n" +"%s⇥%s⇥" #: ../gtk/calllogs.c:342 #, c-format msgid "%s\t%s" msgstr "%s⇥%s" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "会議" @@ -87,6 +91,10 @@ msgstr "自分" msgid "Couldn't find pixmap file: %s" msgstr "pixmapファイルが見つかりません %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "実行中にいくつかのデバッグ情報をstdoutに送信します。" @@ -113,9 +121,11 @@ msgstr "今すぐに呼び出す" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "作業ディレクトリをSpecifiy (インストールした時のベースである必要があります。例:c:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"作業ディレクトリをSpecifiy (インストールした時のベースである必要があります。" +"例:c:\\Program Files\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -129,88 +139,89 @@ msgstr "オーディオアシスタントを実行" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "呼出エラー" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "呼出終了" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "着信" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "応答" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "拒否" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "呼び出しの一時停止" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "%s" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "ウェブサイトリンク" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (デフォルト)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "%s に転送しました" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "無料 SIP ビデオ-電話" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -288,108 +299,108 @@ msgstr "使用する" msgid "Disabled" msgstr "使用しない" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "アカウント" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "English" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Français" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Svenska" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Español" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Português do Brasil" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Polski" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Deutsch" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Pусский" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "日本語" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Nederlands" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Magyar" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "čeština" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "简体中文" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "繁体中文" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "Norsk" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "עברית" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "Cрпски" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "言語の選択を有効にするには、 Linphoneを再起動する必要があります。" -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "なし" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ZRTP" @@ -398,7 +409,9 @@ msgstr "ZRTP" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "%s よりも新しいバージョンが利用可能です。\nダウンロードするために、ブラウザを開きますか?" +msgstr "" +"%s よりも新しいバージョンが利用可能です。\n" +"ダウンロードするために、ブラウザを開きますか?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -430,149 +443,156 @@ msgid "Found %i contact" msgid_plural "Found %i contacts" msgstr[0] "%i 件発見" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." -msgstr "ようこそ!\nあなたの通話のためのSIPアカウント設定をお手伝いします。" +msgstr "" +"ようこそ!\n" +"あなたの通話のためのSIPアカウント設定をお手伝いします。" -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "linphone.orgのアカウントを作成" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "linphone.orgのアカウントを持っているのでそれを使います" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "SIPアカウントを持っているのでそれを使います" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "ユーザー名*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "パスワード*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "ドメイン*" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "プロキシ*" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "linphone.orgで取得したユーザー名を入力" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "ユーザー名:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "パスワード:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) 必須" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "ユーザー名: (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "パスワード: (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "メールアドレス: (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "パスワードを再入力: (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "アップデートでLinphoneを常に最新にする" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "送信されたメールの本文内にあるリンクをクリックしてアカウントを有効にしてください。\nその後こちらへ戻って「次へ」を押してください。" +msgstr "" +"送信されたメールの本文内にあるリンクをクリックしてアカウントを有効にしてくだ" +"さい。\n" +"その後こちらへ戻って「次へ」を押してください。" -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." -msgstr "ありがとう。あなたのアカウントは無事に設定され、使用する準備ができました。" +msgstr "" +"ありがとう。あなたのアカウントは無事に設定され、使用する準備ができました。" -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "SIPアカウント設定アシスタント" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "アカウント設定アシスタントへようこそ" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "アカウント設定アシスタント" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "アカウントを設定します (1/1)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "SIPのユーザー名を入力してください (1/1)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "アカウント情報を入力してください (1/2)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "検証します (2/2)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "エラー" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "終了" @@ -643,7 +663,9 @@ msgstr "" msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "ダウンロード: %f\nアップロード: %f (kbit/s)" +msgstr "" +"ダウンロード: %f\n" +"アップロード: %f (kbit/s)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format @@ -655,115 +677,116 @@ msgstr "%ix%i @ %f fps" msgid "%.3f seconds" msgstr "%.3f 秒" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "かけています…" -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "着信" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "良い" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "アベレージ" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "悪い" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "非常にプアな" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "非常にバッドな" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "利用できません" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "SRTPのセキュリティ" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "ZRTP によるセキュリティ - [auth token: %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "セット未検証" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "セット検証済" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "会議で" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "呼び出し中" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "呼び出し停止" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "呼び出し終了" -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "進行中の転送" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "転送完了。" -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "転送失敗。" -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "レジューム" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "一時停止" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(停止中)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "" @@ -860,7 +883,7 @@ msgstr "Linphoneをはじめる" msgid "Audio Assistant" msgstr "音声アシスタント" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "音声アシスタント" @@ -877,165 +900,97 @@ msgid "Record and Play" msgstr "録音して再生" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "送信" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "会議を終了する" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "この通話をファイルに録音する" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "ビデオ" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "消音" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "転送" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "着信" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "期限" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "すべての利用者" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "オンラインの利用者" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "デフォルト" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "削除" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_オプション" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "いつでもビデオをスタートする" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "セルフビューを有効にする" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "_ヘルプ" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "デバッグウインドウを見る" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_ホームページ" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "チェック _アップデート" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "アカウントのアシスタント" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "SIPアドレスもしくは電話番号:" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "検索" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "連絡相手に追加する" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "ユーザー名" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "パスワード" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "インターネット接続:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "自動的にログインする" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "ユーザーID" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "ログイン情報" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "Linphoneについて" @@ -1046,7 +1001,9 @@ msgstr "(C) Belledonne Communications, 2010\n" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "インターネットによる動画送信には標準的なSIPプロトコル (rfc3261) を使用しています。" +msgstr "" +"インターネットによる動画送信には標準的なSIPプロトコル (rfc3261) を使用してい" +"ます。" #: ../gtk/about.ui.h:5 msgid "" @@ -1062,7 +1019,19 @@ msgid "" "cs: Petr Pisar \n" "hu: anonymous\n" "he: Eli Zaretskii \n" -msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni \nde: Jean-Jacques Sarton \nsv: Daniel Nylander \nes: Jesus Benitez \nja: YAMAGUCHI YOSHIYA \npt_BR: Rafael Caesar Lenzi \npl: Robert Nasiadek \ncs: Petr Pisar \nhu: anonymous\nhe: Eli Zaretskii \n" +msgstr "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1096,6 +1065,10 @@ msgstr "" msgid "Please enter the domain password" msgstr "" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "ユーザーID" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "呼出履歴" @@ -1638,6 +1611,14 @@ msgstr "ポート" msgid "Configure tunnel" msgstr "" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "ユーザー名" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "パスワード" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "" @@ -1737,8 +1718,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1749,60 +1733,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "送信" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "会議を終了する" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "この通話をファイルに録音する" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "ビデオ" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "消音" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "転送" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "着信" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "期限" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "インターネット接続:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "自動的にログインする" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "ログイン情報" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "準備" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "" - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "" - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "と自動応答を尋ねる" -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "コールパラメーターの変更..." -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "接続しました。" -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "呼び出しを打ち切る" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "呼び出しを一時停止できませんでした" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "現在の通話を一時停止..." @@ -1866,23 +1902,36 @@ msgstr "休暇中" msgid "Unknown status" msgstr "不明なステータス" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "" + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "" + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "" @@ -1918,7 +1967,7 @@ msgstr "" msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "" @@ -1936,59 +1985,59 @@ msgstr "" msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "呼び出し終了。" -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "相手はビジーです。" -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "相手は、今出られません。" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "相手は手が離せないようです。" -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "通話は拒否されました。" -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "リクエストは時間切れです。" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:1007 -#, c-format -msgid "Registration on %s successful." -msgstr "" - #: ../coreapi/callbacks.c:1008 #, c-format +msgid "Registration on %s successful." +msgstr "" + +#: ../coreapi/callbacks.c:1009 +#, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -1998,11 +2047,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/nb_NO.po b/po/nb_NO.po index 536cee0ae..638f894ed 100644 --- a/po/nb_NO.po +++ b/po/nb_NO.po @@ -1,21 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Øyvind Sæther , 2011 msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/p/linphone-gtk/language/nb_NO/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/" +"belledonne-communications/linphone-gtk/language/nb_NO/)\n" +"Language: nb_NO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: nb_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -75,7 +77,7 @@ msgstr "" msgid "%s\t%s" msgstr "" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "" @@ -88,6 +90,10 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "Fant ikke pixmap fli: %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "skriv logg-informasjon under kjøring" @@ -114,9 +120,11 @@ msgstr "address som skal ringes nå" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "Spesifiser arbeidsmappe (bør være base for installasjonen, f.eks: c:\\Programfiler\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Spesifiser arbeidsmappe (bør være base for installasjonen, f.eks: c:" +"\\Programfiler\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -130,88 +138,91 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "Samtale avsluttet" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Innkommende samtale" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "Svarer" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "Avvis" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "Peker til nettsted" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (Standard)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "Vi er overført til %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "Klarte ikke å finne noe lydkort på denne datamaskinen.\nDu vil ikke kunne sende eller motta lydsamtaler." +msgstr "" +"Klarte ikke å finne noe lydkort på denne datamaskinen.\n" +"Du vil ikke kunne sende eller motta lydsamtaler." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "En gratis SIP video-telefon" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -289,108 +300,108 @@ msgstr "På" msgid "Disabled" msgstr "Av" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Konto" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "Engelsk" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Fransk" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Svensk" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Italisensk" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Spansk" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Portugisisk" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Polsk" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Tysk" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Russisk" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "Japansk" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Nederlandsk" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Ungarsk" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Tjekkisk" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "Kinesisk" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Du må restarte linphone for at det nye språkvalget skal iverksettes." -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "" @@ -399,7 +410,9 @@ msgstr "" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "En nyere utgave er tilgjengelig fra %s.\nVil du åpne en nettleser og laste den ned ?" +msgstr "" +"En nyere utgave er tilgjengelig fra %s.\n" +"Vil du åpne en nettleser og laste den ned ?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -432,149 +445,150 @@ msgid_plural "Found %i contacts" msgstr[0] "Fant kontakt %i" msgstr[1] "Hittat kontakt %i" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Brukernavn:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Passord:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "Takk. Ditt konto er nå satt opp og klart til bruk." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "Velkommen til brukerkontoveiviseren" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Brukerkontoveiviser" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -657,115 +671,117 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "Ringer..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +#, fuzzy +msgid "00:00:00" msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "Innkommende samtale" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "I samtale med" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "Pauset samtale" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "Samtale avsluttet." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "" -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "Fortsett" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "Pause" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "Skriv inn påloggingsinformasjon for %s:" @@ -862,7 +878,7 @@ msgstr "" msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "" @@ -879,165 +895,97 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "Send" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "Overfører" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "I samtale" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "Varighet" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "Alle brukere" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "Tilkoblede brukere" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "Fiber Kanal" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "Standard" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_Alternativer" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "Vis video av deg selv" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "_Hjelp" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "Vis avlusningsvindu" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "H_jemmeside" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "Sjekk _Oppdateringer" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "Sip adresse eller telefonnummer:" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "Start en ny samtale" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "Kontakter" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Søk" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "Legg til kontakter fra katalogen" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "Legg til kontakt" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "Min nåværende identitet:" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "Brukernavn" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "Passord" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "Internet forbindelse:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "Logg meg på automatisk" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "BrukerID" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "Innlogginsinformasjon" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "" @@ -1048,7 +996,9 @@ msgstr "" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "En Internet Videotelefon som bruker den standardiserte SIP-protokollen (rfc3261)." +msgstr "" +"En Internet Videotelefon som bruker den standardiserte SIP-protokollen " +"(rfc3261)." #: ../gtk/about.ui.h:5 msgid "" @@ -1098,6 +1048,10 @@ msgstr "Linphone - Autorisering kreves" msgid "Please enter the domain password" msgstr "Skriv inn passordet for domenet" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "BrukerID" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "Samtalehistorikk" @@ -1640,6 +1594,14 @@ msgstr "" msgid "Configure tunnel" msgstr "" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "Brukernavn" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "Passord" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "" @@ -1739,8 +1701,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1751,60 +1716,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "Send" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "Overfører" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "I samtale" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "Varighet" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "Internet forbindelse:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "Logg meg på automatisk" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "Innlogginsinformasjon" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Klar" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Ser etter telefonnummer for destinasjonen..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "Kan ikke tilkoble dette nummeret." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "Tilknytter" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "Kunne ikke ringe" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Beklager, du har nådd maksimalt antall samtidige samtaler" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "Kontakter deg." -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr " og ba om autosvar." -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "Endrer ringeparametre..." -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Tilkoblet" -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "Samtale avbrutt" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "Kunne ikke pause samtalen" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "Pauser nåværende samtale" @@ -1868,23 +1885,40 @@ msgstr "" msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "SIP proxy adressen du har angitt er ugyldig, den må begynne med \"sip:\" etterfult av vertsnavn." +msgstr "" +"SIP proxy adressen du har angitt er ugyldig, den må begynne med \"sip:\" " +"etterfult av vertsnavn." -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "SIP adressen du har angitt er feil. Adressen bør se ut som sip: brukernavn@domenenavn, f.eks sip:ola@eksempel.no" +msgstr "" +"SIP adressen du har angitt er feil. Adressen bør se ut som sip: " +"brukernavn@domenenavn, f.eks sip:ola@eksempel.no" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Ser etter telefonnummer for destinasjonen..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "Kan ikke tilkoble dette nummeret." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "Ikke ikke logge inn som %s" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "Ringer hos motparten." @@ -1920,7 +1954,7 @@ msgstr "Samtale besvart av %s." msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "" @@ -1938,59 +1972,59 @@ msgstr "" msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "Samtale avsluttet." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Brukeren er opptatt." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "Brukeren er midlertidig ikke tilgjengelig." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "Brukeren vil ikke bli forstyrret." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Samtale avvist." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "Omdirigert" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "Samtale feilet." -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "Registrering hos %s lykkes." -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "Avregistrering hos %s lykkes." -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "ingen svar innen angitt tid" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrering hos %s mislykkes: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -2000,11 +2034,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/nl.po b/po/nl.po index 5f549477f..647840d44 100644 --- a/po/nl.po +++ b/po/nl.po @@ -1,21 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Heimen Stoffels , 2015 msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Dutch (http://www.transifex.com/p/linphone-gtk/language/nl/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Dutch (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/nl/)\n" +"Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -68,14 +70,16 @@ msgstr[1] "%i seconden" msgid "" "%s\tQuality: %s\n" "%s\t%s\t" -msgstr "%s\tKwaliteit: %s\n%s\t%s\t" +msgstr "" +"%s\tKwaliteit: %s\n" +"%s\t%s\t" #: ../gtk/calllogs.c:342 #, c-format msgid "%s\t%s" msgstr "%s\t%s" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "Vergadering" @@ -88,9 +92,15 @@ msgstr "Ik" msgid "Couldn't find pixmap file: %s" msgstr "Het pixmap-bestand %s kon niet worden gevonden" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." -msgstr "loggen naar stdout om wat foutopsporingsinformatie te verkrijgen tijdens uitvoeren." +msgstr "" +"loggen naar stdout om wat foutopsporingsinformatie te verkrijgen tijdens " +"uitvoeren." #: ../gtk/main.c:139 msgid "display version and exit." @@ -114,9 +124,11 @@ msgstr "adres om nu naar toe te bellen" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "Specificeer een werkmap (dit moet de basis van uw installatie zijn, bijv.: C:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Specificeer een werkmap (dit moet de basis van uw installatie zijn, bijv.: C:" +"\\Program Files\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -130,88 +142,93 @@ msgstr "Doorloop de audio-instelwizard" msgid "Run self test and exit 0 if succeed" msgstr "Draai een zelftest en exit 0 wanneer succesvol" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "Vul uw wachtwoord in voor gebruikersnaam %s\nop realm %s" +msgstr "" +"Vul uw wachtwoord in voor gebruikersnaam %s\n" +"op realm %s" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "Oproepfout" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "Oproep beëindigd" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Inkomende oproep" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "Opnemen" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "Weigeren" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "Oproep gepauzeerd" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "door %s" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s stelt u voor om video in te schakelen. Wilt u dit accepteren?" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "Websitelink" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (Standaard)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "We zijn overgeschakeld naar %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "Er zijn geluidskaarten aangetroffen op deze computer.\nU zult niet in staat zijn om audio-oproepen te ontvangen of versturen." +msgstr "" +"Er zijn geluidskaarten aangetroffen op deze computer.\n" +"U zult niet in staat zijn om audio-oproepen te ontvangen of versturen." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "Een gratis SIP-videotelefoon" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -289,108 +306,109 @@ msgstr "Ingeschakeld" msgid "Disabled" msgstr "Uitgeschakeld" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Account" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "Engels" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Frans" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Zweeds" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Italiaans" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Spaans" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Braziliaans Portugees" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Pools" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Duits" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Russisch" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "Japans" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Nederlands" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Hongaars" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Tjechisch" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "Chinees" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "Traditioneel Chinees" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "Noors" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "Hebreeuws" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "Servisch" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." -msgstr "U moet linphone herstarten om de nieuw geselecteerde taal toe te passen." +msgstr "" +"U moet linphone herstarten om de nieuw geselecteerde taal toe te passen." -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "Geen" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ZRTP" @@ -399,7 +417,9 @@ msgstr "ZRTP" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "Er is een nieuwere versie beschikbaar op %s.\nWilt een webbrowser openen en deze downloaden?" +msgstr "" +"Er is een nieuwere versie beschikbaar op %s.\n" +"Wilt een webbrowser openen en deze downloaden?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -432,149 +452,159 @@ msgid_plural "Found %i contacts" msgstr[0] "%i contactpersoon gevonden" msgstr[1] "%i contactpersonen gevonden" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." -msgstr "Welkom!\nDeze instelwizard zal u begeleiden bij het gebruiken van een SIP-account voor oproepen." +msgstr "" +"Welkom!\n" +"Deze instelwizard zal u begeleiden bij het gebruiken van een SIP-account " +"voor oproepen." -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "Creëer een account op linphone.org" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "Ik heb al een linphone.org-account en wil deze graag gebruiken" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "Ik heb al een SIP-account en wil deze graag gebruiken" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "Ik wil een externe URI-configuratie opgeven" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "Gebruikersnaam*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "Wachtwoord*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "Domeinnaam*" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "Proxy" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "Vul uw linphone.org-gebruikersnaam in" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Gebruikersnaam:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Wachtwoord:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) Verplichte velden" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "Gebruikersnaam: (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "Wachtwoord: (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "E-mailadres: (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "Bevestig uw wachtwoord: (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "Houdt me op de hoogte van linphone-updates" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "Valideer uw account door te klikken op de link die we zojuist naar uw e-mailadres hebben verstuurd.\nKom dan terug naar dit venster en klik op de knop Volgende." +msgstr "" +"Valideer uw account door te klikken op de link die we zojuist naar uw e-" +"mailadres hebben verstuurd.\n" +"Kom dan terug naar dit venster en klik op de knop Volgende." -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "Er is een fout opgetreden: uw account is niet gevalideerd, de gebruikersnaam wordt al door iemand anders gebruikt of de server is onbereikbaar.\nGa terug en probeer het opnieuw." +msgstr "" +"Er is een fout opgetreden: uw account is niet gevalideerd, de gebruikersnaam " +"wordt al door iemand anders gebruikt of de server is onbereikbaar.\n" +"Ga terug en probeer het opnieuw." -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "Bedankt. Uw account is nu ingesteld en klaar voor gebruik." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "SIP-account-instelwizard" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "Welkom bij de account-instelwizard" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Account-instelwizard" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "Uw account instellen (stap 1/1)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "Vul uw SIP-gebruikersnaam in (stap 1/1)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "Vul uw accountinformatie in (stap 1/2)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "Geldigheid (stap 2/2)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "Fout" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Bezig met vernietigen" @@ -645,7 +675,9 @@ msgstr "Direct of via een server" msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "download: %f\nupload: %f (kbit/s)" +msgstr "" +"download: %f\n" +"upload: %f (kbit/s)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format @@ -657,115 +689,116 @@ msgstr "%ix%i @ %f fps" msgid "%.3f seconds" msgstr "%.3f seconden" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "Ophangen" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "Bezig met bellen..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "Inkomende oproep" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "goed" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "gemiddeld" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "slecht" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "erg slecht" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "verschrikkelijk" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "niet beschikbaar" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "Beveiligd door SRTP" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "Beveiligd door DTLS" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Beveiligd door ZRTP - [authenticatiesleutel: %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "Instellen als niet-geverifieerd" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "Instellen als geverifieerd" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "In een vergadering" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "In gesprek" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "Gepauzeerde oproep" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "Oproep is beëindigd." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "De overdracht is bezig" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "De overdracht is voltooid." -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "De overdracht is mislukt." -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "Hervatten" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "Pauzeren" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "Bezig met opnemen naar%s %s" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(Gepauzeerd)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "Vul uw inloggegevens in voor %s" @@ -812,7 +845,10 @@ msgstr "Het systeemgeluidspaneel kon niet worden gestart" msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" -msgstr "Welkom!\nDeze instelwizard zal u begeleiden bij het instellen van de audio-instellingen van Linphone" +msgstr "" +"Welkom!\n" +"Deze instelwizard zal u begeleiden bij het instellen van de audio-" +"instellingen van Linphone" #: ../gtk/audio_assistant.c:335 msgid "Capture device" @@ -862,7 +898,7 @@ msgstr "Laten we nu Linphone opstarten" msgid "Audio Assistant" msgstr "Audio-instelwizard" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "Audio-instelwizard" @@ -879,165 +915,97 @@ msgid "Record and Play" msgstr "Opnemen en afspelen" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "Bellernaam" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "Verzenden" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "Vergadering beëindigen" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "Deze oproep opnemen naar een audiobestand" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "Video" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "Dempen" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "Overdracht" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "In gesprek" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "Duur" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "Waardering van de gesprekskwaliteit" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "Alle gebruikers" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "Online gebruikers" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "Fiber-kanaal" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "Standaard" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "Verwijderen" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_Opties" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "Configuratie-URI instellen" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "Video altijd starten" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "Eigen weergave inschakelen" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "_Hulp" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "Foutopsporingsvenster weergeven" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_Website" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "Controleren op _updates" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "Account-instelwizard" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "SIP-adres of telefoonnummer:" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "Een nieuw gesprek beginnen" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "Contactpersonen" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Zoeken" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "Voeg contactpersonen toe uit map" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "Contactpersoon toevoegen" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "Recente gesprekken" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "Mijn huidige identiteit:" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "Gebruikersnaam" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "Wachtwoord" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "Internetverbinding:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "Automatisch inloggen" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "Gebruikersidentificatie" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "Inloginformatie" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "Welkom!" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "Over Linphone" @@ -1048,7 +1016,9 @@ msgstr "(C) Belledonne Communications, 2010\n" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "Een internetvideotelefoon gebruikmakende van het standaard SIP (rfc3261) protocol." +msgstr "" +"Een internetvideotelefoon gebruikmakende van het standaard SIP (rfc3261) " +"protocol." #: ../gtk/about.ui.h:5 msgid "" @@ -1064,7 +1034,19 @@ msgid "" "cs: Petr Pisar \n" "hu: anonymous\n" "he: Eli Zaretskii \n" -msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni \nde: Jean-Jacques Sarton \nsv: Daniel Nylander \nes: Jesus Benitez \nja: YAMAGUCHI YOSHIYA \npt_BR: Rafael Caesar Lenzi \npl: Robert Nasiadek \ncs: Petr Pisar \nhu: anonymous\nhe: Eli Zaretskii \n" +msgstr "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1076,7 +1058,8 @@ msgstr "De aanwezigheidsstatus van dit contactpersoon weergeven" #: ../gtk/contact.ui.h:4 msgid "Allow this contact to see my presence status" -msgstr "Toestaan dat deze contactpersoon mijn aanwezigheidsstatus kan weergeven" +msgstr "" +"Toestaan dat deze contactpersoon mijn aanwezigheidsstatus kan weergeven" #: ../gtk/contact.ui.h:5 msgid "Contact information" @@ -1098,6 +1081,10 @@ msgstr "Linphone - Authenticatie is vereist" msgid "Please enter the domain password" msgstr "Vul het domeinnaamwachtwoord in" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "Gebruikersidentificatie" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "Gespreksgeschiedenis" @@ -1640,6 +1627,14 @@ msgstr "" msgid "Configure tunnel" msgstr "" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "Gebruikersnaam" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "Wachtwoord" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "" @@ -1739,8 +1734,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1751,60 +1749,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "Verzenden" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "Bellernaam" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "Vergadering beëindigen" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "Deze oproep opnemen naar een audiobestand" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "Video" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "Dempen" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "Overdracht" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "In gesprek" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "Duur" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "Waardering van de gesprekskwaliteit" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "Internetverbinding:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "Automatisch inloggen" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "Inloginformatie" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "Welkom!" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Gereed." -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Zoekt de lokatie van het telefoonnummer..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "Kon dit nummer niet vinden." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "Verbinden" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Verbonden." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "" @@ -1868,23 +1918,36 @@ msgstr "" msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Zoekt de lokatie van het telefoonnummer..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "Kon dit nummer niet vinden." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "" +#: ../coreapi/proxy.c:1494 +#, fuzzy, c-format +msgid "Refreshing on %s..." +msgstr "bezig met ophalen van %s" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "" @@ -1920,7 +1983,7 @@ msgstr "" msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "" @@ -1938,59 +2001,59 @@ msgstr "" msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "Oproep beeindigd." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Gebruiker is bezet." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "Gebruiker is tijdelijk niet beschikbaar." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "De gebruiker wenst niet gestoord te worden." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Oproep geweigerd." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "Registratie op %s gelukt." -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -2000,11 +2063,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/pl.po b/po/pl.po index e55db2c35..27329ea36 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1,21 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Polish (http://www.transifex.com/p/linphone-gtk/language/pl/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Polish (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/pl/)\n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pl\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 #, c-format @@ -76,7 +79,7 @@ msgstr "" msgid "%s\t%s" msgstr "" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "" @@ -89,6 +92,10 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "Nie można znaleźć pixmapy: %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "" @@ -115,8 +122,8 @@ msgstr "" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" msgstr "" #: ../gtk/main.c:145 @@ -131,88 +138,89 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -290,108 +298,108 @@ msgstr "Włączone" msgid "Disabled" msgstr "Wyłączone" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "" @@ -434,149 +442,150 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "" -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -659,115 +668,116 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "" -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" msgstr "" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "" -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "" -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "" @@ -864,7 +874,7 @@ msgstr "" msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "" @@ -881,165 +891,97 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "" @@ -1100,6 +1042,10 @@ msgstr "" msgid "Please enter the domain password" msgstr "" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "" @@ -1642,6 +1588,14 @@ msgstr "" msgid "Configure tunnel" msgstr "" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "" @@ -1741,8 +1695,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1753,60 +1710,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "" - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "" - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Połączony" -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "" @@ -1870,23 +1879,36 @@ msgstr "" msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "" + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "" + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "" @@ -1922,7 +1944,7 @@ msgstr "" msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "" @@ -1940,59 +1962,59 @@ msgstr "" msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "" -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Osoba jest zajęta." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "Osoba jest tymczasowo niedostępna." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "Osoba nie chce, aby jej przeszkadzać." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Rozmowa odrzucona." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:1007 -#, c-format -msgid "Registration on %s successful." -msgstr "" - #: ../coreapi/callbacks.c:1008 #, c-format +msgid "Registration on %s successful." +msgstr "" + +#: ../coreapi/callbacks.c:1009 +#, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -2002,11 +2024,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/pt_BR.po b/po/pt_BR.po index c5b67d577..bf6aa49b8 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -1,20 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/p/linphone-gtk/language/pt_BR/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/belledonne-" +"communications/linphone-gtk/language/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -74,7 +76,7 @@ msgstr "" msgid "%s\t%s" msgstr "" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "" @@ -87,6 +89,10 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "Não é possível achar arquivo pixmap: %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "" @@ -113,8 +119,8 @@ msgstr "" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" msgstr "" #: ../gtk/main.c:145 @@ -129,88 +135,89 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Camadas recebidas" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -288,108 +295,108 @@ msgstr "Ativado" msgid "Disabled" msgstr "Desativado" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "Nenhum" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "" @@ -431,149 +438,150 @@ msgid_plural "Found %i contacts" msgstr[0] "" msgstr[1] "" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "" -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -656,115 +664,116 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "" -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" msgstr "" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "" -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "" -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "" @@ -861,7 +870,7 @@ msgstr "" msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "" @@ -878,165 +887,97 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "" @@ -1097,6 +1038,10 @@ msgstr "" msgid "Please enter the domain password" msgstr "" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "" @@ -1639,6 +1584,14 @@ msgstr "" msgid "Configure tunnel" msgstr "" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "" @@ -1738,8 +1691,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1750,60 +1706,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Procurando por telefone de destino..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "Não foi possível encontrar este número." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Conectado." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "" @@ -1867,23 +1875,36 @@ msgstr "" msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Procurando por telefone de destino..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "Não foi possível encontrar este número." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "" @@ -1919,7 +1940,7 @@ msgstr "" msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "" @@ -1937,59 +1958,59 @@ msgstr "" msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "" -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Usuário está ocupado." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "Usuário está temporáriamente indisponível." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "" -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "" -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:1007 -#, c-format -msgid "Registration on %s successful." -msgstr "" - #: ../coreapi/callbacks.c:1008 #, c-format +msgid "Registration on %s successful." +msgstr "" + +#: ../coreapi/callbacks.c:1009 +#, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -1999,11 +2020,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/ru.po b/po/ru.po index 8b8d0385e..48f1f7880 100644 --- a/po/ru.po +++ b/po/ru.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # AlexL , 2014 # AlexL , 2014-2015 @@ -12,15 +12,18 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" -"PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Russian (http://www.transifex.com/p/linphone-gtk/language/ru/)\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" +"PO-Revision-Date: 2015-07-17 07:40+0000\n" +"Last-Translator: AlexL \n" +"Language-Team: Russian (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 #, c-format @@ -76,14 +79,16 @@ msgstr[3] "%i секунд" msgid "" "%s\tQuality: %s\n" "%s\t%s\t" -msgstr "%s\tКачество: %s\n%s\t%s\t" +msgstr "" +"%s\tКачество: %s\n" +"%s\t%s\t" #: ../gtk/calllogs.c:342 #, c-format msgid "%s\t%s" msgstr "%s\t%s" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "Конференция" @@ -96,9 +101,15 @@ msgstr "Мне" msgid "Couldn't find pixmap file: %s" msgstr "Невозможно найти графический файл: %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." -msgstr "Вывод некоторой отладочной информации на устройство стандартного вывода во время работы." +msgstr "" +"Вывод некоторой отладочной информации на устройство стандартного вывода во " +"время работы." #: ../gtk/main.c:139 msgid "display version and exit." @@ -122,9 +133,11 @@ msgstr "Адрес для звонка прямо сейчас." #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "Определить рабочий каталог (относительно каталога установки, например: c:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Определить рабочий каталог (относительно каталога установки, например: c:" +"\\Program Files\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -138,88 +151,97 @@ msgstr "Запустить помощника аудио" msgid "Run self test and exit 0 if succeed" msgstr "Запустить самотест и выйти при успехе со статусом 0" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" +"%s хочет добавить Вас в его/её список контактов.\n" +"Вы бы добавили его/её в свой список контактов и позволили ему/ей видеть ваш " +"статус присутствия?\n" +"Если вы ответите нет, то этот человек будет временно занесён в чёрный список." -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "Пожалуйста, введите пароль для пользователя %s\n для реалм (рилм) %s:" +msgstr "" +"Пожалуйста, введите пароль для пользователя %s\n" +" для реалм (рилм) %s:" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "Ошибка звонка" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "Звонок окончен" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Входящий звонок" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "Ответ" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "Отклонить" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "Звонок приостановлен" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "%s" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s предложил запустить видео. Вы принимаете?" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "Домашняя страница" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "Видео интернет телефон" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (по умолчанию)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "Мы передали в %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "Звуковые карты не были обнаружены на этом компьютере.\nВы не сможете отправлять или получать аудио звонки." +msgstr "" +"Звуковые карты не были обнаружены на этом компьютере.\n" +"Вы не сможете отправлять или получать аудио звонки." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "Свободный SIP видео-телефон" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "Привет\n" @@ -297,108 +319,110 @@ msgstr "Разрешён" msgid "Disabled" msgstr "Не разрешён" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Учётная запись" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "Английский" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Французский" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Шведский" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Итальянский" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Испанский" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Бразильский португальский" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Польский" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Немецкий" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Русский" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "Японский" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Датский" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Венгерский" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Чешский" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "Китайский" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "Традиционный китайский" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "Норвежский" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "Иврит" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "Сербский" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "Арабский" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "Турецкий" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." -msgstr "Вы должны перезагрузить linphone для того, чтобы языковые настройки вступили в силу." +msgstr "" +"Вы должны перезагрузить linphone для того, чтобы языковые настройки вступили " +"в силу." -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "Нет" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ZRTP" @@ -407,7 +431,9 @@ msgstr "ZRTP" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "Доступна новая версия с %s.\nОткрыть браузер для загрузки?" +msgstr "" +"Доступна новая версия с %s.\n" +"Открыть браузер для загрузки?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -442,149 +468,161 @@ msgstr[1] "Найдено %i контакта" msgstr[2] "Найдено %i контактов" msgstr[3] "Найдено %i контактов" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." -msgstr "Добро пожаловать!\nЭтот ассистент поможет вам использовать SIP аккаунт для ваших звонков." +msgstr "" +"Добро пожаловать!\n" +"Этот ассистент поможет вам использовать SIP аккаунт для ваших звонков." -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "Создать учётную запись на linphone.org" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" -msgstr "Я уже имею учётную запись на linphone.org и только хочу использовать её" +msgstr "" +"Я уже имею учётную запись на linphone.org и только хочу использовать её" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "Я уже имею учётную запись sip и только хочу использовать её" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "Я хочу указать удалённую конфигурацию URI" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "Введите вашу информацию об учётной записи" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "Имя пользователя*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "Пароль*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "Домен*" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "Прокси" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "Введите ваше имя пользователя для linphone.org" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Имя пользователя:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Пароль:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) Обязательные поля" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "Имя пользователя: (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "Пароль: (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "Электронная почта: (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "Подтвердите ваш пароль: (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "Информировать об обновлениях linphone" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "Ваша учётная запись создаётся, пожалуйста, подождите." -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "Пожалуйста, подтвердите вашу учётную запись, щёлкнув на ссылку, которую вы только\nчто получили по электронной почте. Затем вернитесь сюда и нажмите кнопку Далее." +msgstr "" +"Пожалуйста, подтвердите вашу учётную запись, щёлкнув на ссылку, которую вы " +"только\n" +"что получили по электронной почте. Затем вернитесь сюда и нажмите кнопку " +"Далее." -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." -msgstr "Проверяется действительность вашей учётной записи, пожалуйста, подождите." +msgstr "" +"Проверяется действительность вашей учётной записи, пожалуйста, подождите." -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "Ошибка, учётная запись не подтверждена, имя пользователя уже используется или\nсервер недоступен. Пожалуйста, зайдите снова и попробуйте ещё раз." +msgstr "" +"Ошибка, учётная запись не подтверждена, имя пользователя уже используется " +"или\n" +"сервер недоступен. Пожалуйста, зайдите снова и попробуйте ещё раз." -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "Спасибо! Учётная запись успешно настроена и готова к использованию." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "Помощник настройки учётной записи SIP" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "Добро пожаловать в помощник настройки учётной записи" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Помощник настройки учётной записи" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "Настроить вашу учётную запись (шаг 1/1)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "Введите ваше sip имя пользователя (шаг 1/1)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "Введите информацию об учётной записи (шаг 1/2)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "Создание учётной записи в прогрессе" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "Подтверждение (шаг 2/2)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "Проверка действительности учётной записи в прогрессе" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "Ошибка" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Прерывание" @@ -655,7 +693,9 @@ msgstr "Напрямую или через сервер" msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "загрузка: %f\nотдача: %f (КБит/сек)" +msgstr "" +"загрузка: %f\n" +"отдача: %f (КБит/сек)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format @@ -667,115 +707,118 @@ msgstr "%ix%i @ %f кадр/сек" msgid "%.3f seconds" msgstr "%.3f секунд" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "Повесить трубку" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "Звоним..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "Входящий звонок" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "хороший" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "средний" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "плохой" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "очень плохой" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "совсем плохой" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "недоступен" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "Защищённые с помощью SRTP" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "Защищённые с помощью DTLS" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Защищённые с помощью ZRTP - [знак аутентификации: %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "Установить непроверенный" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "Установить проверенный" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "В конференции" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "Звоним" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "Звонок приостановлен" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "Звонок закончен." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "Передача в прогрессе" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "Передача завершена." -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "Передача неудачна." -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "Продолжить" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "Пауза" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" -msgstr "Записывается в\n%s %s" +msgstr "" +"Записывается в\n" +"%s %s" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(Пауза)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "Пожалуйста, введите информацию для входа %s:" @@ -822,7 +865,9 @@ msgstr "Не удаётся запустить системное управле msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" -msgstr "Добро пожаловать!\nЭтот ассистент поможет вам настроить настройки аудио для Linphone." +msgstr "" +"Добро пожаловать!\n" +"Этот ассистент поможет вам настроить настройки аудио для Linphone." #: ../gtk/audio_assistant.c:335 msgid "Capture device" @@ -872,7 +917,7 @@ msgstr "Давайте сейчас запустим linphone" msgid "Audio Assistant" msgstr "Помощник аудио" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "Помощник аудио" @@ -889,165 +934,97 @@ msgid "Record and Play" msgstr "Записать и проиграть" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "Имя вызываемого" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "Отправить" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "Конец конференции" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "Записать этот вызов в аудио файл" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "Видео" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "Без звука" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "Передача" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "Входящий звонок" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "Продолжительность" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "Вызвать рейтинг качества" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "Все пользователи" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "Пользователи в сети" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "Оптоволоконный канал" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "По умолчанию" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "Удалить" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_Опции" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "Установить конфигурацию URI" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "Всегда запускать видео" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "Показать окно видео" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "_Помощь" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "Показать окно отладки" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_Домашняя страница" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "Проверить _обновления" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "Помощник учётной записи" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "SIP-адрес или номер телефона:" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "Начать новый звонок" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "Контакты" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Поиск" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "Добавить контакты из директории" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "Добавить контакт" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "Последние звонки" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "Мой текущий идентификатор:" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "Имя пользователя" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "Пароль" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "Интернет-соединение:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "Входить автоматически" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "Идентификатор пользователя" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "Информация для входа" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "Добро пожаловать!" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "О Linphone" @@ -1074,7 +1051,19 @@ msgid "" "cs: Petr Pisar \n" "hu: anonymous\n" "he: Eli Zaretskii \n" -msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni \nde: Jean-Jacques Sarton \nsv: Daniel Nylander \nes: Jesus Benitez \nja: YAMAGUCHI YOSHIYA \npt_BR: Rafael Caesar Lenzi \npl: Robert Nasiadek \ncs: Petr Pisar \nhu: anonymous\nhe: Eli Zaretskii \n" +msgstr "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1108,6 +1097,10 @@ msgstr "Linphone - необходима регистрация" msgid "Please enter the domain password" msgstr "Введите пароль для домена" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "Идентификатор пользователя" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "История звонков" @@ -1250,7 +1243,9 @@ msgstr "Настройки" #: ../gtk/parameters.ui.h:18 msgid "This section defines your SIP address when not using a SIP account" -msgstr "Эта секция определяет ваш SIP адрес, когда вы не используете учётную запись SIP" +msgstr "" +"Эта секция определяет ваш SIP адрес, когда вы не используете учётную запись " +"SIP" #: ../gtk/parameters.ui.h:19 msgid "Your display name (eg: John Doe):" @@ -1388,7 +1383,9 @@ msgstr "Разрешить адаптивное управление скоро msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." -msgstr "Адаптивное управление скоростью - это технология динамического угадывания доступной пропускной способности во время звонка." +msgstr "" +"Адаптивное управление скоростью - это технология динамического угадывания " +"доступной пропускной способности во время звонка." #: ../gtk/parameters.ui.h:53 msgid "Bandwidth control" @@ -1650,6 +1647,14 @@ msgstr "Порт" msgid "Configure tunnel" msgstr "Конфигурировать тунель" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "Имя пользователя" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "Пароль" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "Конфигурировать http прокси (опционально)" @@ -1749,9 +1754,17 @@ msgstr "Указание удалённой конфигурации URI" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " -msgstr "Этот диалог позволяет установить HTTP или HTTPS адрес, когда конфигурация будет получена при запуске.\nПожалуйста, введите или измените настройки URI ниже. После нажатия OK linphone автоматически перезагрузится чтобы получить и учесть новую конфигурацию в учётной записи." +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " +msgstr "" +"Этот диалог позволяет установить HTTP или HTTPS адрес, когда конфигурация " +"будет получена при запуске.\n" +"Пожалуйста, введите или измените настройки URI ниже. После нажатия OK " +"linphone автоматически перезагрузится чтобы получить и учесть новую " +"конфигурацию в учётной записи." #: ../gtk/provisioning-fetch.ui.h:1 msgid "Configuring..." @@ -1761,60 +1774,113 @@ msgstr "Конфигурирование..." msgid "Please wait while fetching configuration from server..." msgstr "Пожалуйста, подождите пока получается конфигурация с сервера..." +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "Отправить" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "Имя вызываемого" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "Конец конференции" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "Записать этот вызов в аудио файл" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "Видео" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "Без звука" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "Передача" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "Входящий звонок" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "Продолжительность" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "Вызвать рейтинг качества" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "Интернет-соединение:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "Входить автоматически" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "Информация для входа" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "Добро пожаловать!" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Готов" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "Конфигурирование" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Поиск назначения для телефонного номера.." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "Не получилось принять решение по этому номеру." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "Соединение" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "Невозможно позвонить" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" -msgstr "К сожалению, мы достигли максимального количества одновременных звонков" +msgstr "" +"К сожалению, мы достигли максимального количества одновременных звонков" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "контактирует с вами" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "и спросил автоматический ответ." -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "Изменение параметров звонка..." -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Соединён." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "Звонок отменён" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "Невозможно приостановить звонок" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "Приостановка текущего звонка..." @@ -1878,23 +1944,41 @@ msgstr "Отдых" msgid "Unknown status" msgstr "Неизвестный статус" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "Введённый SIP-адрес прокси является недействительным, он должен начинаться с \"sip:имя_хоста\"" +msgstr "" +"Введённый SIP-адрес прокси является недействительным, он должен начинаться с " +"\"sip:имя_хоста\"" -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "Неверные параметры для sip идентификации\nДолжно выглядеть как sip:имя_пользователя@домен_прокси, как например, sip:alice@example.net" +msgstr "" +"Неверные параметры для sip идентификации\n" +"Должно выглядеть как sip:имя_пользователя@домен_прокси, как например, sip:" +"alice@example.net" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Поиск назначения для телефонного номера.." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "Не получилось принять решение по этому номеру." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "Невозможно зайти как: %s" +#: ../coreapi/proxy.c:1494 +#, fuzzy, c-format +msgid "Refreshing on %s..." +msgstr "получение от %s" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "Дистанционный звонок." @@ -1930,7 +2014,7 @@ msgstr "На звонок ответил %s." msgid "Incompatible, check codecs or security settings..." msgstr "Несовместимость, проверьте кодеки или параметры безопасности..." -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "Несовместимость медиа-параметров." @@ -1948,59 +2032,59 @@ msgstr "Мы приостановлены другой стороной." msgid "Call is updated by remote." msgstr "Звонок был дистанционно обновлён." -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "Звонок прерван." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Пользователь занят." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "Пользователь временно недоступен." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "Пользователь не хочет чтобы его беспокоили." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Звонок отклонён." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "Таймаут запроса." -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "Переадресован" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "Звонок не удался." -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "Регистрация на %s прошла успешно." -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "Отмена регистрации на %s завершена." -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "время ожидания истекло" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "Регистрация на %s не удалась: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "Сервис недоступен, повтор" @@ -2010,11 +2094,11 @@ msgstr "Сервис недоступен, повтор" msgid "Authentication token is %s" msgstr "Маркер проверки подлинности: %s" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "Параметры звонка были успешно изменены." -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." @@ -2047,7 +2131,12 @@ msgid "" "To: %s\n" "Status: %s\n" "Duration: %i mn %i sec\n" -msgstr "%s в %s\nОт: %s\nДо: %s\nСтатус: %s\nПродолжительность: %i мин %i сек\n" +msgstr "" +"%s в %s\n" +"От: %s\n" +"До: %s\n" +"Статус: %s\n" +"Продолжительность: %i мин %i сек\n" #: ../coreapi/call_log.c:221 msgid "Outgoing call" diff --git a/po/sr.po b/po/sr.po index adeac6fac..9026fe636 100644 --- a/po/sr.po +++ b/po/sr.po @@ -1,22 +1,25 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Мирослав Николић , 2014 msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Serbian (http://www.transifex.com/p/linphone-gtk/language/sr/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Serbian (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/sr/)\n" +"Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sr\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 #, c-format @@ -70,14 +73,16 @@ msgstr[2] "%i секунди" msgid "" "%s\tQuality: %s\n" "%s\t%s\t" -msgstr "%s\tКвалитет: %s\n%s\t%s\t" +msgstr "" +"%s\tКвалитет: %s\n" +"%s\t%s\t" #: ../gtk/calllogs.c:342 #, c-format msgid "%s\t%s" msgstr "%s\t%s" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "Конференција" @@ -90,6 +95,10 @@ msgstr "Ја" msgid "Couldn't find pixmap file: %s" msgstr "Не могу да пронађем датотеку сличице: %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "бележи на стандардни излаз неке податке прочишћавања док ради." @@ -116,9 +125,11 @@ msgstr "адреса за позивање управо сада" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "Наводи радни директоријум (треба да буде основа инсталације, нпр: „c:\\Program Files\\Linphone“)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Наводи радни директоријум (треба да буде основа инсталације, нпр: „c:" +"\\Program Files\\Linphone“)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -132,88 +143,93 @@ msgstr "Покреће помоћника звука" msgid "Run self test and exit 0 if succeed" msgstr "Покреће самоиспробавање и излази 0 ако је успешно" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "Унесите вашу лозинку за корисничко име %s\n на подручју %s:" +msgstr "" +"Унесите вашу лозинку за корисничко име %s\n" +" на подручју %s:" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "Грешка позива" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "Позив је завршен" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Долазни позив" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "Јави се" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "Одбиј" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "Позив је заустављен" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "од %s" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s предлаже да започнете видео. Да ли прихватате ?" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "Веза веб сајта" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Линфон" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (основно)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "Преселили смо се на %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "Ниједна звучна картица није откривена на овом рачунару.\nНећете бити у могућности да шаљете или да примате звучне позиве." +msgstr "" +"Ниједна звучна картица није откривена на овом рачунару.\n" +"Нећете бити у могућности да шаљете или да примате звучне позиве." -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "Слободан СИП телефон са снимком" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -291,108 +307,109 @@ msgstr "Укључено" msgid "Disabled" msgstr "Искључено" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Налог" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "Енглески" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Француски" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Шведски" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Италијански" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Шпански" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Бразилски португалски" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Пољски" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Немачки" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Руски" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "Јапански" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Холандски" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Мађарски" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Чешки" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "Кинески" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "Традиционални кинески" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "Норвешки" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "Јеврејски" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "Српски" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." -msgstr "Треба поново да покренете линфон да би нови изабрани језик ступио у дејство." +msgstr "" +"Треба поново да покренете линфон да би нови изабрани језик ступио у дејство." -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "Ништа" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "СРТП" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ЗРТП" @@ -401,7 +418,9 @@ msgstr "ЗРТП" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "Новије издање је доступно са „%s“.\nДа ли желите да отворите прегледник и да га преузмете ?" +msgstr "" +"Новије издање је доступно са „%s“.\n" +"Да ли желите да отворите прегледник и да га преузмете ?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -435,149 +454,158 @@ msgstr[0] "Нашао сам %i контакт" msgstr[1] "Нашао сам %i контакта" msgstr[2] "Нашао сам %i контаката" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." -msgstr "Добро дошли!\nОвај помоћник ће вам помоћи да користите СИП налог за ваше позиве." +msgstr "" +"Добро дошли!\n" +"Овај помоћник ће вам помоћи да користите СИП налог за ваше позиве." -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "Направи налог на линфон.орг-у" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "Већ имам налог линфон.орг-а и желим да га користим" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "Већ имам сип налог и желим да га користим" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "Желим да наведем удаљену путању подешавања" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "Корисник*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "Лозинка*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "Домен*" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "Посредник" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "Унесите ваше корисничко име линфон.орг-а" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Корисничко име:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Лозинка:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) Обавезна поља" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "Корисник: (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "Лозинка: (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "Ел. пошта: (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "Потврдите вашу лозинку: (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "Обавештавај ме о ажурирањима линфона" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "Потврдите ваш налог притиском на везу коју смо вам управо послали ел. поштом.\nЗатим се вратите овде и притисните дугме „Напред“." +msgstr "" +"Потврдите ваш налог притиском на везу коју смо вам управо послали ел. " +"поштом.\n" +"Затим се вратите овде и притисните дугме „Напред“." -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "Грешка, налог није потврђен, корисничко име је већ у употреби или је сервер недоступан.\nВратите се назад и покушајте опет." +msgstr "" +"Грешка, налог није потврђен, корисничко име је већ у употреби или је сервер " +"недоступан.\n" +"Вратите се назад и покушајте опет." -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "Хвала вам. Ваш налог је сада подешен и спреман за употребу." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "Помоћник подешавања СИП налога" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "Добро дошли у помоћника подешавања налога" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Помоћник подешавања налога" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "Подесите ваш налог (корак 1/1)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "Унесите ваше корисничко име сип-а (корак 1/1)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "Унесите податке налога (корак 1/2)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "Потврђивање (корак 2/2)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "Грешка" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Завршавам" @@ -648,7 +676,9 @@ msgstr "Непосредно или кроз сервер" msgid "" "download: %f\n" "upload: %f (kbit/s)" -msgstr "преузимање: %f\nотпремање: %f (kbit/s)" +msgstr "" +"преузимање: %f\n" +"отпремање: %f (kbit/s)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format @@ -660,115 +690,118 @@ msgstr "%ix%i @ %f к/с" msgid "%.3f seconds" msgstr "%.3f секунде" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "Прекини" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "Позивам..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "Долазни позив" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "добро" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "просечно" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "оскудно" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "јадно" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "много лоше" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "недоступно" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "Осигурано СРТП-ом" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Осигурано ЗРТП-ом [потврђивање идентитета: %s]" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "Непроверено подешавање" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "Проверено подешавање" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "На конференцији" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "У позиву" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "Заустављен позив" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "Позив је завршен." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "Пренос је у току" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "Пренос је обављен." -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "Пренос није успео." -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "Настави" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "Застани" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" -msgstr "Снимам у\n%s %s" +msgstr "" +"Снимам у\n" +"%s %s" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(Паузирано)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "Унесите податке пријављивања за %s" @@ -815,7 +848,9 @@ msgstr "Не могу да покренем управљање звуком си msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" -msgstr "Добро дошли!\nОвај помоћник ће вам помоћи да подесите поставке звука за Линфон" +msgstr "" +"Добро дошли!\n" +"Овај помоћник ће вам помоћи да подесите поставке звука за Линфон" #: ../gtk/audio_assistant.c:335 msgid "Capture device" @@ -865,7 +900,7 @@ msgstr "Хајде сада да покренемо Линфон" msgid "Audio Assistant" msgstr "Помоћник звука" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "Помоћник звука" @@ -882,165 +917,97 @@ msgid "Record and Play" msgstr "Снимите и пустите" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "Име позивника" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "Пошаљи" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "Заврши конференцију" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "Сними овај позив у звучну датотеку" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "Видео" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "Утишај" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "Пренос" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "Долазни позив" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "Трајање" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "Оцена квалитета позива" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "Сви корисници" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "Корисници на мрежи" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "АДСЛ" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "Оптички канал" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "Основно" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "Обриши" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_Могућности" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "Постави путању подешавања" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "Увек покрени видео" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "Укључи самовиђење" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "По_моћ" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "Прикажи прозорче прочишћавања" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_Матична страница" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "Провери _ажурирања" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "Помоћник налога" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "СИП адреса или број телефона:" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "Започните нови позив" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "Пријатељи" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Тражи" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "Додај пријатеље из директоријума" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "Додај пријатеља" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "Скорашњи позиви" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "Мој тренутни идентитет:" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "Корисник" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "Лозинка" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "Интернет веза:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "Сам ме пријави" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "ИБ корисника" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "Подаци пријављивања" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "Добро дошли!" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "О Линфону" @@ -1051,7 +1018,8 @@ msgstr "(C) Беледоне комуникације, 2010\n" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "Интернет телефон са снимком који користи уобичајени СИП протокол (rfc3261)." +msgstr "" +"Интернет телефон са снимком који користи уобичајени СИП протокол (rfc3261)." #: ../gtk/about.ui.h:5 msgid "" @@ -1067,7 +1035,20 @@ msgid "" "cs: Petr Pisar \n" "hu: anonymous\n" "he: Eli Zaretskii \n" -msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni \nde: Jean-Jacques Sarton \nsv: Daniel Nylander \nes: Jesus Benitez \nja: YAMAGUCHI YOSHIYA \npt_BR: Rafael Caesar Lenzi \npl: Robert Nasiadek \ncs: Petr Pisar \nhu: anonymous\nhe: Eli Zaretskii \nsr: Мирослав Николић \n" +msgstr "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" +"sr: Мирослав Николић \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1101,6 +1082,10 @@ msgstr "Линфон — Потребно је потврђивање идент msgid "Please enter the domain password" msgstr "Унесите лозинку домена" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "ИБ корисника" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "Историјат позива" @@ -1381,7 +1366,9 @@ msgstr "Укључи прилагодљиво управљање протоко msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." -msgstr "Прилагодљиво управљање протоком је техника за променљиво погађање доступног пропусног опсега за време позива." +msgstr "" +"Прилагодљиво управљање протоком је техника за променљиво погађање " +"доступног пропусног опсега за време позива." #: ../gtk/parameters.ui.h:53 msgid "Bandwidth control" @@ -1643,6 +1630,14 @@ msgstr "Прикључник" msgid "Configure tunnel" msgstr "Подесите тунел" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "Корисник" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "Лозинка" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "Подесите хттп посредника (изборно)" @@ -1742,9 +1737,17 @@ msgstr "Наводим удаљену путању подешавања" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " -msgstr "Ово прозорче омогућава подешавање хттп или хттпс адресе када се подешавање добавља на покретању.\nУнесите или измените путању подешавања. Након што притиснете „У реду“, Линфон ће се сам поново покренути како би довукао и унео у налог нова подешавања. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " +msgstr "" +"Ово прозорче омогућава подешавање хттп или хттпс адресе када се подешавање " +"добавља на покретању.\n" +"Унесите или измените путању подешавања. Након што притиснете „У реду“, " +"Линфон ће се сам поново покренути како би довукао и унео у налог нова " +"подешавања. " #: ../gtk/provisioning-fetch.ui.h:1 msgid "Configuring..." @@ -1754,60 +1757,112 @@ msgstr "Подешавам..." msgid "Please wait while fetching configuration from server..." msgstr "Сачекајте док довучем подешавања са сервера..." +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "Пошаљи" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "Име позивника" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "Заврши конференцију" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "Сними овај позив у звучну датотеку" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "Видео" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "Утишај" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "Пренос" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "Долазни позив" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "Трајање" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "Оцена квалитета позива" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "Интернет веза:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "Сам ме пријави" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "Подаци пријављивања" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "Добро дошли!" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Спреман" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "Подешавам" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Тражим одредиште телефонског броја..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "Не могу да решим овај број." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "Ступам у везу" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "Не могу да позовем" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Извините, достигли смо највећи број истовремених позива" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "вам се обраћа" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr " и затражени само-одговор." -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "Мењам параметре позива..." -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Повезан сам." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "Позив је прекинут" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "Не могу да зауставим позив" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "Заустављам тренутни позив..." @@ -1871,23 +1926,41 @@ msgstr "На одмору" msgid "Unknown status" msgstr "Непознато стање" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "Адреса сип посредника коју сте унели је неисправна, мора почети на „sip:“ за којим следи назив домаћина." +msgstr "" +"Адреса сип посредника коју сте унели је неисправна, мора почети на „sip:“ за " +"којим следи назив домаћина." -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "Сип идентитет који сте унели није исправан.\nТреба да изгледа као „sip:корисник@домен-посредника, као што је „sip:alice@example.net“" +msgstr "" +"Сип идентитет који сте унели није исправан.\n" +"Треба да изгледа као „sip:корисник@домен-посредника, као што је „sip:" +"alice@example.net“" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Тражим одредиште телефонског броја..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "Не могу да решим овај број." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "Не могу да се пријавим као %s" +#: ../coreapi/proxy.c:1494 +#, fuzzy, c-format +msgid "Refreshing on %s..." +msgstr "довлачим са „%s“" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "Удаљено звоњење." @@ -1923,7 +1996,7 @@ msgstr "На позив је одговорио „%s“." msgid "Incompatible, check codecs or security settings..." msgstr "Несагласно, проверите кодеке или безбедносна подешавања..." -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "Медијски параметри су несагласни." @@ -1941,59 +2014,59 @@ msgstr "Друга страна нас је паузирала." msgid "Call is updated by remote." msgstr "Позив је освежен удаљеним." -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "Позив је завршен." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Корисник је заузет." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "Корисник је привремено недоступан." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "Корисник не жели да буде узнемираван." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Позив је одбијен." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "Истекло је време захтева." -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "Преусмерен" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "Позив није успео." -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "Уписивање на „%s“ је успело." -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "Исписивање са „%s“ је обављено." -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "нема ограничења одговора" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "Уписивање на „%s“ није успело: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "Услуга није доступна, поново покушавам" @@ -2003,11 +2076,11 @@ msgstr "Услуга није доступна, поново покушавам" msgid "Authentication token is %s" msgstr "Симбол потврђивања идентитета је „%s“" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." @@ -2039,7 +2112,12 @@ msgid "" "To: %s\n" "Status: %s\n" "Duration: %i mn %i sec\n" -msgstr "%s на %s\nПозивач: %s\nПозивник: %s\nСтање: %s\nТрајање: %i мин. %i сек.\n" +msgstr "" +"%s на %s\n" +"Позивач: %s\n" +"Позивник: %s\n" +"Стање: %s\n" +"Трајање: %i мин. %i сек.\n" #: ../coreapi/call_log.c:221 msgid "Outgoing call" diff --git a/po/sv.po b/po/sv.po index 0f79d5bdc..455492964 100644 --- a/po/sv.po +++ b/po/sv.po @@ -1,20 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Swedish (http://www.transifex.com/p/linphone-gtk/language/sv/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Swedish (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/sv/)\n" +"Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -74,7 +76,7 @@ msgstr "" msgid "%s\t%s" msgstr "" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "" @@ -87,6 +89,10 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "Kunde inte hitta pixmap filen: %s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "skriv loggning information under körning" @@ -113,9 +119,11 @@ msgstr "Samtalsmottagare" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "Välj en arbetskatalog som ska vara basen för installationen, såsom C:\\Program\\Linphone" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Välj en arbetskatalog som ska vara basen för installationen, såsom C:" +"\\Program\\Linphone" #: ../gtk/main.c:145 msgid "Configuration file" @@ -129,88 +137,89 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "Samtalet slut" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Inkommande samtal" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "Avböj" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "Webbsajt" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (Default)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "En gratis SIP video-telefon" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -288,108 +297,108 @@ msgstr "På" msgid "Disabled" msgstr "Av" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Konto" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "Engelska" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Fransk" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "Svenska" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "Italiensk" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "Spanska" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Portugisiska" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Polska" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Tyska" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Ryska" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "Japanska" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Nederländksa" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Hungerska" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Tjekiska" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "Kinesiska" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Du behöver starta om programmet för att det nya språket ska synas." -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "" @@ -398,7 +407,9 @@ msgstr "" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "En nyare version är tillgänglig på %s.\nVill du öppna en browser för att ladda ner den?" +msgstr "" +"En nyare version är tillgänglig på %s.\n" +"Vill du öppna en browser för att ladda ner den?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -431,149 +442,150 @@ msgid_plural "Found %i contacts" msgstr[0] "Hittat kontakt %i" msgstr[1] "Hittat kontakt %i" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Användarnamn:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Lösenord:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "Tack. Ditt konto är nu konfigurerad och färdig att användas." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "Välkommen till kontoinstallationsassistenten" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Kontoinstallationsassistenten" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -656,115 +668,117 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "Ringer..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +#, fuzzy +msgid "00:00:00" msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "Samtalet slut." -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "" -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "Mata in ditt lösenord för domänen %s:" @@ -861,7 +875,7 @@ msgstr "" msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "" @@ -878,165 +892,97 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "Skicka" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "I samtal" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "Förlopp" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "Själv bild" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "Användarnamn" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Sök" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "Lägg till kontakt ifrån katalogen" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "Min nuvarande identitet" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "Användarnamn" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "Lösenord" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "Internet förbindelse:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "Logga mig automatiskt" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "AnvändarID" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "Login information" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "" @@ -1097,6 +1043,10 @@ msgstr "" msgid "Please enter the domain password" msgstr "Mata in lösenordet för domänen" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "AnvändarID" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "Samtalshistorik" @@ -1239,7 +1189,8 @@ msgstr "Inställningar" #: ../gtk/parameters.ui.h:18 msgid "This section defines your SIP address when not using a SIP account" -msgstr "Denna sektion specificerar din SIP adress när du inte använder ett SIP konto" +msgstr "" +"Denna sektion specificerar din SIP adress när du inte använder ett SIP konto" #: ../gtk/parameters.ui.h:19 msgid "Your display name (eg: John Doe):" @@ -1639,6 +1590,14 @@ msgstr "" msgid "Configure tunnel" msgstr "" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "Användarnamn" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "Lösenord" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "" @@ -1738,8 +1697,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1750,60 +1712,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "Skicka" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "I samtal" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "Förlopp" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "Internet förbindelse:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "Logga mig automatiskt" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "Login information" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Redo" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "Leta efter telefonnummer för destinationen..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "Kan inte nå dett nummer." - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "Kontaktar" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Kopplad" -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "" @@ -1867,23 +1881,40 @@ msgstr "" msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "SIP proxy adressen som du matade in är inte rätt, adressen måste starta med \"sip:\", följd av ett hostnamn" +msgstr "" +"SIP proxy adressen som du matade in är inte rätt, adressen måste starta med " +"\"sip:\", följd av ett hostnamn" -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "SIP adressen som du matade in är inte rätt. Adressen borde se ut som sip:namn@domän, såsom sip:peter@exempel.se" +msgstr "" +"SIP adressen som du matade in är inte rätt. Adressen borde se ut som sip:" +"namn@domän, såsom sip:peter@exempel.se" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "Leta efter telefonnummer för destinationen..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "Kan inte nå dett nummer." + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "Kunde inte logga in som %s" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "Ringer hos motparten." @@ -1919,7 +1950,7 @@ msgstr "" msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "" @@ -1937,59 +1968,59 @@ msgstr "" msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "Samtalet slut." -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Användare upptagen." -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "Användaren temporärt inte tillgänglig." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "Användaren vill inte bli störd." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Samtalet avböjdes." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "Registrering hos %s lyckades." -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "Avregistrering hos %s lyckades." -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "Inget svar inom angiven tid" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrering hos %s mislyckades: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -1999,11 +2030,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/tr.po b/po/tr.po index b8e7f91f7..0cf1f6ac7 100644 --- a/po/tr.po +++ b/po/tr.po @@ -1,21 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # faradundamarti , 2015 msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Turkish (http://www.transifex.com/p/linphone-gtk/language/tr/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Turkish (http://www.transifex.com/belledonne-communications/" +"linphone-gtk/language/tr/)\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -75,7 +77,7 @@ msgstr "" msgid "%s\t%s" msgstr "" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "Grup görüşme" @@ -88,6 +90,10 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "" @@ -114,9 +120,11 @@ msgstr "adres ara" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "Bir çalışma dizini belirtin (kurulum temelinde olmalı,örneğin: c:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"Bir çalışma dizini belirtin (kurulum temelinde olmalı,örneğin: c:\\Program " +"Files\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -130,88 +138,89 @@ msgstr "Ses yardımcısını çalıştır" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "Çağrı yanlış" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "Çağrı sonlandırıldı" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Gelen çağrı" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "Yanıt" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "Reddet" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "Çağrı duraklatıldı" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "İnternet " -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "Görüntülü internet telefonu" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "Özgür bir SİP görüntülü-telefon" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "Merhaba\n" @@ -289,108 +298,109 @@ msgstr "Etkin" msgid "Disabled" msgstr "Devre dışı" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "Hesap" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "İngilizce" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "Fransızca" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "İsveççe" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "İtalyanca" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "İspanyolca" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "Brezilya Portekizcesi" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "Lehçe" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "Almanca" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "Rusca" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "Japonca" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "Flemenkçe" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "Macarca" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "Çekce" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "Çince" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "Geleneksel Çince" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "Norveççe" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "İbranice" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "Sırpça" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." -msgstr "Yeni dil seçiminizin etkili olabilmesi için linfonu yeniden başlatmalısınız." +msgstr "" +"Yeni dil seçiminizin etkili olabilmesi için linfonu yeniden başlatmalısınız." -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "Hiçbiri" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "SRTP (Güvenli Gerçek Zamanlı Aktarım Protokolü)" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "ZRTP" @@ -432,149 +442,157 @@ msgid_plural "Found %i contacts" msgstr[0] "" msgstr[1] "" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." -msgstr "Hoşgeldiniz!\nBu yardımcı,çağrılarınız için bir SIP hesabı kullanmanıza yardım edecek." +msgstr "" +"Hoşgeldiniz!\n" +"Bu yardımcı,çağrılarınız için bir SIP hesabı kullanmanıza yardım edecek." -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "linphone.org'da bir hesap oluştur" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "Kallanıcı adı*" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "Parola*" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "Alan adı*" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "Vekil sunucu" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "linphone.org kullanıcı adınızı girin" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Kullanıcı adı:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Parola:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "(*) Zorunlu alanlar" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "Kullanıcı adı: (*)" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "Parola: (*)" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "E-posta: (*)" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "Parolanızı onaylayın: (*)" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "linphone güncellemeleri hakkında beni bilgilendir" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." -msgstr "Lütfen size e-posta yoluyla gönderdiğimiz bağlantıyı tıklayarak hesabınızı doğrulayın.\nSonra buraya geri dönün ve İleri düğmesine basın." +msgstr "" +"Lütfen size e-posta yoluyla gönderdiğimiz bağlantıyı tıklayarak hesabınızı " +"doğrulayın.\n" +"Sonra buraya geri dönün ve İleri düğmesine basın." -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "Hata,hesap geçersiz,kullanıcı adı kullanılıyor veya sunucuya erişilemiyor.\nLütfen geri dönün ve tekrar deneyin." +msgstr "" +"Hata,hesap geçersiz,kullanıcı adı kullanılıyor veya sunucuya erişilemiyor.\n" +"Lütfen geri dönün ve tekrar deneyin." -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "Teşekkürler. Hesabınız yapılandırıldı ve kullanıma hazır." -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "SİP hesabı yapılandırma yardımcısı" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "Hesap açma yardımcısına hoşgeldiniz" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "Hesap açma yardımcısı" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "Hesabınızı yapılandırın (adım 1/1)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "sip kullanıcı adınızı girin (adım 1/1)" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "Hesap bilgilerini girin (adım 1/2)" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "Doğrulama (adım 2/2)" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "Hata" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "Sonlandırma" @@ -657,115 +675,116 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "Telefonu kapatma" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "" -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "iyi" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "orta" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "kötü" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "çok kötü" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "kullanılamaz" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "SRTP güvencesi altında" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "DLTS güvencesi altında" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "Doğrulanmamış ayar" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "" -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "Aktarım sürüyor" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "Aktarım tamam" -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "Aktarım başarısız" -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "Devam et" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "Duraklat" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "(Duraklatıldı)" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "" @@ -812,7 +831,9 @@ msgstr "Ses kontrol sistemi başlatılamıyor" msgid "" "Welcome!\n" "This assistant will help you to configure audio settings for Linphone" -msgstr "Hoşgeldiniz!\nBu yardımcı,Linphone'un ses ayarlarını yapılandırmanıza yardım edecek" +msgstr "" +"Hoşgeldiniz!\n" +"Bu yardımcı,Linphone'un ses ayarlarını yapılandırmanıza yardım edecek" #: ../gtk/audio_assistant.c:335 msgid "Capture device" @@ -862,7 +883,7 @@ msgstr "" msgid "Audio Assistant" msgstr "Ses Yardımcısı" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "Ses yardımcısı" @@ -879,172 +900,106 @@ msgid "Record and Play" msgstr "Kaydet ve Oynat" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "Gönder" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "Grup görüşme son" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "Görüntü" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "Sessiz" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "Aktarım" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "Süre" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "Tüm kullanıcılar" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "Çevrimiçi kullanıcılar" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "Öntanımlı" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "Sil" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "_Seçenekler" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "_Yardım" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "Hata düzeltme penceresini göster" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "_Anasayfa" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "Güncellemeleri _Denetle" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "Hesap yardımcısı" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "SİP adresi veya telefon numarası:" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "Yeni bir arama başlat" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "Bağlantılar" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "Arama" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "Bağlantı ekle" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "Son çağrılar" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "Kallanıcı adı" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "Parola" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "İnternet bağlantısı:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "Kullanıcı kimliği" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "Hoşgeldiniz!" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "Linphone Hakkında" #: ../gtk/about.ui.h:2 msgid "(C) Belledonne Communications, 2010\n" -msgstr "(C) Belledonne Communications, 2010\n\n" +msgstr "" +"(C) Belledonne Communications, 2010\n" +"\n" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." @@ -1064,7 +1019,19 @@ msgid "" "cs: Petr Pisar \n" "hu: anonymous\n" "he: Eli Zaretskii \n" -msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni \nde: Jean-Jacques Sarton \nsv: Daniel Nylander \nes: Jesus Benitez \nja: YAMAGUCHI YOSHIYA \npt_BR: Rafael Caesar Lenzi \npl: Robert Nasiadek \ncs: Petr Pisar \nhu: anonymous\nhe: Eli Zaretskii \n" +msgstr "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1098,6 +1065,10 @@ msgstr "Linphone - Kimlik doğrulaması gerekli" msgid "Please enter the domain password" msgstr "Lütfen alan adı parolası girin" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "Kullanıcı kimliği" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "Çağrı geçmişi" @@ -1640,6 +1611,14 @@ msgstr "Bağlantı noktası" msgid "Configure tunnel" msgstr "" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "Kallanıcı adı" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "Parola" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "" @@ -1739,8 +1718,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1751,60 +1733,112 @@ msgstr "Yapılandırılıyor..." msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "Gönder" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "Grup görüşme son" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "Görüntü" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "Sessiz" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "Aktarım" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "Süre" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "İnternet bağlantısı:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "Hoşgeldiniz!" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "Hazır" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "Yapılandırılıyor" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "" - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "" - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "Bağlanıyor" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "Bağlandı." -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "Çağrı iptal edildi" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "" @@ -1868,23 +1902,36 @@ msgstr "Tatil" msgid "Unknown status" msgstr "Bilinmeyen durum" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "" + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "" + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "" @@ -1920,7 +1967,7 @@ msgstr "" msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "" @@ -1938,59 +1985,59 @@ msgstr "" msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "Çağrı sonlandırıldı" -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "Kullanıcı meşgul" -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "Kullanıcı rahatsız edilmek istemiyor." -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "Çağrı reddedildi." -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "İstek zamanaşımına uğradı." -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "Yeniden yönlendirildi" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "Arama başarısız" -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "" -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "Servis kullanımdışı, tekrar deneyin" @@ -2000,11 +2047,11 @@ msgstr "Servis kullanımdışı, tekrar deneyin" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/zh_CN.po b/po/zh_CN.po index b1d4792b6..1b9b07725 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -1,20 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Chinese (China) (http://www.transifex.com/p/linphone-gtk/language/zh_CN/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Chinese (China) (http://www.transifex.com/belledonne-" +"communications/linphone-gtk/language/zh_CN/)\n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -72,7 +74,7 @@ msgstr "" msgid "%s\t%s" msgstr "" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "" @@ -85,6 +87,10 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "无法打开位图文件:%s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "运行时向标准输出记录调试信息。" @@ -111,8 +117,8 @@ msgstr "现在呼叫的地址" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" msgstr "指定工作目录(应为安装目录例如 C:\\Program Files\\Linphone)" #: ../gtk/main.c:145 @@ -127,88 +133,91 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "呼叫结束" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "呼入" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "拒绝" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "网站" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (默认)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "未在此计算机上检测到声卡。\n您无法发送或接收音频呼叫。" +msgstr "" +"未在此计算机上检测到声卡。\n" +"您无法发送或接收音频呼叫。" -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "免费的 SIP 视频电话" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -286,108 +295,108 @@ msgstr "启用" msgid "Disabled" msgstr "禁用" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "帐户" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "英语" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "法语" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "瑞典语" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "意大利语" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "西班牙语" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "巴西葡萄牙语" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "波兰语" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "德语" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "俄语" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "日语" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "荷兰语" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "匈牙利语" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "捷克语" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "中文" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "您需要重启 linphone 以使语言选择生效。" -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "" @@ -396,7 +405,9 @@ msgstr "" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "%s 有新版本。\n您是否要打开浏览器下载它?" +msgstr "" +"%s 有新版本。\n" +"您是否要打开浏览器下载它?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -428,149 +439,150 @@ msgid "Found %i contact" msgid_plural "Found %i contacts" msgstr[0] "找到 %i 联系方式" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "用户名:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "密码:" -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "谢谢,您的帐户已经配置完毕,可以使用。" -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "欢迎使用帐户设置向导" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "帐户设置向导" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -653,115 +665,116 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "正在呼叫..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "通话结束。" -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "" -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "请输入 %s 的登录信息" @@ -858,7 +871,7 @@ msgstr "" msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "" @@ -875,165 +888,97 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "发送" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "呼入" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "通话时间" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "默认" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "启用自视" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "SIP 地址或电话号码:" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "联系人" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "搜索" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "从目录增加联系人" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "当前地址:" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "用户名" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "密码" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "网络连接:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "自动登录" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "用户 ID" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "登录信息" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "" @@ -1094,6 +1039,10 @@ msgstr "" msgid "Please enter the domain password" msgstr "请输入密码" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "用户 ID" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "呼叫历史" @@ -1636,6 +1585,14 @@ msgstr "" msgid "Configure tunnel" msgstr "" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "用户名" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "密码" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "" @@ -1735,8 +1692,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1747,60 +1707,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "发送" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "呼入" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "通话时间" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "网络连接:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "自动登录" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "登录信息" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "就绪" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "查询电话号码目的地..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "该号码无法解析。" - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "联系中" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "正在联系您" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr " 并询问了自动回答。" -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "已连接。" -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "" @@ -1864,23 +1876,38 @@ msgstr "" msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "您输入的 SIP 代理地址无效,它必须是以“sip:”开头,并紧随一个主机名。" -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "您输入的地址无效。\n它应具有“sip:用户名@代理域”的形式,例如 sip:alice@example.net" +msgstr "" +"您输入的地址无效。\n" +"它应具有“sip:用户名@代理域”的形式,例如 sip:alice@example.net" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "查询电话号码目的地..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "该号码无法解析。" + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "无法登录为 %s" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "响铃。" @@ -1916,7 +1943,7 @@ msgstr "" msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "" @@ -1934,59 +1961,59 @@ msgstr "" msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "通话结束。" -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "被叫正忙。" -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "您呼叫的用户暂时无法接通。" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "用户已开启免打扰功能。" -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "呼叫被拒绝。" -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "已重定向" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "呼叫失败。" -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "成功注册到 %s" -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "已在 %s 解除注册。" -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "没有响应,超时" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "注册到 %s 失败: %s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -1996,11 +2023,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/zh_TW.po b/po/zh_TW.po index 8902365b7..86a3b8f5e 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -1,20 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 09:34+0200\n" +"POT-Creation-Date: 2015-08-24 11:11+0200\n" "PO-Revision-Date: 2015-07-17 07:34+0000\n" -"Last-Translator: Belledonne Communications \n" -"Language-Team: Chinese (Taiwan) (http://www.transifex.com/p/linphone-gtk/language/zh_TW/)\n" +"Last-Translator: Belledonne Communications \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/belledonne-" +"communications/linphone-gtk/language/zh_TW/)\n" +"Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:976 @@ -72,7 +74,7 @@ msgstr "" msgid "%s\t%s" msgstr "" -#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +#: ../gtk/conference.c:38 ../gtk/in_call_frame.ui.h:11 msgid "Conference" msgstr "" @@ -85,6 +87,10 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "找不到 pixmap 檔:%s" +#: ../gtk/chat.c:493 +msgid "Copy" +msgstr "" + #: ../gtk/main.c:138 msgid "log to stdout some debug information while running." msgstr "執行時將一些除錯資訊記錄到標準輸出。" @@ -111,9 +117,10 @@ msgstr "現在要打電話的位址" #: ../gtk/main.c:144 msgid "" -"Specifiy a working directory (should be the base of the installation, eg: " -"c:\\Program Files\\Linphone)" -msgstr "指定一個工作目錄(應該為安裝的根目錄,例如:c:\\Program Files\\Linphone)" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"指定一個工作目錄(應該為安裝的根目錄,例如:c:\\Program Files\\Linphone)" #: ../gtk/main.c:145 msgid "Configuration file" @@ -127,88 +134,91 @@ msgstr "" msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1078 +#: ../gtk/main.c:1058 #, c-format msgid "" "%s would like to add you to his/her contact list.\n" -"Would you add him/her to your contact list and allow him/her to see your presence status?\n" +"Would you add him/her to your contact list and allow him/her to see your " +"presence status?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1155 +#: ../gtk/main.c:1135 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1276 +#: ../gtk/main.c:1256 msgid "Call error" msgstr "" -#: ../gtk/main.c:1279 ../coreapi/linphonecore.c:3739 +#: ../gtk/main.c:1259 ../coreapi/linphonecore.c:3669 msgid "Call ended" msgstr "通話已結束" -#: ../gtk/main.c:1282 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1262 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "來電" -#: ../gtk/main.c:1284 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1264 ../gtk/incall_view.c:531 ../gtk/in_call_frame.ui.h:3 msgid "Answer" msgstr "接聽" -#: ../gtk/main.c:1286 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1266 ../gtk/in_call_frame.ui.h:4 msgid "Decline" msgstr "拒接" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1292 +#: ../gtk/main.c:1272 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1362 +#: ../gtk/main.c:1342 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1517 +#: ../gtk/main.c:1508 msgid "Website link" msgstr "網站連結" -#: ../gtk/main.c:1576 ../gtk/waiting.ui.h:1 +#: ../gtk/main.c:1567 ../gtk/waiting.ui.h:1 msgid "Linphone" msgstr "Linphone" -#: ../gtk/main.c:1577 +#: ../gtk/main.c:1568 msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1636 +#: ../gtk/main.c:1627 #, c-format msgid "%s (Default)" msgstr "%s (預設值)" -#: ../gtk/main.c:1974 ../coreapi/callbacks.c:1077 +#: ../gtk/main.c:1973 ../coreapi/callbacks.c:1078 #, c-format msgid "We are transferred to %s" msgstr "我們被轉接到 %s" -#: ../gtk/main.c:1984 +#: ../gtk/main.c:1983 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." -msgstr "在這臺電腦中偵測不到音效卡。\n您將無法傳送或接收語音電話。" +msgstr "" +"在這臺電腦中偵測不到音效卡。\n" +"您將無法傳送或接收語音電話。" -#: ../gtk/main.c:2116 +#: ../gtk/main.c:2127 msgid "A free SIP video-phone" msgstr "自由的 SIP 視訊電話" -#: ../gtk/main.c:2225 +#: ../gtk/main.c:2236 #, c-format msgid "Hello\n" msgstr "" @@ -286,108 +296,108 @@ msgstr "已啟用" msgid "Disabled" msgstr "已停用" -#: ../gtk/propertybox.c:898 +#: ../gtk/propertybox.c:901 msgid "Account" msgstr "帳號" -#: ../gtk/propertybox.c:1161 +#: ../gtk/propertybox.c:1169 msgid "English" msgstr "英語" -#: ../gtk/propertybox.c:1162 +#: ../gtk/propertybox.c:1170 msgid "French" msgstr "法語" -#: ../gtk/propertybox.c:1163 +#: ../gtk/propertybox.c:1171 msgid "Swedish" msgstr "瑞典語" -#: ../gtk/propertybox.c:1164 +#: ../gtk/propertybox.c:1172 msgid "Italian" msgstr "義大利語" -#: ../gtk/propertybox.c:1165 +#: ../gtk/propertybox.c:1173 msgid "Spanish" msgstr "西班牙語" -#: ../gtk/propertybox.c:1166 +#: ../gtk/propertybox.c:1174 msgid "Brazilian Portugese" msgstr "巴西葡萄牙語" -#: ../gtk/propertybox.c:1167 +#: ../gtk/propertybox.c:1175 msgid "Polish" msgstr "波蘭語" -#: ../gtk/propertybox.c:1168 +#: ../gtk/propertybox.c:1176 msgid "German" msgstr "德語" -#: ../gtk/propertybox.c:1169 +#: ../gtk/propertybox.c:1177 msgid "Russian" msgstr "俄語" -#: ../gtk/propertybox.c:1170 +#: ../gtk/propertybox.c:1178 msgid "Japanese" msgstr "日語" -#: ../gtk/propertybox.c:1171 +#: ../gtk/propertybox.c:1179 msgid "Dutch" msgstr "荷蘭語" -#: ../gtk/propertybox.c:1172 +#: ../gtk/propertybox.c:1180 msgid "Hungarian" msgstr "匈牙利語" -#: ../gtk/propertybox.c:1173 +#: ../gtk/propertybox.c:1181 msgid "Czech" msgstr "捷克語" -#: ../gtk/propertybox.c:1174 +#: ../gtk/propertybox.c:1182 msgid "Chinese" msgstr "中文" -#: ../gtk/propertybox.c:1175 +#: ../gtk/propertybox.c:1183 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1176 +#: ../gtk/propertybox.c:1184 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1177 +#: ../gtk/propertybox.c:1185 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1178 +#: ../gtk/propertybox.c:1186 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1179 +#: ../gtk/propertybox.c:1187 msgid "Arabic" msgstr "" -#: ../gtk/propertybox.c:1180 +#: ../gtk/propertybox.c:1188 msgid "Turkish" msgstr "" -#: ../gtk/propertybox.c:1237 +#: ../gtk/propertybox.c:1245 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "您需要重新啟動 linphone 才能讓新選擇的語言生效。" -#: ../gtk/propertybox.c:1317 +#: ../gtk/propertybox.c:1325 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1321 +#: ../gtk/propertybox.c:1329 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1327 +#: ../gtk/propertybox.c:1335 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1334 +#: ../gtk/propertybox.c:1342 msgid "ZRTP" msgstr "" @@ -396,7 +406,9 @@ msgstr "" msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" -msgstr "在 %s 有最新的版本。\n您想要開啟瀏覽器下載它嗎?" +msgstr "" +"在 %s 有最新的版本。\n" +"您想要開啟瀏覽器下載它嗎?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -428,149 +440,150 @@ msgid "Found %i contact" msgid_plural "Found %i contacts" msgstr[0] "找不到 %i 個連絡人" -#: ../gtk/setupwizard.c:161 +#: ../gtk/setupwizard.c:160 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:170 +#: ../gtk/setupwizard.c:169 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:171 +#: ../gtk/setupwizard.c:170 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:172 +#: ../gtk/setupwizard.c:171 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:173 +#: ../gtk/setupwizard.c:172 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:207 +#: ../gtk/setupwizard.c:206 msgid "Enter your account information" msgstr "" -#: ../gtk/setupwizard.c:222 +#: ../gtk/setupwizard.c:221 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:223 +#: ../gtk/setupwizard.c:222 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:226 +#: ../gtk/setupwizard.c:225 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:227 +#: ../gtk/setupwizard.c:226 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:264 +#: ../gtk/setupwizard.c:263 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:276 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:275 ../gtk/parameters.ui.h:91 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "使用者名稱:" -#: ../gtk/setupwizard.c:278 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:277 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "密碼: " -#: ../gtk/setupwizard.c:420 +#: ../gtk/setupwizard.c:419 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:421 +#: ../gtk/setupwizard.c:420 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:423 +#: ../gtk/setupwizard.c:422 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:425 +#: ../gtk/setupwizard.c:424 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:427 +#: ../gtk/setupwizard.c:426 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:442 +#: ../gtk/setupwizard.c:441 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:487 +#: ../gtk/setupwizard.c:486 msgid "Your account is being created, please wait." msgstr "" -#: ../gtk/setupwizard.c:495 +#: ../gtk/setupwizard.c:494 msgid "" -"Please validate your account by clicking on the link we just sent you by email.\n" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:505 +#: ../gtk/setupwizard.c:504 msgid "Checking if your account is been validated, please wait." msgstr "" -#: ../gtk/setupwizard.c:513 +#: ../gtk/setupwizard.c:512 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:522 +#: ../gtk/setupwizard.c:521 msgid "Thank you. Your account is now configured and ready for use." msgstr "謝謝您。您的帳號已設定完成並且可以使用。" -#: ../gtk/setupwizard.c:558 +#: ../gtk/setupwizard.c:557 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:578 msgid "Welcome to the account setup assistant" msgstr "歡迎使用帳號設定助理" -#: ../gtk/setupwizard.c:584 +#: ../gtk/setupwizard.c:583 msgid "Account setup assistant" msgstr "帳號設定助理" -#: ../gtk/setupwizard.c:589 +#: ../gtk/setupwizard.c:588 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:592 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:596 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:601 msgid "Account creation in progress" msgstr "" -#: ../gtk/setupwizard.c:606 +#: ../gtk/setupwizard.c:605 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:611 +#: ../gtk/setupwizard.c:610 msgid "Account validation check in progress" msgstr "" -#: ../gtk/setupwizard.c:615 +#: ../gtk/setupwizard.c:614 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:619 ../gtk/audio_assistant.c:541 +#: ../gtk/setupwizard.c:618 ../gtk/audio_assistant.c:541 msgid "Terminating" msgstr "" @@ -653,115 +666,116 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 +#: ../gtk/incall_view.c:406 ../gtk/in_call_frame.ui.h:10 +#: ../gtk/videowindow.c:235 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:510 msgid "Calling..." msgstr "播打..." -#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:733 -msgid "00::00::00" -msgstr "00::00::00" +#: ../gtk/incall_view.c:513 ../gtk/incall_view.c:767 +msgid "00:00:00" +msgstr "00:00:00" -#: ../gtk/incall_view.c:525 +#: ../gtk/incall_view.c:524 msgid "Incoming call" msgstr "來電" -#: ../gtk/incall_view.c:562 +#: ../gtk/incall_view.c:561 msgid "good" msgstr "" -#: ../gtk/incall_view.c:564 +#: ../gtk/incall_view.c:563 msgid "average" msgstr "" -#: ../gtk/incall_view.c:566 +#: ../gtk/incall_view.c:565 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:568 +#: ../gtk/incall_view.c:567 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:570 +#: ../gtk/incall_view.c:569 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +#: ../gtk/incall_view.c:570 ../gtk/incall_view.c:586 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:679 +#: ../gtk/incall_view.c:715 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:685 +#: ../gtk/incall_view.c:721 msgid "Secured by DTLS" msgstr "" -#: ../gtk/incall_view.c:691 +#: ../gtk/incall_view.c:727 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:697 +#: ../gtk/incall_view.c:733 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:697 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:733 ../gtk/in_call_frame.ui.h:1 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:728 +#: ../gtk/incall_view.c:762 msgid "In call" msgstr "通話中" -#: ../gtk/incall_view.c:764 +#: ../gtk/incall_view.c:798 msgid "Paused call" msgstr "暫停通話" -#: ../gtk/incall_view.c:800 +#: ../gtk/incall_view.c:834 msgid "Call ended." msgstr "通話結束。" -#: ../gtk/incall_view.c:831 +#: ../gtk/incall_view.c:865 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:834 +#: ../gtk/incall_view.c:868 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:837 +#: ../gtk/incall_view.c:871 msgid "Transfer failed." msgstr "" -#: ../gtk/incall_view.c:881 +#: ../gtk/incall_view.c:904 msgid "Resume" msgstr "繼續" -#: ../gtk/incall_view.c:888 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:911 ../gtk/in_call_frame.ui.h:7 msgid "Pause" msgstr "暫停" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:954 +#: ../gtk/incall_view.c:977 msgid "(Paused)" msgstr "" -#: ../gtk/loginframe.c:87 +#: ../gtk/loginframe.c:75 #, c-format msgid "Please enter login information for %s" msgstr "請輸入 %s 的 登入資訊" @@ -858,7 +872,7 @@ msgstr "" msgid "Audio Assistant" msgstr "" -#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:32 +#: ../gtk/audio_assistant.c:520 ../gtk/main.ui.h:16 msgid "Audio assistant" msgstr "" @@ -875,165 +889,97 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -msgid "Callee name" -msgstr "" - -#: ../gtk/main.ui.h:2 -msgid "Send" -msgstr "傳送" - -#: ../gtk/main.ui.h:3 -msgid "End conference" -msgstr "" - -#: ../gtk/main.ui.h:7 -msgid "Record this call to an audio file" -msgstr "" - -#: ../gtk/main.ui.h:8 -msgid "Video" -msgstr "" - -#: ../gtk/main.ui.h:10 -msgid "Mute" -msgstr "" - -#: ../gtk/main.ui.h:11 -msgid "Transfer" -msgstr "轉接" - -#: ../gtk/main.ui.h:14 -msgid "In call" -msgstr "通話中" - -#: ../gtk/main.ui.h:15 -msgid "Duration" -msgstr "時間長度" - -#: ../gtk/main.ui.h:16 -msgid "Call quality rating" -msgstr "" - -#: ../gtk/main.ui.h:17 msgid "All users" msgstr "所有使用者" -#: ../gtk/main.ui.h:18 +#: ../gtk/main.ui.h:2 msgid "Online users" msgstr "線上使用者" -#: ../gtk/main.ui.h:19 +#: ../gtk/main.ui.h:3 ../gtk/login_frame.ui.h:8 msgid "ADSL" msgstr "ADSL" -#: ../gtk/main.ui.h:20 +#: ../gtk/main.ui.h:4 ../gtk/login_frame.ui.h:9 msgid "Fiber Channel" msgstr "光纖通道" -#: ../gtk/main.ui.h:21 +#: ../gtk/main.ui.h:5 msgid "Default" msgstr "預設值" -#: ../gtk/main.ui.h:22 +#: ../gtk/main.ui.h:6 msgid "Delete" msgstr "" -#: ../gtk/main.ui.h:23 +#: ../gtk/main.ui.h:7 msgid "_Options" msgstr "選項(_O)" -#: ../gtk/main.ui.h:24 +#: ../gtk/main.ui.h:8 msgid "Set configuration URI" msgstr "" -#: ../gtk/main.ui.h:25 +#: ../gtk/main.ui.h:9 msgid "Always start video" msgstr "" -#: ../gtk/main.ui.h:26 +#: ../gtk/main.ui.h:10 msgid "Enable self-view" msgstr "啟用自拍檢視" -#: ../gtk/main.ui.h:27 +#: ../gtk/main.ui.h:11 msgid "_Help" msgstr "求助(_H)" -#: ../gtk/main.ui.h:28 +#: ../gtk/main.ui.h:12 msgid "Show debug window" msgstr "顯示除錯視窗" -#: ../gtk/main.ui.h:29 +#: ../gtk/main.ui.h:13 msgid "_Homepage" msgstr "官方網頁(_H)" -#: ../gtk/main.ui.h:30 +#: ../gtk/main.ui.h:14 msgid "Check _Updates" msgstr "檢查更新(_U)" -#: ../gtk/main.ui.h:31 +#: ../gtk/main.ui.h:15 msgid "Account assistant" msgstr "" -#: ../gtk/main.ui.h:33 +#: ../gtk/main.ui.h:17 msgid "SIP address or phone number:" msgstr "SIP 位址或電話號碼:" -#: ../gtk/main.ui.h:34 +#: ../gtk/main.ui.h:18 msgid "Initiate a new call" msgstr "打出新電話" -#: ../gtk/main.ui.h:35 +#: ../gtk/main.ui.h:19 msgid "Contacts" msgstr "連絡人" -#: ../gtk/main.ui.h:36 +#: ../gtk/main.ui.h:20 msgid "Search" msgstr "搜尋" -#: ../gtk/main.ui.h:37 +#: ../gtk/main.ui.h:21 msgid "Add contacts from directory" msgstr "從目錄加入連絡人" -#: ../gtk/main.ui.h:38 +#: ../gtk/main.ui.h:22 msgid "Add contact" msgstr "加入聯絡人" -#: ../gtk/main.ui.h:39 +#: ../gtk/main.ui.h:23 msgid "Recent calls" msgstr "" -#: ../gtk/main.ui.h:40 +#: ../gtk/main.ui.h:24 msgid "My current identity:" msgstr "我目前的使用者識別:" -#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 -msgid "Username" -msgstr "使用者名稱" - -#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 -msgid "Password" -msgstr "密碼" - -#: ../gtk/main.ui.h:43 -msgid "Internet connection:" -msgstr "網路連線:" - -#: ../gtk/main.ui.h:44 -msgid "Automatically log me in" -msgstr "將我自動登入" - -#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3 -msgid "UserID" -msgstr "使用者ID" - -#: ../gtk/main.ui.h:46 -msgid "Login information" -msgstr "登入資訊" - -#: ../gtk/main.ui.h:47 -msgid "Welcome!" -msgstr "" - #: ../gtk/about.ui.h:1 msgid "About Linphone" msgstr "" @@ -1094,6 +1040,10 @@ msgstr "Linphone - 需要驗證" msgid "Please enter the domain password" msgstr "請輸入這個網域的密碼" +#: ../gtk/password.ui.h:3 ../gtk/login_frame.ui.h:5 +msgid "UserID" +msgstr "使用者ID" + #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "通話紀錄" @@ -1636,6 +1586,14 @@ msgstr "" msgid "Configure tunnel" msgstr "" +#: ../gtk/tunnel_config.ui.h:7 ../gtk/login_frame.ui.h:1 +msgid "Username" +msgstr "使用者名稱" + +#: ../gtk/tunnel_config.ui.h:8 ../gtk/login_frame.ui.h:2 +msgid "Password" +msgstr "密碼" + #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" msgstr "" @@ -1735,8 +1693,11 @@ msgstr "" #: ../gtk/config-uri.ui.h:2 msgid "" -"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" -"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +"This dialog allows to set an http or https address when configuration is to " +"be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, " +"Linphone will restart automatically in order to fetch and take into account " +"the new configuration. " msgstr "" #: ../gtk/provisioning-fetch.ui.h:1 @@ -1747,60 +1708,112 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" +#: ../gtk/chatroom_frame.ui.h:1 +msgid "Send" +msgstr "傳送" + +#: ../gtk/callee_frame.ui.h:1 +msgid "Callee name" +msgstr "" + +#: ../gtk/conf_frame.ui.h:1 +msgid "End conference" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:2 +msgid "Click here to set the speakers volume" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:5 +msgid "Record this call to an audio file" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:6 +msgid "Video" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:8 +msgid "Mute" +msgstr "" + +#: ../gtk/in_call_frame.ui.h:9 +msgid "Transfer" +msgstr "轉接" + +#: ../gtk/in_call_frame.ui.h:12 +msgid "In call" +msgstr "通話中" + +#: ../gtk/in_call_frame.ui.h:13 +msgid "Duration" +msgstr "時間長度" + +#: ../gtk/in_call_frame.ui.h:14 +msgid "Call quality rating" +msgstr "" + +#: ../gtk/login_frame.ui.h:3 +msgid "Internet connection:" +msgstr "網路連線:" + +#: ../gtk/login_frame.ui.h:4 +msgid "Automatically log me in" +msgstr "將我自動登入" + +#: ../gtk/login_frame.ui.h:6 +msgid "Login information" +msgstr "登入資訊" + +#: ../gtk/login_frame.ui.h:7 +msgid "Welcome!" +msgstr "" + #: ../coreapi/linphonecore.c:1483 msgid "Ready" msgstr "準備就緒" -#: ../coreapi/linphonecore.c:2413 +#: ../coreapi/linphonecore.c:2415 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2587 -msgid "Looking for telephone number destination..." -msgstr "尋找電話號碼目的端..." - -#: ../coreapi/linphonecore.c:2589 -msgid "Could not resolve this number." -msgstr "無法解析這個號碼。" - #. must be known at that time -#: ../coreapi/linphonecore.c:2875 +#: ../coreapi/linphonecore.c:2800 msgid "Contacting" msgstr "正在連絡" -#: ../coreapi/linphonecore.c:2880 +#: ../coreapi/linphonecore.c:2805 msgid "Could not call" msgstr "無法通話" -#: ../coreapi/linphonecore.c:3031 +#: ../coreapi/linphonecore.c:2956 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "抱歉,我們已達瀏同步通話的最大數目" -#: ../coreapi/linphonecore.c:3189 +#: ../coreapi/linphonecore.c:3114 msgid "is contacting you" msgstr "正在連絡您" -#: ../coreapi/linphonecore.c:3190 +#: ../coreapi/linphonecore.c:3115 msgid " and asked autoanswer." msgstr "並要求自動接聽。" -#: ../coreapi/linphonecore.c:3316 +#: ../coreapi/linphonecore.c:3241 msgid "Modifying call parameters..." msgstr "修改通話參數..." -#: ../coreapi/linphonecore.c:3695 +#: ../coreapi/linphonecore.c:3625 msgid "Connected." msgstr "已連線。" -#: ../coreapi/linphonecore.c:3720 +#: ../coreapi/linphonecore.c:3650 msgid "Call aborted" msgstr "通話已放棄" -#: ../coreapi/linphonecore.c:3917 +#: ../coreapi/linphonecore.c:3847 msgid "Could not pause the call" msgstr "無法暫停通話" -#: ../coreapi/linphonecore.c:3920 +#: ../coreapi/linphonecore.c:3850 msgid "Pausing the current call..." msgstr "暫停目前的通話..." @@ -1864,23 +1877,39 @@ msgstr "" msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:328 +#: ../coreapi/proxy.c:295 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "您輸入的 sip 代理位址是無效的,它必須要以「sip:」開頭,後面接主機名稱。" +msgstr "" +"您輸入的 sip 代理位址是無效的,它必須要以「sip:」開頭,後面接主機名稱。" -#: ../coreapi/proxy.c:334 +#: ../coreapi/proxy.c:301 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "您輸入的 sip 身分是無效的。\n它應該看起來像 sip:使用者名稱@代理網域,像是 sip:alice@example.net" +msgstr "" +"您輸入的 sip 身分是無效的。\n" +"它應該看起來像 sip:使用者名稱@代理網域,像是 sip:alice@example.net" -#: ../coreapi/proxy.c:1420 +#: ../coreapi/proxy.c:1010 +msgid "Looking for telephone number destination..." +msgstr "尋找電話號碼目的端..." + +#: ../coreapi/proxy.c:1014 +msgid "Could not resolve this number." +msgstr "無法解析這個號碼。" + +#: ../coreapi/proxy.c:1407 #, c-format msgid "Could not login as %s" msgstr "無法以 %s 登入" +#: ../coreapi/proxy.c:1494 +#, c-format +msgid "Refreshing on %s..." +msgstr "" + #: ../coreapi/callbacks.c:442 msgid "Remote ringing." msgstr "遠端響鈴。" @@ -1916,7 +1945,7 @@ msgstr "通話由 %s 接聽。" msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:920 +#: ../coreapi/callbacks.c:603 ../coreapi/callbacks.c:921 msgid "Incompatible media parameters." msgstr "" @@ -1934,59 +1963,59 @@ msgstr "" msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:796 +#: ../coreapi/callbacks.c:797 msgid "Call terminated." msgstr "通話已終止。" -#: ../coreapi/callbacks.c:824 +#: ../coreapi/callbacks.c:825 msgid "User is busy." msgstr "使用者現正忙碌。" -#: ../coreapi/callbacks.c:825 +#: ../coreapi/callbacks.c:826 msgid "User is temporarily unavailable." msgstr "使用者暫時無法聯繫。" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:827 +#: ../coreapi/callbacks.c:828 msgid "User does not want to be disturbed." msgstr "使用者不想要被打擾。" -#: ../coreapi/callbacks.c:828 +#: ../coreapi/callbacks.c:829 msgid "Call declined." msgstr "通話被拒接。" -#: ../coreapi/callbacks.c:843 +#: ../coreapi/callbacks.c:844 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:874 +#: ../coreapi/callbacks.c:875 msgid "Redirected" msgstr "已重新導向" -#: ../coreapi/callbacks.c:929 +#: ../coreapi/callbacks.c:930 msgid "Call failed." msgstr "通話失敗。" -#: ../coreapi/callbacks.c:1007 +#: ../coreapi/callbacks.c:1008 #, c-format msgid "Registration on %s successful." msgstr "在 %s 註冊成功。" -#: ../coreapi/callbacks.c:1008 +#: ../coreapi/callbacks.c:1009 #, c-format msgid "Unregistration on %s done." msgstr "在 %s 取消註冊完成。" -#: ../coreapi/callbacks.c:1026 +#: ../coreapi/callbacks.c:1027 msgid "no response timeout" msgstr "沒有回應逾時" -#: ../coreapi/callbacks.c:1029 +#: ../coreapi/callbacks.c:1030 #, c-format msgid "Registration on %s failed: %s" msgstr "在 %s 註冊失敗:%s" -#: ../coreapi/callbacks.c:1036 +#: ../coreapi/callbacks.c:1037 msgid "Service unavailable, retrying" msgstr "" @@ -1996,11 +2025,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1312 +#: ../coreapi/linphonecall.c:1314 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3826 +#: ../coreapi/linphonecall.c:3904 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." From e7dd35efa0f0d250db66fadb11994b4f48e088b1 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 24 Aug 2015 16:58:20 +0200 Subject: [PATCH 091/134] Fixed XOR encryption for custom RTP transport modifier tests --- tester/call_tester.c | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/tester/call_tester.c b/tester/call_tester.c index 1291d7612..d7129418a 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -4437,17 +4437,34 @@ typedef struct _RtpTransportModifierData { uint64_t packetReceivedCount; } RtpTransportModifierData; +const char *XOR_KEY = "BELLEDONNECOMMUNICATIONS"; + // Callback called when a packet is on it's way to be sent // This is where we can do some changes on it, like encrypt it static int rtptm_on_send(RtpTransportModifier *rtptm, mblk_t *msg) { RtpTransportModifierData *data = rtptm->data; rtp_header_t *rtp = (rtp_header_t*)msg->b_rptr; + int i = 0; + unsigned char *src; + int size = 0; if (rtp->version == 0) { // This is probably a STUN packet, so don't count it (oRTP won't) and don't encrypt it either return msgdsize(msg); } + // Mediastream can create a mblk_t with only the RTP header and setting the b_cont pointer to the actual RTP content buffer + // In this scenario, the result of rtp_get_payload will be 0, and we won't be able to do our XOR encryption on the payload + // The call to msgpullup will trigger a memcpy of the header and the payload in the same buffer in the msg mblk_t + msgpullup(msg, -1); + // Now that the mblk_t buffer directly contains the header and the payload, we can get the size of the payload and a pointer to it's start (we don't encrypt the RTP header) + size = rtp_get_payload(msg, &src); + + // Just for fun, let's do a XOR encryption + for (i = 0; i < size; i++) { + src[i] ^= (unsigned char) XOR_KEY[i % strlen(XOR_KEY)]; + } + data->packetSentCount += 1; /* /!\ DO NOT RETURN 0 or the packet will never leave /!\ */ @@ -4459,15 +4476,27 @@ static int rtptm_on_send(RtpTransportModifier *rtptm, mblk_t *msg) { static int rtptm_on_receive(RtpTransportModifier *rtptm, mblk_t *msg) { RtpTransportModifierData *data = rtptm->data; rtp_header_t *rtp = (rtp_header_t*)msg->b_rptr; + int i = 0; + unsigned char *src; + int size = 0; if (rtp->version == 0) { // This is probably a STUN packet, so don't count it (oRTP won't) and don't decrypt it either return msgdsize(msg); } + // On the receiving side, there is no need for a msgpullup, the mblk_t contains the header and the payload in the same buffer + // We just ask for the size and a pointer to the payload buffer + size = rtp_get_payload(msg, &src); + + // Since we did a XOR encryption on the send side, we have to do it again to decrypt the payload + for (i = 0; i < size; i++) { + src[i] ^= (unsigned char) XOR_KEY[i % strlen(XOR_KEY)]; + } + data->packetReceivedCount += 1; - /* /!\ DO NOT RETURN 0 or the packet willbe dropped /!\ */ + /* /!\ DO NOT RETURN 0 or the packet will be dropped /!\ */ return msgdsize(msg); } @@ -4597,7 +4626,7 @@ static void custom_rtp_modifier(bool_t pauseResumeTest, bool_t recordTest) { player = linphone_call_get_player(call_pauline); BC_ASSERT_PTR_NOT_NULL(player); if (player) { - // This will ask marie to play the file + // This will ask pauline to play the file BC_ASSERT_EQUAL(linphone_player_open(player, hellopath, on_eof, pauline),0, int, "%d"); BC_ASSERT_EQUAL(linphone_player_start(player), 0, int, "%d"); } @@ -4608,6 +4637,7 @@ static void custom_rtp_modifier(bool_t pauseResumeTest, bool_t recordTest) { end_call(pauline, marie); + // Now we compute a similarity factor between the original file and the one we recorded on the callee side BC_ASSERT_EQUAL(ms_audio_diff(hellopath, recordpath, &similar, audio_cmp_max_shift, NULL, NULL), 0, int, "%d"); BC_ASSERT_GREATER(similar, threshold, double, "%g"); @@ -4635,7 +4665,7 @@ static void custom_rtp_modifier(bool_t pauseResumeTest, bool_t recordTest) { ms_message("Marie sent %" PRIu64 " RTP packets and received %" PRIu64 " (through our modifier)", data_marie->packetSentCount, data_marie->packetReceivedCount); ms_message("Pauline sent %" PRIu64 " RTP packets and received %" PRIu64 " (through our modifier)", data_pauline->packetSentCount, data_pauline->packetReceivedCount); // There will be a few RTP packets sent on marie's side before the call is ended at pauline's request, so we need the threshold - BC_ASSERT_TRUE(MAX(data_pauline->packetReceivedCount, data_marie->packetSentCount) - MIN(data_pauline->packetReceivedCount, data_marie->packetSentCount) < 50); + BC_ASSERT_TRUE(data_marie->packetSentCount - data_pauline->packetReceivedCount < 50); BC_ASSERT_TRUE(data_marie->packetReceivedCount == data_pauline->packetSentCount); // At this point, we know each packet that has been processed in the send callback of our RTP modifier also go through the recv callback of the remote. From 6164259e98ace64ed8aaa6978dd8079bd9eafdc9 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 24 Aug 2015 18:27:41 +0200 Subject: [PATCH 092/134] fix windows build (pri64 isn't portable) --- tester/call_tester.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tester/call_tester.c b/tester/call_tester.c index d7129418a..a4392901d 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -4662,8 +4662,8 @@ static void custom_rtp_modifier(bool_t pauseResumeTest, bool_t recordTest) { BC_ASSERT_PTR_NOT_NULL(data_marie); BC_ASSERT_PTR_NOT_NULL(data_pauline); - ms_message("Marie sent %" PRIu64 " RTP packets and received %" PRIu64 " (through our modifier)", data_marie->packetSentCount, data_marie->packetReceivedCount); - ms_message("Pauline sent %" PRIu64 " RTP packets and received %" PRIu64 " (through our modifier)", data_pauline->packetSentCount, data_pauline->packetReceivedCount); + ms_message("Marie sent %i RTP packets and received %i (through our modifier)", (int)data_marie->packetSentCount, (int)data_marie->packetReceivedCount); + ms_message("Pauline sent %i RTP packets and received %i (through our modifier)", (int)data_pauline->packetSentCount, (int)data_pauline->packetReceivedCount); // There will be a few RTP packets sent on marie's side before the call is ended at pauline's request, so we need the threshold BC_ASSERT_TRUE(data_marie->packetSentCount - data_pauline->packetReceivedCount < 50); BC_ASSERT_TRUE(data_marie->packetReceivedCount == data_pauline->packetSentCount); @@ -4675,8 +4675,8 @@ static void custom_rtp_modifier(bool_t pauseResumeTest, bool_t recordTest) { const LinphoneCallStats *pauline_stats = linphone_call_get_audio_stats(call_pauline); rtp_stats_t marie_rtp_stats = linphone_call_stats_get_rtp_stats(marie_stats); rtp_stats_t pauline_rtp_stats = linphone_call_stats_get_rtp_stats(pauline_stats); - ms_message("Marie sent %" PRIu64 " RTP packets and received %" PRIu64 " (for real)", marie_rtp_stats.packet_sent, marie_rtp_stats.packet_recv); - ms_message("Pauline sent %" PRIu64 " RTP packets and received %" PRIu64 " (for real)", pauline_rtp_stats.packet_sent, pauline_rtp_stats.packet_recv); + ms_message("Marie sent %i RTP packets and received %i (for real)", (int)marie_rtp_stats.packet_sent, (int)marie_rtp_stats.packet_recv); + ms_message("Pauline sent %i RTP packets and received %i (for real)", (int)pauline_rtp_stats.packet_sent, (int)pauline_rtp_stats.packet_recv); BC_ASSERT_TRUE(data_marie->packetReceivedCount == marie_rtp_stats.packet_recv); BC_ASSERT_TRUE(data_marie->packetSentCount == marie_rtp_stats.packet_sent); BC_ASSERT_TRUE(data_pauline->packetReceivedCount == pauline_rtp_stats.packet_recv); From 853c89a6e3641a0bbc64f547933c429aa550dc2d Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Tue, 25 Aug 2015 10:37:02 +0200 Subject: [PATCH 093/134] Update ms2 submodule. --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 2fcbd0776..efcf75600 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 2fcbd0776bcd712f566be5d1e8f053142723e91d +Subproject commit efcf75600836a23f4c5c4bc364cace6dcf33285e From af43ad89650f70ce5e2fb4a45287aabbdd9b63d6 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Tue, 25 Aug 2015 10:11:34 +0200 Subject: [PATCH 094/134] proxy.c: fix crash in linphone_core_interpret_url when username is NULL and do not copy parameters when using proxy's domain --- coreapi/linphonecore.c | 15 --------------- coreapi/linphonecore.h | 29 ++++++++++++++++++++++------- coreapi/proxy.c | 5 +++-- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 618322a2b..199187550 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -2925,21 +2925,6 @@ void linphone_configure_op(LinphoneCore *lc, SalOp *op, const LinphoneAddress *d sal_op_cnx_ip_to_0000_if_sendonly_enable(op,lp_config_get_default_int(lc->config,"sip","cnx_ip_to_0000_if_sendonly_enabled",0)); /*also set in linphone_call_new_incoming*/ } -/** - * Initiates an outgoing call given a destination LinphoneAddress - * - * @ingroup call_control - * @param lc the LinphoneCore object - * @param addr the destination of the call (sip address). - @param params call parameters - * - * The LinphoneAddress can be constructed directly using linphone_address_new(), or - * created by linphone_core_interpret_url(). - * The application doesn't own a reference to the returned LinphoneCall object. - * Use linphone_call_ref() to safely keep the LinphoneCall pointer valid within your application. - * - * @return a LinphoneCall object or NULL in case of failure -**/ LinphoneCall * linphone_core_invite_address_with_params(LinphoneCore *lc, const LinphoneAddress *addr, const LinphoneCallParams *params) { const char *from=NULL; diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 141fc9b5d..baf23442f 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -723,7 +723,7 @@ LINPHONE_PUBLIC const char *linphone_call_get_remote_contact(LinphoneCall *call) /** * Get the mesured playback volume level. - * + * * @param call The call. * @return float Volume level in percentage. */ @@ -731,7 +731,7 @@ LINPHONE_PUBLIC float linphone_call_get_play_volume(LinphoneCall *call); /** * Get the mesured record volume level - * + * * @param call The call. * @return float Volume level in percentage. */ @@ -741,7 +741,7 @@ LINPHONE_PUBLIC float linphone_call_get_record_volume(LinphoneCall *call); * Get speaker volume gain. * If the sound backend supports it, the returned gain is equal to the gain set * with the system mixer. - * + * * @param call The call. * @return Percenatge of the max supported volume gain. Valid values are in [ 0.0 : 1.0 ]. * In case of failure, a negative value is returned @@ -751,7 +751,7 @@ LINPHONE_PUBLIC float linphone_call_get_speaker_volume_gain(const LinphoneCall * /** * Set speaker volume gain. * If the sound backend supports it, the new gain will synchronized with the system mixer. - * + * * @param call The call. * @param volume Percentage of the max supported gain. Valid values are in [ 0.0 : 1.0 ]. */ @@ -761,7 +761,7 @@ LINPHONE_PUBLIC void linphone_call_set_speaker_volume_gain(LinphoneCall *call, f * Get microphone volume gain. * If the sound backend supports it, the returned gain is equal to the gain set * with the system mixer. - * + * * @param call The call. * @return double Percenatge of the max supported volume gain. Valid values are in [ 0.0 : 1.0 ]. * In case of failure, a negative value is returned @@ -771,7 +771,7 @@ LINPHONE_PUBLIC float linphone_call_get_microphone_volume_gain(const LinphoneCal /** * Set microphone volume gain. * If the sound backend supports it, the new gain will synchronized with the system mixer. - * + * * @param call The call. * @param volume Percentage of the max supported gain. Valid values are in [ 0.0 : 1.0 ]. */ @@ -896,7 +896,7 @@ typedef enum _LinphoneAudioRoute LinphoneAudioRoute; * Change the playback output device (currently only used for blackberry) * @param call * @param route the wanted audio route (earpiece, speaker, ...) - * + * * @ingroup call_control **/ LINPHONE_PUBLIC void linphone_call_set_audio_route(LinphoneCall *call, LinphoneAudioRoute route); @@ -2319,6 +2319,21 @@ LINPHONE_PUBLIC LinphoneCall * linphone_core_invite_address(LinphoneCore *lc, co LINPHONE_PUBLIC LinphoneCall * linphone_core_invite_with_params(LinphoneCore *lc, const char *url, const LinphoneCallParams *params); +/** + * Initiates an outgoing call given a destination LinphoneAddress + * + * @ingroup call_control + * @param lc the LinphoneCore object + * @param addr the destination of the call (sip address). + @param params call parameters + * + * The LinphoneAddress can be constructed directly using linphone_address_new(), or + * created by linphone_core_interpret_url(). + * The application doesn't own a reference to the returned LinphoneCall object. + * Use linphone_call_ref() to safely keep the LinphoneCall pointer valid within your application. + * + * @return a LinphoneCall object or NULL in case of failure +**/ LINPHONE_PUBLIC LinphoneCall * linphone_core_invite_address_with_params(LinphoneCore *lc, const LinphoneAddress *addr, const LinphoneCallParams *params); LINPHONE_PUBLIC int linphone_core_transfer_call(LinphoneCore *lc, LinphoneCall *call, const char *refer_to); diff --git a/coreapi/proxy.c b/coreapi/proxy.c index 40ef6a0b0..5378236a1 100644 --- a/coreapi/proxy.c +++ b/coreapi/proxy.c @@ -1003,7 +1003,7 @@ LinphoneAddress* linphone_proxy_config_normalize_sip_uri(LinphoneProxyConfig *pr char *tmpurl; LinphoneAddress *uri; - if (*username=='\0') return NULL; + if (!username || *username=='\0') return NULL; if (is_enum(username,&enum_domain)){ if (proxy) { @@ -1036,8 +1036,9 @@ LinphoneAddress* linphone_proxy_config_normalize_sip_uri(LinphoneProxyConfig *pr } if (proxy!=NULL){ - /* append the proxy domain suffix */ + /* append the proxy domain suffix but remove any custom parameters/headers */ LinphoneAddress *uri=linphone_address_clone(linphone_proxy_config_get_identity_address(proxy)); + linphone_address_clean(uri); if (uri==NULL){ return NULL; } else { From e76c7b9c74900436ba101f92871991920bbb73e1 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Tue, 25 Aug 2015 17:01:21 +0200 Subject: [PATCH 095/134] Update ms2 submodule. --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index efcf75600..af7ce026a 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit efcf75600836a23f4c5c4bc364cace6dcf33285e +Subproject commit af7ce026aef8163f3b85e66c955394f38cb348de From 3f7577a6abf02a2c55c72732272c5bd0c2c0d36b Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 26 Aug 2015 14:46:22 +0200 Subject: [PATCH 096/134] fix potential bug because internal_call_update flag was never reset. --- coreapi/TunnelManager.hh | 2 +- coreapi/callbacks.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/coreapi/TunnelManager.hh b/coreapi/TunnelManager.hh index fdda28beb..f8002ee5d 100644 --- a/coreapi/TunnelManager.hh +++ b/coreapi/TunnelManager.hh @@ -56,7 +56,7 @@ namespace belledonnecomm { * @param ip tunnel server ip address * @param port tunnel server tls port, recommended value is 443 * @param udpMirrorPort remote port on the tunnel server side used to test udp reachability - * @param delay udp packet round trip delay in ms considered as acceptable. recommanded value is 1000 ms. + * @param delay udp packet round trip delay in ms considered as acceptable. recommended value is 1000 ms. */ void addServer(const char *ip, int port,unsigned int udpMirrorPort,unsigned int delay); /** diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index 041f36d5b..03611b2cf 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -495,13 +495,16 @@ static void call_accepted(SalOp *op){ SalMediaDescription *md, *rmd; bool_t update_state=TRUE; - if (call==NULL){ + if (call == NULL){ ms_warning("No call to accept."); return ; } rmd=sal_call_get_remote_media_description(op); /*set privacy*/ call->current_params->privacy=(LinphonePrivacyMask)sal_op_get_privacy(call->op); + /*reset the internal call update flag, so it doesn't risk to be copied and used in further re-INVITEs*/ + if (call->params->internal_call_update) + call->params->internal_call_update = FALSE; /* Handle remote ICE attributes if any. */ if (call->ice_session != NULL && rmd) { @@ -580,8 +583,6 @@ static void call_accepted(SalOp *op){ } } linphone_core_update_streams(lc,call,md); - /*also reflect the change if the "wished" params, in order to avoid to propose SAVP or video again - * further in the call, for example during pause,resume, conferencing reINVITEs*/ linphone_call_fix_call_parameters(call); if (!call->current_params->in_conference) lc->current_call=call; From 34e9384ff15610af1ca2314f4332e183c3658d55 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Wed, 26 Aug 2015 15:46:10 +0200 Subject: [PATCH 097/134] Update ms2 submodule. --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index af7ce026a..b0adfa47d 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit af7ce026aef8163f3b85e66c955394f38cb348de +Subproject commit b0adfa47d77be66832a946de08ab62a641f50ab5 From 5c1ba58c7b35c3a052eb1674bba3b8156e721c22 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Thu, 27 Aug 2015 14:31:05 +0200 Subject: [PATCH 098/134] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index b0adfa47d..49c7da35e 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit b0adfa47d77be66832a946de08ab62a641f50ab5 +Subproject commit 49c7da35e6f1933a6dcb56351232bd94b02b6f4d From e137936fb34e68ae5116b546e811c73ef35344ec Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Fri, 28 Aug 2015 09:20:16 +0200 Subject: [PATCH 099/134] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 49c7da35e..71792d5c2 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 49c7da35e6f1933a6dcb56351232bd94b02b6f4d +Subproject commit 71792d5c28b34935f0e46508040b73580f0e84cf From b181c9b666287c1ce01326c100a66bc8899355ba Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Fri, 28 Aug 2015 15:12:31 +0200 Subject: [PATCH 100/134] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 71792d5c2..cc7b95a65 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 71792d5c28b34935f0e46508040b73580f0e84cf +Subproject commit cc7b95a651334866e3dd6bbf0cebaad8420180e3 From cef38468a641acea0654b1b5c85c83ec584a504d Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Fri, 28 Aug 2015 18:43:45 +0200 Subject: [PATCH 101/134] Fix little memory leak of the chat database filename. --- gtk/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtk/main.c b/gtk/main.c index ec4df4002..8992feaed 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -2214,8 +2214,8 @@ core_start: linphone_core_enable_logs_with_cb(linphone_gtk_log_handler); db_file=linphone_gtk_message_storage_get_db_file(NULL); - linphone_gtk_init_liblinphone(config_file, factory_config_file, db_file); + free(db_file); /* do not lower timeouts under 30 ms because it exhibits a bug on gtk+/win32, with cpu running 20% all the time...*/ gtk_timeout_add(30,(GtkFunction)linphone_gtk_iterate,(gpointer)linphone_gtk_get_core()); From 17c1072595258edfd1057fe8aa911f06716feed6 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sat, 29 Aug 2015 01:49:03 +0200 Subject: [PATCH 102/134] fix compilation warning --- gtk/chat.c | 8 +++----- gtk/linphone.h | 2 +- gtk/main.c | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/gtk/chat.c b/gtk/chat.c index 05f13afe3..3f3670e75 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -31,13 +31,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define CONFIG_FILE ".linphone-history.db" -const char *linphone_gtk_message_storage_get_db_file(const char *filename){ +char *linphone_gtk_message_storage_get_db_file(const char *filename){ const int path_max=1024; - static char *db_file=NULL; + char *db_file=NULL; - if (db_file) return db_file; - - db_file=(char *)malloc(path_max*sizeof(char)); + db_file=(char *)g_malloc(path_max*sizeof(char)); if (filename==NULL) filename=CONFIG_FILE; /*try accessing a local file first if exists*/ if (access(CONFIG_FILE,F_OK)==0){ diff --git a/gtk/linphone.h b/gtk/linphone.h index f931f1cf3..0f992bf2a 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -100,7 +100,7 @@ LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_window(const char *window_name, G LINPHONE_PUBLIC GtkWidget *linphone_gtk_get_widget(GtkWidget *window, const char *name); LINPHONE_PUBLIC GtkWidget *linphone_gtk_create_widget(const char* widget_name); -const char *linphone_gtk_message_storage_get_db_file(const char *filename); +char *linphone_gtk_message_storage_get_db_file(const char *filename); LINPHONE_PUBLIC void linphone_gtk_show_assistant(GtkWidget* parent); LINPHONE_PUBLIC void linphone_gtk_close_assistant(void); diff --git a/gtk/main.c b/gtk/main.c index 8992feaed..af4d13d80 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -2063,7 +2063,7 @@ int main(int argc, char *argv[]){ GdkPixbuf *pbuf; const char *app_name="Linphone"; LpConfig *factory; - const char *db_file; + char *db_file; GError *error=NULL; const char *tmp; @@ -2215,7 +2215,7 @@ core_start: db_file=linphone_gtk_message_storage_get_db_file(NULL); linphone_gtk_init_liblinphone(config_file, factory_config_file, db_file); - free(db_file); + g_free(db_file); /* do not lower timeouts under 30 ms because it exhibits a bug on gtk+/win32, with cpu running 20% all the time...*/ gtk_timeout_add(30,(GtkFunction)linphone_gtk_iterate,(gpointer)linphone_gtk_get_core()); From 0ab32ee0710e8a1365aecc861c9885c66ab7c1d4 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sat, 29 Aug 2015 01:50:04 +0200 Subject: [PATCH 103/134] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index cc7b95a65..3a3e95052 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit cc7b95a651334866e3dd6bbf0cebaad8420180e3 +Subproject commit 3a3e9505237dfc8228ae7185ba98ed641fccadde From a2e6dc9e42bbaf8825502e8951df877038065b98 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Mon, 31 Aug 2015 18:05:17 +0200 Subject: [PATCH 104/134] More resilient libtoolize path detection --- autogen.sh | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/autogen.sh b/autogen.sh index 72c4f66b6..b245167ec 100755 --- a/autogen.sh +++ b/autogen.sh @@ -16,12 +16,18 @@ else AUTOMAKE=automake-${AM_VERSION} fi -if test -f /opt/local/bin/glibtoolize ; then - # darwin - LIBTOOLIZE=/opt/local/bin/glibtoolize -else - LIBTOOLIZE=libtoolize -fi +LIBTOOLIZE="libtoolize" +for lt in glibtoolize libtoolize15 libtoolize14 libtoolize13 ; do + if test -x /usr/bin/$lt ; then + LIBTOOLIZE=$lt ; break + fi + if test -x /usr/local/bin/$lt ; then + LIBTOOLIZE=$lt ; break + fi + if test -x /opt/local/bin/$lt ; then + LIBTOOLIZE=$lt ; break + fi +done if test -d /opt/local/share/aclocal ; then ACLOCAL_ARGS="-I /opt/local/share/aclocal" From 73430e1698e7410580221874123cd68952fefa8f Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Tue, 1 Sep 2015 14:24:58 +0200 Subject: [PATCH 105/134] CMake: add HAVE_LIBUDEV_H detection on Linux --- CMakeLists.txt | 4 ++++ config.h.cmake | 1 + gtk/CMakeLists.txt | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 737c15648..56329f10b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -141,6 +141,10 @@ if(ENABLE_NLS) include_directories(${INTL_INCLUDE_DIRS}) endif() +if(UNIX AND NOT APPLE) + include(CheckIncludeFiles) + check_include_files(libudev.h HAVE_LIBUDEV_H) +endif() include_directories( include/ diff --git a/config.h.cmake b/config.h.cmake index 831bfe181..35d7e2ac9 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -42,4 +42,5 @@ #cmakedefine HAVE_ZLIB 1 #cmakedefine HAVE_CU_GET_SUITE 1 #cmakedefine HAVE_CU_CURSES 1 +#cmakedefine HAVE_LIBUDEV_H 0 #cmakedefine ENABLE_NLS 1 diff --git a/gtk/CMakeLists.txt b/gtk/CMakeLists.txt index 9808e441a..5bd36140d 100644 --- a/gtk/CMakeLists.txt +++ b/gtk/CMakeLists.txt @@ -97,6 +97,10 @@ if(ENABLE_NOTIFY) target_link_libraries(linphone-gtk ${NOTIFY_LIBRARIES}) endif() +if (HAVE_LIBUDEV_H) + target_link_libraries(linphone-gtk udev) +endif() + install(TARGETS linphone-gtk RUNTIME DESTINATION bin LIBRARY DESTINATION lib From a722c765153c7f0065ccca1137c7b4d97294477f Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Tue, 1 Sep 2015 16:17:47 +0200 Subject: [PATCH 106/134] message_storage.c: minor refactoring --- coreapi/message_storage.c | 55 +++++++++++++++++++-------------------- mediastreamer2 | 2 +- 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/coreapi/message_storage.c b/coreapi/message_storage.c index 9f55b3ec1..4443e1c68 100644 --- a/coreapi/message_storage.c +++ b/coreapi/message_storage.c @@ -94,6 +94,16 @@ static void fetch_content_from_database(sqlite3 *db, LinphoneChatMessage *messag sqlite3_free(buf); } + + +// Called when fetching all conversations from database +static int callback_all(void *data, int argc, char **argv, char **colName){ + LinphoneCore* lc = (LinphoneCore*) data; + char* address = argv[0]; + linphone_core_get_or_create_chat_room(lc, address); + return 0; +} + /* DB layout: * | 0 | storage_id * | 1 | localContact @@ -108,10 +118,12 @@ static void fetch_content_from_database(sqlite3 *db, LinphoneChatMessage *messag * | 10 | app data text * | 11 | linphone content */ -static void create_chat_message(char **argv, void *data){ +static int create_chat_message(void *data, int argc, char **argv, char **colName){ LinphoneChatRoom *cr = (LinphoneChatRoom *)data; LinphoneAddress *from; LinphoneAddress *to; + uint64_t begin, end; + begin=ortp_get_cur_time_ms(); unsigned int storage_id = atoi(argv[0]); @@ -136,17 +148,12 @@ static void create_chat_message(char **argv, void *data){ linphone_address_destroy(to); } - if( argv[9] != NULL ){ - new_message->time = (time_t)atol(argv[9]); - } else { - new_message->time = time(NULL); - } - + new_message->time = (time_t)atol(argv[9]); new_message->is_read=atoi(argv[6]); new_message->state=atoi(argv[7]); new_message->storage_id=storage_id; - new_message->external_body_url= argv[8] ? ms_strdup(argv[8]) : NULL; - new_message->appdata = argv[10]? ms_strdup(argv[10]) : NULL; + new_message->external_body_url= ms_strdup(argv[8]); + new_message->appdata = ms_strdup(argv[10]); if (argv[11] != NULL) { int id = atoi(argv[11]); @@ -156,25 +163,17 @@ static void create_chat_message(char **argv, void *data){ } } cr->messages_hist=ms_list_prepend(cr->messages_hist,new_message); -} -// Called when fetching all conversations from database -static int callback_all(void *data, int argc, char **argv, char **colName){ - LinphoneCore* lc = (LinphoneCore*) data; - char* address = argv[0]; - linphone_core_get_or_create_chat_room(lc, address); - return 0; -} + end=ortp_get_cur_time_ms(); + ms_message("\t%s(): completed in %i ms",__FUNCTION__, (int)(end-begin)); -static int callback(void *data, int argc, char **argv, char **colName){ - create_chat_message(argv,data); return 0; } void linphone_sql_request_message(sqlite3 *db,const char *stmt,LinphoneChatRoom *cr){ char* errmsg=NULL; int ret; - ret=sqlite3_exec(db,stmt,callback,cr,&errmsg); + ret=sqlite3_exec(db,stmt,create_chat_message,cr,&errmsg); if(ret != SQLITE_OK) { ms_error("Error in creation: %s.", errmsg); sqlite3_free(errmsg); @@ -287,7 +286,7 @@ void linphone_chat_room_mark_as_read(LinphoneChatRoom *cr){ char *buf; if (lc->db==NULL) return ; - + // optimization: do not modify the database if no message is marked as unread if(linphone_chat_room_get_unread_messages_count(cr) == 0) return; @@ -297,7 +296,7 @@ void linphone_chat_room_mark_as_read(LinphoneChatRoom *cr){ linphone_sql_request(lc->db,buf); sqlite3_free(buf); ms_free(peer); - + cr->unread_count = 0; } @@ -321,7 +320,7 @@ static int linphone_chat_room_get_messages_count(LinphoneChatRoom *cr, bool_t un int returnValue; if (lc->db==NULL) return 0; - + // optimization: do not read database if the count is already available in memory if(unread_only && cr->unread_count >= 0) return cr->unread_count; @@ -336,11 +335,11 @@ static int linphone_chat_room_get_messages_count(LinphoneChatRoom *cr, bool_t un sqlite3_finalize(selectStatement); sqlite3_free(buf); ms_free(peer); - + /* no need to test the sign of cr->unread_count here * because it has been tested above */ if(unread_only) cr->unread_count = numrows; - + return numrows; } @@ -361,7 +360,7 @@ void linphone_chat_room_delete_message(LinphoneChatRoom *cr, LinphoneChatMessage buf=sqlite3_mprintf("DELETE FROM history WHERE id = %i;", msg->storage_id); linphone_sql_request(lc->db,buf); sqlite3_free(buf); - + if(cr->unread_count >= 0 && !msg->is_read) { assert(cr->unread_count > 0); cr->unread_count--; @@ -380,7 +379,7 @@ void linphone_chat_room_delete_history(LinphoneChatRoom *cr){ linphone_sql_request(lc->db,buf); sqlite3_free(buf); ms_free(peer); - + if(cr->unread_count > 0) cr->unread_count = 0; } @@ -627,7 +626,7 @@ static int _linphone_sqlite3_open(const char *db_file, sqlite3 **db) { char *inbuf=db_file_locale, *outbuf=db_file_utf8; size_t inbyteleft = MAX_PATH_SIZE, outbyteleft = MAX_PATH_SIZE; iconv_t cb; - + strncpy(db_file_locale, db_file, MAX_PATH_SIZE-1); cb = iconv_open("UTF-8", nl_langinfo(CODESET)); if(cb != (iconv_t)-1) { diff --git a/mediastreamer2 b/mediastreamer2 index 3a3e95052..29eca39f7 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 3a3e9505237dfc8228ae7185ba98ed641fccadde +Subproject commit 29eca39f7ecd0cc192e9d43f8d90cb486b7dd6fb From bce114c25a1f76e900c9e5adb7c4fde496a62fd6 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 2 Sep 2015 09:36:31 +0200 Subject: [PATCH 107/134] message_storage.c: fix previous commit, remove debug code --- coreapi/message_storage.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/coreapi/message_storage.c b/coreapi/message_storage.c index 4443e1c68..c1128a79f 100644 --- a/coreapi/message_storage.c +++ b/coreapi/message_storage.c @@ -122,9 +122,6 @@ static int create_chat_message(void *data, int argc, char **argv, char **colName LinphoneChatRoom *cr = (LinphoneChatRoom *)data; LinphoneAddress *from; LinphoneAddress *to; - uint64_t begin, end; - begin=ortp_get_cur_time_ms(); - unsigned int storage_id = atoi(argv[0]); // check if the message exists in the transient list, in which case we should return that one. @@ -164,9 +161,6 @@ static int create_chat_message(void *data, int argc, char **argv, char **colName } cr->messages_hist=ms_list_prepend(cr->messages_hist,new_message); - end=ortp_get_cur_time_ms(); - ms_message("\t%s(): completed in %i ms",__FUNCTION__, (int)(end-begin)); - return 0; } From fff66504ba3a771e5eb62edf36678341316f28ed Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 2 Sep 2015 10:48:15 +0200 Subject: [PATCH 108/134] gtk: reload sound and video devices each time multimedia settings are opened to detect new devices at runtime (experimental / not perfect though..) --- gtk/linphone.h | 3 +++ gtk/parameters.ui | 1 + gtk/propertybox.c | 28 ++++++++++++++++++++-------- mediastreamer2 | 2 +- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/gtk/linphone.h b/gtk/linphone.h index 0f992bf2a..618f1590e 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -334,3 +334,6 @@ LINPHONE_PUBLIC void linphone_gtk_proxy_cancel(GtkButton *button); LINPHONE_PUBLIC void linphone_gtk_proxy_address_changed(GtkEditable *editable); LINPHONE_PUBLIC void linphone_gtk_proxy_transport_changed(GtkWidget *combo); LINPHONE_PUBLIC void linphone_gtk_tunnel_ok(GtkButton *button); +LINPHONE_PUBLIC void linphone_gtk_notebook_current_page_changed(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data); +LINPHONE_PUBLIC void linphone_gtk_reload_sound_devices(void); +LINPHONE_PUBLIC void linphone_gtk_reload_video_devices(void); diff --git a/gtk/parameters.ui b/gtk/parameters.ui index 2e783dcfa..32b12b69a 100644 --- a/gtk/parameters.ui +++ b/gtk/parameters.ui @@ -211,6 +211,7 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True diff --git a/gtk/propertybox.c b/gtk/propertybox.c index 4b181d9fd..59bdb2b06 100644 --- a/gtk/propertybox.c +++ b/gtk/propertybox.c @@ -557,9 +557,9 @@ static void bitrate_edited(GtkCellRendererText *renderer, gchar *path, gchar *ne GtkListStore *store=(GtkListStore*)userdata; GtkTreeIter iter; float newbitrate=0; - + if (!new_text) return; - + if (sscanf(new_text, "%f", &newbitrate)!=1) return; if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store),&iter,path)){ @@ -606,10 +606,10 @@ static void linphone_gtk_init_codec_list(GtkTreeView *listview){ "foreground",CODEC_COLOR, NULL); gtk_tree_view_append_column (listview, column); - + g_value_init(&editable, G_TYPE_BOOLEAN); g_value_set_boolean(&editable, TRUE); - + renderer = gtk_cell_renderer_text_new (); g_object_set_property(G_OBJECT(renderer), "editable", &editable); column = gtk_tree_view_column_new_with_attributes ( @@ -620,7 +620,7 @@ static void linphone_gtk_init_codec_list(GtkTreeView *listview){ NULL); g_signal_connect(G_OBJECT(renderer),"edited",G_CALLBACK(bitrate_edited),store); gtk_tree_view_append_column (listview, column); - + renderer = gtk_cell_renderer_text_new (); g_object_set_property(G_OBJECT(renderer), "editable", &editable); column = gtk_tree_view_column_new_with_attributes ( @@ -785,13 +785,13 @@ static void linphone_gtk_codec_move(GtkWidget *button, int dir, int type){ /* 0= if (gtk_tree_selection_count_selected_rows(sel) == 1){ MSList *sel_elem,*before; MSList *codec_list; - + GList *selected_rows = gtk_tree_selection_get_selected_rows(sel, &mod); gtk_tree_model_get_iter(mod, &iter, (GtkTreePath *)g_list_nth_data(selected_rows, 0)); gtk_tree_model_get(mod,&iter,CODEC_PRIVDATA,&pt,-1); g_list_foreach(selected_rows, _g_list_func_destroy_tree_path, NULL); g_list_free(selected_rows); - + if (pt->type==PAYLOAD_VIDEO) codec_list=ms_list_copy(linphone_core_get_video_codecs(lc)); else codec_list=ms_list_copy(linphone_core_get_audio_codecs(lc)); @@ -887,7 +887,7 @@ void linphone_gtk_show_sip_accounts(GtkWidget *w){ GtkTreeSelection *select; const LinphoneProxyConfig *default_pc = linphone_core_get_default_proxy_config(linphone_gtk_get_core()); GtkTreePath *default_pc_path = NULL; - + const MSList *elem; if (!model){ GtkCellRenderer *renderer; @@ -1901,3 +1901,15 @@ void linphone_gtk_auto_answer_delay_changed(GtkSpinButton *spinbutton, gpointer int delay = gtk_spin_button_get_value(spinbutton); linphone_gtk_set_ui_config_int("auto_answer_delay", delay); } + +void linphone_gtk_notebook_current_page_changed (GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data) { +#ifndef HAVE_LIBUDEV_H + if (page_num == 1) { + // Multimedia settings - we reload audio and video devices to detect + // hot-plugged devices + g_message("Opened multimedia page... reloading audio and video devices!"); + linphone_gtk_reload_sound_devices(); + linphone_gtk_reload_video_devices(); + } +#endif +} diff --git a/mediastreamer2 b/mediastreamer2 index 29eca39f7..7a5e76c4d 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 29eca39f7ecd0cc192e9d43f8d90cb486b7dd6fb +Subproject commit 7a5e76c4d5f9bd1ff28cb7dad177af20269b6441 From 434907917e933737b31b93853019f3a8c7300675 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 2 Sep 2015 14:33:40 +0200 Subject: [PATCH 109/134] chat.c: properly clean filetransfer when it failed for io error and/or server issue --- coreapi/chat.c | 22 ++++------------------ coreapi/linphonecore.h | 14 +++++++------- coreapi/message_storage.c | 2 +- 3 files changed, 12 insertions(+), 26 deletions(-) diff --git a/coreapi/chat.c b/coreapi/chat.c index 362079682..0c8217733 100644 --- a/coreapi/chat.c +++ b/coreapi/chat.c @@ -106,26 +106,13 @@ static void _linphone_chat_room_send_message(LinphoneChatRoom *cr, LinphoneChatM static void process_io_error_upload(void *data, const belle_sip_io_error_event_t *event){ LinphoneChatMessage* msg=(LinphoneChatMessage *)data; - msg->state = LinphoneChatMessageStateNotDelivered; ms_error("I/O Error during file upload to %s - msg [%p] chat room[%p]", linphone_core_get_file_transfer_server(msg->chat_room->lc), msg, msg->chat_room); - if (msg->cb) { - msg->cb(msg, msg->state, msg->cb_ud); - } - - if (linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)) { - linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)(msg, msg->state); - } + linphone_chat_message_cancel_file_transfer(msg); } static void process_auth_requested_upload(void *data, belle_sip_auth_event_t *event){ LinphoneChatMessage* msg=(LinphoneChatMessage *)data; - msg->state = LinphoneChatMessageStateNotDelivered; - ms_error("Error during file upload : auth requested to connect %s - msg [%p] chat room[%p]", linphone_core_get_file_transfer_server(msg->chat_room->lc), msg, msg->chat_room); - if (msg->cb) { - msg->cb(msg, msg->state, msg->cb_ud); - } - if (linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)) { - linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)(msg, msg->state); - } + ms_error("Error during file upload: auth requested to connect %s - msg [%p] chat room[%p]", linphone_core_get_file_transfer_server(msg->chat_room->lc), msg, msg->chat_room); + linphone_chat_message_cancel_file_transfer(msg); } static void process_io_error_download(void *data, const belle_sip_io_error_event_t *event){ @@ -1404,7 +1391,6 @@ static void _linphone_chat_message_destroy(LinphoneChatMessage* msg) { ms_free(msg->file_transfer_filepath); } linphone_chat_message_cbs_unref(msg->callbacks); - ms_message("LinphoneChatMessage [%p] destroyed.",msg); } LinphoneChatMessage * linphone_chat_message_ref(LinphoneChatMessage *msg){ @@ -1440,7 +1426,7 @@ LinphoneChatMessageCbs * linphone_chat_message_get_callbacks(const LinphoneChatM return msg->callbacks; } -LinphoneChatMessage* linphone_chat_room_create_file_transfer_message(LinphoneChatRoom *cr, LinphoneContent* initial_content) { +LinphoneChatMessage* linphone_chat_room_create_file_transfer_message(LinphoneChatRoom *cr, const LinphoneContent* initial_content) { LinphoneChatMessage* msg = belle_sip_object_new(LinphoneChatMessage); msg->callbacks=linphone_chat_message_cbs_new(); msg->chat_room=(LinphoneChatRoom*)cr; diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index baf23442f..c35bc40ae 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -905,7 +905,7 @@ LINPHONE_PUBLIC void linphone_call_set_audio_route(LinphoneCall *call, LinphoneA * Returns the number of stream for the given call. * Currently there is only two (Audio, Video), but later there will be more. * @param call - * + * * @return 2 **/ LINPHONE_PUBLIC int linphone_call_get_stream_count(LinphoneCall *call); @@ -914,7 +914,7 @@ LINPHONE_PUBLIC int linphone_call_get_stream_count(LinphoneCall *call); * Returns the type of stream for the given stream index. * @param call * @param stream_index - * + * * @return MsAudio if stream_index = 0, MsVideo otherwise **/ LINPHONE_PUBLIC MSFormatType linphone_call_get_stream_type(LinphoneCall *call, int stream_index); @@ -923,7 +923,7 @@ LINPHONE_PUBLIC MSFormatType linphone_call_get_stream_type(LinphoneCall *call, i * Returns the meta rtp transport for the given stream index. * @param call * @param stream_index - * + * * @return a pointer to the meta rtp transport if it exists, NULL otherwise **/ LINPHONE_PUBLIC RtpTransport* linphone_call_get_meta_rtp_transport(LinphoneCall *call, int stream_index); @@ -932,7 +932,7 @@ LINPHONE_PUBLIC RtpTransport* linphone_call_get_meta_rtp_transport(LinphoneCall * Returns the meta rtcp transport for the given stream index. * @param call * @param stream_index - * + * * @return a pointer to the meta rtcp transport if it exists, NULL otherwise **/ LINPHONE_PUBLIC RtpTransport* linphone_call_get_meta_rtcp_transport(LinphoneCall *call, int stream_index); @@ -1333,17 +1333,17 @@ LINPHONE_PUBLIC void linphone_chat_room_set_user_data(LinphoneChatRoom *cr, void /** * Create a message attached to a dedicated chat room with a particular content. - * Use #linphone_chat_room_send_message2 to initiate the transfer + * Use #linphone_chat_room_send_message to initiate the transfer * @param cr the chat room. * @param initial_content #LinphoneContent initial content. #LinphoneCoreVTable.file_transfer_send is invoked later to notify file transfer progress and collect next chunk of the message if #LinphoneContent.data is NULL. * @return a new #LinphoneChatMessage */ -LINPHONE_PUBLIC LinphoneChatMessage* linphone_chat_room_create_file_transfer_message(LinphoneChatRoom *cr, LinphoneContent* initial_content); +LINPHONE_PUBLIC LinphoneChatMessage* linphone_chat_room_create_file_transfer_message(LinphoneChatRoom *cr, const LinphoneContent* initial_content); LINPHONE_PUBLIC const LinphoneAddress* linphone_chat_room_get_peer_address(LinphoneChatRoom *cr); /** * Send a message to peer member of this chat room. - * @deprecated linphone_chat_room_send_message2() gives more control on the message expedition. + * @deprecated Use linphone_chat_room_send_chat_message() instead. * @param cr #LinphoneChatRoom object * @param msg message to be sent */ diff --git a/coreapi/message_storage.c b/coreapi/message_storage.c index c1128a79f..ed9f6be34 100644 --- a/coreapi/message_storage.c +++ b/coreapi/message_storage.c @@ -116,7 +116,7 @@ static int callback_all(void *data, int argc, char **argv, char **colName){ * | 8 | external body url * | 9 | utc timestamp * | 10 | app data text - * | 11 | linphone content + * | 11 | linphone content id */ static int create_chat_message(void *data, int argc, char **argv, char **colName){ LinphoneChatRoom *cr = (LinphoneChatRoom *)data; From 08e923a41c73ce78826c3ef93e9107e89222ce40 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Thu, 3 Sep 2015 17:07:52 +0200 Subject: [PATCH 110/134] chat: fix crash when receiving message status notification AFTER having deleted the chat room --- coreapi/chat.c | 10 ++++++---- coreapi/message_storage.c | 10 ++++------ coreapi/private.h | 6 +++--- tester/message_tester.c | 12 ++++++++++++ 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/coreapi/chat.c b/coreapi/chat.c index 0c8217733..2f4199547 100644 --- a/coreapi/chat.c +++ b/coreapi/chat.c @@ -621,13 +621,15 @@ static void _linphone_chat_room_send_message(LinphoneChatRoom *cr, LinphoneChatM linphone_chat_message_unref(msg); } -void linphone_chat_message_update_state(LinphoneChatMessage* chat_msg ) { - linphone_chat_message_store_state(chat_msg); +void linphone_chat_message_update_state(LinphoneChatMessage* chat_msg, LinphoneCore* lc) { + linphone_chat_message_store_state(chat_msg, lc); if( chat_msg->state == LinphoneChatMessageStateDelivered || chat_msg->state == LinphoneChatMessageStateNotDelivered ){ // message is not transient anymore, we can remove it from our transient list and unref it : - chat_msg->chat_room->transient_messages = ms_list_remove(chat_msg->chat_room->transient_messages, chat_msg); + if (chat_msg->chat_room) { + chat_msg->chat_room->transient_messages = ms_list_remove(chat_msg->chat_room->transient_messages, chat_msg); + } linphone_chat_message_unref(chat_msg); } } @@ -1087,7 +1089,7 @@ void linphone_chat_message_set_appdata(LinphoneChatMessage* message, const char* ms_free(message->appdata); } message->appdata = data? ms_strdup(data) : NULL; - linphone_chat_message_store_appdata(message); + linphone_chat_message_store_appdata(message, message->chat_room->lc); } diff --git a/coreapi/message_storage.c b/coreapi/message_storage.c index ed9f6be34..2b58ffe1b 100644 --- a/coreapi/message_storage.c +++ b/coreapi/message_storage.c @@ -253,8 +253,7 @@ unsigned int linphone_chat_message_store(LinphoneChatMessage *msg){ return id; } -void linphone_chat_message_store_state(LinphoneChatMessage *msg){ - LinphoneCore *lc=msg->chat_room->lc; +void linphone_chat_message_store_state(LinphoneChatMessage *msg, LinphoneCore *lc){ if (lc->db){ char *buf=sqlite3_mprintf("UPDATE history SET status=%i WHERE (id = %i);", msg->state,msg->storage_id); @@ -263,8 +262,7 @@ void linphone_chat_message_store_state(LinphoneChatMessage *msg){ } } -void linphone_chat_message_store_appdata(LinphoneChatMessage* msg){ - LinphoneCore *lc=msg->chat_room->lc; +void linphone_chat_message_store_appdata(LinphoneChatMessage* msg, LinphoneCore *lc){ if (lc->db){ char *buf=sqlite3_mprintf("UPDATE history SET appdata=%Q WHERE id=%i;", msg->appdata,msg->storage_id); @@ -671,10 +669,10 @@ unsigned int linphone_chat_message_store(LinphoneChatMessage *cr){ return 0; } -void linphone_chat_message_store_state(LinphoneChatMessage *cr){ +void linphone_chat_message_store_state(LinphoneChatMessage *cr, LinphoneCore* lc)){ } -void linphone_chat_message_store_appdata(LinphoneChatMessage *msg){ +void linphone_chat_message_store_appdata(LinphoneChatMessage *msg, LinphoneCore *lc){ } void linphone_chat_room_mark_as_read(LinphoneChatRoom *cr){ diff --git a/coreapi/private.h b/coreapi/private.h index 12fd5b4c4..b6d0c7de1 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -79,7 +79,7 @@ extern "C" { #endif #include - + #ifndef _ #define _(String) dgettext(GETTEXT_PACKAGE,String) #endif @@ -962,8 +962,8 @@ void linphone_upnp_destroy(LinphoneCore *lc); sqlite3 * linphone_message_storage_init(); void linphone_message_storage_init_chat_rooms(LinphoneCore *lc); #endif -void linphone_chat_message_store_state(LinphoneChatMessage *msg); -void linphone_chat_message_store_appdata(LinphoneChatMessage* msg); +void linphone_chat_message_store_state(LinphoneChatMessage *msg, LinphoneCore* lc); +void linphone_chat_message_store_appdata(LinphoneChatMessage* msg, LinphoneCore *lc); void linphone_core_message_storage_init(LinphoneCore *lc); void linphone_core_message_storage_close(LinphoneCore *lc); void linphone_core_message_storage_set_debug(LinphoneCore *lc, bool_t debug); diff --git a/tester/message_tester.c b/tester/message_tester.c index 6ffaab17d..326cbde16 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -1692,7 +1692,17 @@ static void history_messages_count() { } + #endif +static void text_status_after_destroying_chat_room() { + LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); + LinphoneChatRoom *chatroom = linphone_core_get_chat_room_from_uri(marie->lc, ""); + LinphoneChatMessage *message = linphone_chat_room_create_message(chatroom, "hello"); + linphone_chat_room_send_chat_message(chatroom, message); + linphone_chat_room_unref(chatroom); + wait_for_until(marie->lc, NULL, &marie->stat.number_of_LinphoneMessageNotDelivered, 1, 1000); + linphone_core_manager_destroy(marie); +} test_t message_tests[] = { { "Text message", text_message }, @@ -1726,6 +1736,7 @@ test_t message_tests[] = { ,{ "History count", history_messages_count } ,{ "History range", history_range_full_test } #endif + ,{ "Text status after destroying chat room", text_status_after_destroying_chat_room }, }; test_suite_t message_test_suite = { @@ -1736,3 +1747,4 @@ test_suite_t message_test_suite = { message_tests }; + From 9f2b9df16a2f6537196a7f2ec8db792d63287a9d Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Thu, 3 Sep 2015 21:29:44 +0200 Subject: [PATCH 111/134] Revert "chat: fix crash when receiving message status notification AFTER having deleted the chat room" This reverts commit 08e923a41c73ce78826c3ef93e9107e89222ce40. This commit breaks compilation. --- coreapi/chat.c | 10 ++++------ coreapi/message_storage.c | 10 ++++++---- coreapi/private.h | 6 +++--- tester/message_tester.c | 12 ------------ 4 files changed, 13 insertions(+), 25 deletions(-) diff --git a/coreapi/chat.c b/coreapi/chat.c index 2f4199547..0c8217733 100644 --- a/coreapi/chat.c +++ b/coreapi/chat.c @@ -621,15 +621,13 @@ static void _linphone_chat_room_send_message(LinphoneChatRoom *cr, LinphoneChatM linphone_chat_message_unref(msg); } -void linphone_chat_message_update_state(LinphoneChatMessage* chat_msg, LinphoneCore* lc) { - linphone_chat_message_store_state(chat_msg, lc); +void linphone_chat_message_update_state(LinphoneChatMessage* chat_msg ) { + linphone_chat_message_store_state(chat_msg); if( chat_msg->state == LinphoneChatMessageStateDelivered || chat_msg->state == LinphoneChatMessageStateNotDelivered ){ // message is not transient anymore, we can remove it from our transient list and unref it : - if (chat_msg->chat_room) { - chat_msg->chat_room->transient_messages = ms_list_remove(chat_msg->chat_room->transient_messages, chat_msg); - } + chat_msg->chat_room->transient_messages = ms_list_remove(chat_msg->chat_room->transient_messages, chat_msg); linphone_chat_message_unref(chat_msg); } } @@ -1089,7 +1087,7 @@ void linphone_chat_message_set_appdata(LinphoneChatMessage* message, const char* ms_free(message->appdata); } message->appdata = data? ms_strdup(data) : NULL; - linphone_chat_message_store_appdata(message, message->chat_room->lc); + linphone_chat_message_store_appdata(message); } diff --git a/coreapi/message_storage.c b/coreapi/message_storage.c index 2b58ffe1b..ed9f6be34 100644 --- a/coreapi/message_storage.c +++ b/coreapi/message_storage.c @@ -253,7 +253,8 @@ unsigned int linphone_chat_message_store(LinphoneChatMessage *msg){ return id; } -void linphone_chat_message_store_state(LinphoneChatMessage *msg, LinphoneCore *lc){ +void linphone_chat_message_store_state(LinphoneChatMessage *msg){ + LinphoneCore *lc=msg->chat_room->lc; if (lc->db){ char *buf=sqlite3_mprintf("UPDATE history SET status=%i WHERE (id = %i);", msg->state,msg->storage_id); @@ -262,7 +263,8 @@ void linphone_chat_message_store_state(LinphoneChatMessage *msg, LinphoneCore *l } } -void linphone_chat_message_store_appdata(LinphoneChatMessage* msg, LinphoneCore *lc){ +void linphone_chat_message_store_appdata(LinphoneChatMessage* msg){ + LinphoneCore *lc=msg->chat_room->lc; if (lc->db){ char *buf=sqlite3_mprintf("UPDATE history SET appdata=%Q WHERE id=%i;", msg->appdata,msg->storage_id); @@ -669,10 +671,10 @@ unsigned int linphone_chat_message_store(LinphoneChatMessage *cr){ return 0; } -void linphone_chat_message_store_state(LinphoneChatMessage *cr, LinphoneCore* lc)){ +void linphone_chat_message_store_state(LinphoneChatMessage *cr){ } -void linphone_chat_message_store_appdata(LinphoneChatMessage *msg, LinphoneCore *lc){ +void linphone_chat_message_store_appdata(LinphoneChatMessage *msg){ } void linphone_chat_room_mark_as_read(LinphoneChatRoom *cr){ diff --git a/coreapi/private.h b/coreapi/private.h index b6d0c7de1..12fd5b4c4 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -79,7 +79,7 @@ extern "C" { #endif #include - + #ifndef _ #define _(String) dgettext(GETTEXT_PACKAGE,String) #endif @@ -962,8 +962,8 @@ void linphone_upnp_destroy(LinphoneCore *lc); sqlite3 * linphone_message_storage_init(); void linphone_message_storage_init_chat_rooms(LinphoneCore *lc); #endif -void linphone_chat_message_store_state(LinphoneChatMessage *msg, LinphoneCore* lc); -void linphone_chat_message_store_appdata(LinphoneChatMessage* msg, LinphoneCore *lc); +void linphone_chat_message_store_state(LinphoneChatMessage *msg); +void linphone_chat_message_store_appdata(LinphoneChatMessage* msg); void linphone_core_message_storage_init(LinphoneCore *lc); void linphone_core_message_storage_close(LinphoneCore *lc); void linphone_core_message_storage_set_debug(LinphoneCore *lc, bool_t debug); diff --git a/tester/message_tester.c b/tester/message_tester.c index 326cbde16..6ffaab17d 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -1692,17 +1692,7 @@ static void history_messages_count() { } - #endif -static void text_status_after_destroying_chat_room() { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneChatRoom *chatroom = linphone_core_get_chat_room_from_uri(marie->lc, ""); - LinphoneChatMessage *message = linphone_chat_room_create_message(chatroom, "hello"); - linphone_chat_room_send_chat_message(chatroom, message); - linphone_chat_room_unref(chatroom); - wait_for_until(marie->lc, NULL, &marie->stat.number_of_LinphoneMessageNotDelivered, 1, 1000); - linphone_core_manager_destroy(marie); -} test_t message_tests[] = { { "Text message", text_message }, @@ -1736,7 +1726,6 @@ test_t message_tests[] = { ,{ "History count", history_messages_count } ,{ "History range", history_range_full_test } #endif - ,{ "Text status after destroying chat room", text_status_after_destroying_chat_room }, }; test_suite_t message_test_suite = { @@ -1747,4 +1736,3 @@ test_suite_t message_test_suite = { message_tests }; - From ca9647f975709fa61afc66c1029de30382c7ca07 Mon Sep 17 00:00:00 2001 From: Margaux Clerc Date: Wed, 26 Aug 2015 16:33:45 +0200 Subject: [PATCH 112/134] Add new test for late offering --- coreapi/linphonecore.c | 1 + tester/call_tester.c | 87 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 199187550..9db9e82bf 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -3272,6 +3272,7 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho nextstate=LinphoneCallEarlyUpdating; break; case LinphoneCallStreamsRunning: + case LinphoneCallPaused: nextstate=LinphoneCallUpdating; break; default: diff --git a/tester/call_tester.c b/tester/call_tester.c index a4392901d..7b9eb36c5 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -4281,6 +4281,92 @@ static void simple_stereo_call_opus(void){ simple_stereo_call("opus", 48000, 150, TRUE); } +static void call_with_complex_late_offering(void){ + LinphoneCallParams *params; + LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); + LinphoneCall* call_pauline; + LinphoneCall* call_marie; + + BC_ASSERT_TRUE(call(pauline,marie)); + + call_pauline = linphone_core_get_current_call(pauline->lc); + call_marie = linphone_core_get_current_call(marie->lc); + + //Invite inactive Audio/video (Marie pause Pauline) + params=linphone_core_create_call_params(marie->lc,call_marie); + linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionInactive); + linphone_call_params_set_video_direction(params,LinphoneMediaDirectionInactive); + + linphone_core_update_call(marie->lc, call_marie ,params); + linphone_call_params_destroy(params); + + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,1)); + + //Marie send INVITE without SDP + linphone_core_enable_sdp_200_ack(marie->lc,TRUE); + params=linphone_core_create_call_params(marie->lc,call_marie); + linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionSendOnly); + linphone_call_params_set_video_direction(params,LinphoneMediaDirectionSendOnly); + linphone_core_update_call(marie->lc, call_marie , params); + linphone_call_params_destroy(params); + + //Pauline OK with sendonly + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,2)); + + linphone_core_enable_sdp_200_ack(marie->lc,FALSE); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + + //Pauline pause Marie + linphone_core_pause_call(pauline->lc,call_pauline); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); + + //Pauline resume Marie + wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); + linphone_core_resume_call(pauline->lc,call_pauline); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallResuming,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); + + wait_for_until(pauline->lc, marie->lc, NULL, 0, 2000); + + //Marie invite inactive Audio/Video + params=linphone_core_create_call_params(marie->lc,call_marie); + linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionInactive); + linphone_call_params_set_video_direction(params,LinphoneMediaDirectionInactive); + + linphone_core_update_call(marie->lc, call_marie,params); + linphone_call_params_destroy(params); + + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,3)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,3)); + + //Marie send INVITE without SDP + linphone_core_enable_sdp_200_ack(marie->lc,TRUE); + params=linphone_core_create_call_params(marie->lc,call_marie); + linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionSendRecv); + linphone_call_params_set_video_direction(params,LinphoneMediaDirectionSendRecv); + linphone_core_update_call(marie->lc, call_marie,params); + linphone_call_params_destroy(params); + + linphone_core_enable_sdp_200_ack(marie->lc,FALSE); + + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,4)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,4)); + + end_call(marie,pauline); + + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); + +} + static void simple_mono_call_opus(void){ /*actually a call where input/output is made with stereo but opus transmits everything as mono*/ simple_stereo_call("opus", 48000, 150, FALSE); @@ -4850,6 +4936,7 @@ test_t call_tests[] = { { "Call with FQDN in SDP", call_with_fqdn_in_sdp}, { "Call with RTP IO mode", call_with_rtp_io_mode }, { "Call with generic NACK RTCP feedback", call_with_generic_nack_rtcp_feedback }, + { "Call with complex late offering", call_with_complex_late_offering }, { "Call with custom RTP Modifier", call_with_custom_rtp_modifier }, { "Call paused resumed with custom RTP Modifier", call_paused_resumed_with_custom_rtp_modifier }, { "Call record with custom RTP Modifier", call_record_with_custom_rtp_modifier } From ed2385ce289c124d05ac4e1fa94560cf4573b494 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 2 Sep 2015 17:30:02 +0200 Subject: [PATCH 113/134] Refactoring of states, handling of media direction, late offering and so on. Almost working except one test. --- coreapi/bellesip_sal/sal_impl.h | 8 +- coreapi/bellesip_sal/sal_op_call.c | 41 +-- coreapi/callbacks.c | 384 ++++++++++++++--------------- coreapi/linphonecall.c | 85 ++++--- coreapi/linphonecore.c | 53 +--- coreapi/misc.c | 46 ++++ coreapi/private.h | 17 +- tester/call_tester.c | 16 +- 8 files changed, 334 insertions(+), 316 deletions(-) diff --git a/coreapi/bellesip_sal/sal_impl.h b/coreapi/bellesip_sal/sal_impl.h index eae0c6bb3..b75be9156 100644 --- a/coreapi/bellesip_sal/sal_impl.h +++ b/coreapi/bellesip_sal/sal_impl.h @@ -93,7 +93,6 @@ struct SalOp{ belle_sip_header_referred_by_t *referred_by; SalMediaDescription *result; belle_sdp_session_description_t *sdp_answer; - bool_t supports_session_timers; SalOpState state; SalOpDir dir; belle_sip_refresher_t* refresher; @@ -101,14 +100,15 @@ struct SalOp{ SalOpType type; SalPrivacyMask privacy; belle_sip_header_t *event; /*used by SalOpSubscribe kinds*/ + SalOpSDPHandling sdp_handling; + int auth_requests; /*number of auth requested for this op*/ + bool_t cnx_ip_to_0000_if_sendonly_enabled; bool_t auto_answer_asked; bool_t sdp_offering; bool_t call_released; bool_t manual_refresher; bool_t has_auth_pending; - SalOpSDPHandling sdp_handling; - int auth_requests; /*number of auth requested for this op*/ - bool_t cnx_ip_to_0000_if_sendonly_enabled; /*for */ + bool_t supports_session_timers; }; diff --git a/coreapi/bellesip_sal/sal_op_call.c b/coreapi/bellesip_sal/sal_op_call.c index f6e7087bb..5474540ea 100644 --- a/coreapi/bellesip_sal/sal_op_call.c +++ b/coreapi/bellesip_sal/sal_op_call.c @@ -302,10 +302,10 @@ static void call_process_response(void *op_base, const belle_sip_response_event_ && (header_content_type = belle_sip_message_get_header_by_type(req,belle_sip_header_content_type_t)) && strcmp("application",belle_sip_header_content_type_get_type(header_content_type))==0 && strcmp("media_control+xml",belle_sip_header_content_type_get_subtype(header_content_type))==0) { - unsigned int retry_in =1000*((float)rand()/RAND_MAX); - belle_sip_source_t *s=sal_create_timer(op->base.root,vfu_retry,sal_op_ref(op), retry_in, "vfu request retry"); - ms_message("Rejected vfu request on op [%p], just retry in [%ui] ms",op,retry_in); - belle_sip_object_unref(s); + unsigned int retry_in =1000*((float)rand()/RAND_MAX); + belle_sip_source_t *s=sal_create_timer(op->base.root,vfu_retry,sal_op_ref(op), retry_in, "vfu request retry"); + ms_message("Rejected vfu request on op [%p], just retry in [%ui] ms",op,retry_in); + belle_sip_object_unref(s); }else { /*ignoring*/ } @@ -323,7 +323,7 @@ static void call_process_response(void *op_base, const belle_sip_response_event_ } break; case BELLE_SIP_DIALOG_TERMINATED: { - if (code >= 300){ + if (strcmp("INVITE",method)==0 && code >= 300){ call_set_error(op,response); } } @@ -578,22 +578,27 @@ static void process_request_event(void *op_base, const belle_sip_request_event_t case BELLE_SIP_DIALOG_CONFIRMED: /*great ACK received*/ if (strcmp("ACK",method)==0) { - if (op->sdp_offering){ - SalReason reason; - if (extract_sdp(op,BELLE_SIP_MESSAGE(req),&sdp,&reason)==0){ - if (sdp){ - if (op->base.remote_media) - sal_media_description_unref(op->base.remote_media); - op->base.remote_media=sal_media_description_new(); - sdp_to_media_description(sdp,op->base.remote_media); - sdp_process(op); - belle_sip_object_unref(sdp); - }else{ - ms_warning("SDP expected in ACK but not found."); + if (!op->pending_client_trans || + !belle_sip_transaction_state_is_transient(belle_sip_transaction_get_state((belle_sip_transaction_t*)op->pending_client_trans))){ + if (op->sdp_offering){ + SalReason reason; + if (extract_sdp(op,BELLE_SIP_MESSAGE(req),&sdp,&reason)==0){ + if (sdp){ + if (op->base.remote_media) + sal_media_description_unref(op->base.remote_media); + op->base.remote_media=sal_media_description_new(); + sdp_to_media_description(sdp,op->base.remote_media); + sdp_process(op); + belle_sip_object_unref(sdp); + }else{ + ms_warning("SDP expected in ACK but not found."); + } } } + op->base.root->callbacks.call_ack(op); + }else{ + ms_message("Ignored received ack since a new client transaction has been started since."); } - op->base.root->callbacks.call_ack(op); } else if(strcmp("BYE",method)==0) { resp=sal_op_create_response_from_request(op,req,200); belle_sip_server_transaction_send_response(server_transaction,resp); diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index 03611b2cf..015f10615 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -117,10 +117,8 @@ void linphone_call_update_frozen_payloads(LinphoneCall *call, SalMediaDescriptio } } -void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMediaDescription *new_md){ +void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMediaDescription *new_md, LinphoneCallState target_state){ SalMediaDescription *oldmd=call->resultdesc; - bool_t all_muted=FALSE; - bool_t send_ringbacktone=FALSE; int md_changed=0; @@ -144,7 +142,6 @@ void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMedia call->biggestdesc=sal_media_description_ref(sal_call_get_remote_media_description(call->op)); } sal_media_description_ref(new_md); - call->expect_media_in_ack=FALSE; call->resultdesc=new_md; if ((call->audiostream && call->audiostream->ms.state==MSStreamStarted) || (call->videostream && call->videostream->ms.state==MSStreamStarted)){ clear_early_media_destinations(call); @@ -201,25 +198,11 @@ void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMedia /*this happens after pausing the call locally. The streams are destroyed and then we wait the 200Ok to recreate them*/ linphone_call_init_media_streams (call); } - if (call->state==LinphoneCallIncomingEarlyMedia && linphone_core_get_remote_ringback_tone (lc)!=NULL){ - send_ringbacktone=TRUE; - } - if ((call->state==LinphoneCallIncomingEarlyMedia || call->state==LinphoneCallOutgoingEarlyMedia) && !call->params->real_early_media){ - all_muted=TRUE; - } + if (call->params->real_early_media && call->state==LinphoneCallOutgoingEarlyMedia){ prepare_early_media_forking(call); } -#ifdef VIDEO_ENABLED - if (call->state==LinphoneCallPausing) { - /*change cam to noweb cam*/ - call->cam = get_nowebcam_device(); - } else if (call->state != LinphoneCallPaused) { - /*restaure web cam*/ - call->cam = lc->video_conf.device; - } -#endif /*VIDEO*/ - linphone_call_start_media_streams(call,all_muted,send_ringbacktone); + linphone_call_start_media_streams(call, target_state); if (call->state==LinphoneCallPausing && call->paused_by_app && ms_list_size(lc->calls)==1){ linphone_core_play_named_tone(lc,LinphoneToneCallOnHold); } @@ -476,7 +459,7 @@ static void call_ringing(SalOp *h){ linphone_call_set_state(call,LinphoneCallOutgoingEarlyMedia,"Early media"); linphone_core_stop_ringing(lc); ms_message("Doing early media..."); - linphone_core_update_streams(lc,call,md); + linphone_core_update_streams(lc,call,md, call->state); if ((linphone_call_params_get_audio_direction(linphone_call_get_current_params(call)) == LinphoneMediaDirectionInactive) && call->audiostream) { if (lc->ringstream != NULL) return; /* Already ringing! */ start_remote_ring(lc, call); @@ -484,21 +467,35 @@ static void call_ringing(SalOp *h){ } } -/* - * could be reach : - * - when the call is accepted - * - when a request is accepted (pause, resume) - */ -static void call_accepted(SalOp *op){ - LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op)); - LinphoneCall *call=(LinphoneCall*)sal_op_get_user_pointer(op); - SalMediaDescription *md, *rmd; - bool_t update_state=TRUE; +static void start_pending_refer(LinphoneCall *call){ + linphone_core_start_refered_call(call->core, call,NULL); +} - if (call == NULL){ - ms_warning("No call to accept."); - return ; +static void process_call_accepted(LinphoneCore *lc, LinphoneCall *call, SalOp *op){ + SalMediaDescription *md, *rmd; + LinphoneCallState next_state = LinphoneCallIdle; + const char *next_state_str = NULL; + LinphoneTaskList tl; + + switch (call->state){/*immediately notify the connected state, even if errors occur after*/ + case LinphoneCallOutgoingProgress: + case LinphoneCallOutgoingRinging: + case LinphoneCallOutgoingEarlyMedia: + /*immediately notify the connected state*/ + linphone_call_set_state(call,LinphoneCallConnected,"Connected"); + { + char *tmp=linphone_call_get_remote_address_as_string (call); + char *msg=ms_strdup_printf(_("Call answered by %s"),tmp); + linphone_core_notify_display_status(lc,msg); + ms_free(tmp); + ms_free(msg); + } + break; + default: + break; } + + linphone_task_list_init(&tl); rmd=sal_call_get_remote_media_description(op); /*set privacy*/ call->current_params->privacy=(LinphonePrivacyMask)sal_op_get_privacy(call->op); @@ -517,128 +514,108 @@ static void call_accepted(SalOp *op){ #endif //BUILD_UPNP md=sal_call_get_final_media_description(op); - - switch (call->state){ - case LinphoneCallOutgoingProgress: - case LinphoneCallOutgoingRinging: - case LinphoneCallOutgoingEarlyMedia: - linphone_call_set_state(call,LinphoneCallConnected,"Connected"); - if (call->referer) linphone_core_notify_refer_state(lc,call->referer,call); - break; - case LinphoneCallEarlyUpdating: - linphone_call_set_state(call,call->prevstate,"Early update accepted"); - update_state=FALSE; - break; - default: - break; + if (md == NULL && call->prevstate == LinphoneCallOutgoingEarlyMedia && call->resultdesc != NULL){ + ms_message("Using early media SDP since none was received with the 200 OK"); + md = call->resultdesc; } - - if( (call->prevstate == LinphoneCallOutgoingEarlyMedia) && (md == NULL || sal_media_description_empty(md)) ){ - /* media description is null or empty because no SDP was received in the 200 OK, we can possibly use the early-media SDP. */ - if( call->resultdesc != NULL){ - ms_message("Using early media SDP since none were received with the 200 OK"); - md = call->resultdesc; - } + if (md && (sal_media_description_empty(md) || linphone_core_incompatible_security(lc,md))){ + md = NULL; } - - if (md && !sal_media_description_empty(md) && !linphone_core_incompatible_security(lc,md)){ - linphone_call_update_remote_session_id_and_ver(call); - linphone_core_update_ice_state_in_call_stats(call); - if (sal_media_description_has_dir(md,SalStreamSendOnly) || - sal_media_description_has_dir(md,SalStreamInactive)){ - { - char *tmp=linphone_call_get_remote_address_as_string (call); - char *msg=ms_strdup_printf(_("Call with %s is paused."),tmp); - linphone_core_notify_display_status(lc,msg); - ms_free(tmp); - ms_free(msg); - } - linphone_core_update_streams (lc,call,md); - if (update_state) linphone_call_set_state(call,LinphoneCallPaused,"Call paused"); - if (call->refer_pending) - linphone_core_start_refered_call(lc,call,NULL); - }else if (sal_media_description_has_dir(md,SalStreamRecvOnly)){ - /*we are put on hold when the call is initially accepted */ - { - char *tmp=linphone_call_get_remote_address_as_string (call); - char *msg=ms_strdup_printf(_("Call answered by %s - on hold."),tmp); - linphone_core_notify_display_status(lc,msg); - ms_free(tmp); - ms_free(msg); - } - linphone_core_update_streams (lc,call,md); - if (update_state) linphone_call_set_state(call,LinphoneCallPausedByRemote,"Call paused by remote"); - }else{ - if (call->state!=LinphoneCallUpdating){ - if (call->state==LinphoneCallResuming){ - linphone_core_notify_display_status(lc,_("Call resumed.")); + if (md){ /*there is a valid SDP in the response, either offer or answer, and we're able to start/update the streams*/ + switch (call->state){ + case LinphoneCallResuming: + linphone_core_notify_display_status(lc,_("Call resumed.")); + /*intentionally no break*/ + case LinphoneCallConnected: + if (call->referer) linphone_core_notify_refer_state(lc,call->referer,call); + /*intentionally no break*/ + case LinphoneCallUpdating: + case LinphoneCallUpdatedByRemote: + if (!sal_media_description_has_dir(call->localdesc, SalStreamInactive) && + (sal_media_description_has_dir(md,SalStreamRecvOnly) || + sal_media_description_has_dir(md,SalStreamInactive))){ + next_state = LinphoneCallPausedByRemote; + next_state_str = "Call paused by remote"; }else{ - { - char *tmp=linphone_call_get_remote_address_as_string (call); - char *msg=ms_strdup_printf(_("Call answered by %s."),tmp); - linphone_core_notify_display_status(lc,msg); - ms_free(tmp); - ms_free(msg); - } + if (!call->current_params->in_conference) + lc->current_call=call; + next_state = LinphoneCallStreamsRunning; + next_state_str = "Streams running"; } - } - linphone_core_update_streams(lc,call,md); - linphone_call_fix_call_parameters(call); - if (!call->current_params->in_conference) - lc->current_call=call; - if (update_state) linphone_call_set_state(call, LinphoneCallStreamsRunning, "Streams running"); + break; + case LinphoneCallEarlyUpdating: + next_state_str = "Early update accepted"; + next_state = call->prevstate; + break; + case LinphoneCallPausing: + /*when we entered the pausing state, we always reach the paused state whatever the content of the remote SDP is. + Our streams are all send-only (with music), soundcard and camera are never used*/ + next_state = LinphoneCallPaused; + next_state_str = "Call paused"; + if (call->refer_pending) + linphone_task_list_add(&tl, (LinphoneCoreIterateHook)start_pending_refer, call); + break; + default: + ms_error("call_accepted(): don't know what to do in state [%s]", linphone_call_state_to_string(call->state)); + break; } - }else{ + + if (next_state != LinphoneCallIdle){ + linphone_call_update_remote_session_id_and_ver(call); + linphone_core_update_ice_state_in_call_stats(call); + linphone_core_update_streams(lc, call, md, next_state); + linphone_call_fix_call_parameters(call); + linphone_call_set_state(call, next_state, next_state_str); + }else{ + ms_error("BUG: next_state is not set in call_accepted(), current state is %s", linphone_call_state_to_string(call->state)); + } + }else{ /*invalid or no SDP*/ switch (call->prevstate){ - /*send a bye only in case of outgoing state*/ + /*send a bye only in case of early states*/ case LinphoneCallOutgoingInit: case LinphoneCallOutgoingProgress: case LinphoneCallOutgoingRinging: case LinphoneCallOutgoingEarlyMedia: - ms_error("Incompatible SDP offer received in 200 OK, need to abort the call"); + case LinphoneCallIncomingReceived: + case LinphoneCallIncomingEarlyMedia: + ms_error("Incompatible SDP answer received, need to abort the call"); linphone_core_abort_call(lc,call,_("Incompatible, check codecs or security settings...")); break; /*otherwise we are able to resume previous state*/ default: - ms_message("Incompatible SDP offer received in 200 OK, restoring previous state[%s]",linphone_call_state_to_string(call->prevstate)); + ms_message("Incompatible SDP answer received, restoring previous state [%s]",linphone_call_state_to_string(call->prevstate)); linphone_call_set_state(call,call->prevstate,_("Incompatible media parameters.")); break; } } + linphone_task_list_run(&tl); + linphone_task_list_free(&tl); } -static void call_ack(SalOp *op){ +/* + * could be reach : + * - when the call is accepted + * - when a request is accepted (pause, resume) + */ +static void call_accepted(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==NULL){ - ms_warning("No call to be ACK'd"); + + if (call == NULL){ + ms_warning("call_accepted: call does no longer exist."); return ; } - if (call->expect_media_in_ack){ - SalMediaDescription *md=sal_call_get_final_media_description(op); - if (md && !sal_media_description_empty(md)){ - linphone_core_update_streams(lc,call,md); - linphone_call_set_state (call,LinphoneCallStreamsRunning,"Connected (streams running)"); - }else{ - /*send a bye*/ - ms_error("Incompatible SDP response received in ACK, need to abort the call"); - linphone_core_abort_call(lc,call,"No codec intersection"); - return; - } - } + process_call_accepted(lc, call, op); } static void call_resumed(LinphoneCore *lc, LinphoneCall *call){ - /*when we are resumed, increment session id, because sdp is changed (a=recvonly disapears)*/ - linphone_call_increment_local_media_description(call); linphone_core_notify_display_status(lc,_("We have been resumed.")); _linphone_core_accept_call_update(lc,call,NULL,LinphoneCallStreamsRunning,"Connected (streams running)"); } static void call_paused_by_remote(LinphoneCore *lc, LinphoneCall *call){ LinphoneCallParams *params; - /*when we are paused, increment session id, because sdp is changed (a=recvonly appears)*/ - linphone_call_increment_local_media_description(call); + /* we are being paused */ linphone_core_notify_display_status(lc,_("We are paused by other party.")); params = linphone_call_params_copy(call->params); @@ -649,100 +626,47 @@ static void call_paused_by_remote(LinphoneCore *lc, LinphoneCall *call){ linphone_call_params_unref(params); } -static void call_updated_by_remote(LinphoneCore *lc, LinphoneCall *call, bool_t is_update){ - /*first check if media capabilities are compatible*/ - SalMediaDescription *md; - SalMediaDescription *rmd=sal_call_get_remote_media_description(call->op); - SalMediaDescription *prev_result_desc=call->resultdesc; - - if (rmd!=NULL){ - if (call->state!=LinphoneCallPaused){ - /*in paused state, we must stay in paused state.*/ - linphone_call_make_local_media_description(lc,call); - sal_call_set_local_media_description(call->op,call->localdesc); - } - md=sal_call_get_final_media_description(call->op); - if (md && (sal_media_description_empty(md) || linphone_core_incompatible_security(lc,md))){ - sal_call_decline(call->op,SalReasonNotAcceptable,NULL); - return; - } - if (is_update && prev_result_desc && md){ - int diff=sal_media_description_equals(prev_result_desc,md); - if (diff & (SAL_MEDIA_DESCRIPTION_CRYPTO_POLICY_CHANGED|SAL_MEDIA_DESCRIPTION_STREAMS_CHANGED)){ - ms_warning("Cannot accept this update, it is changing parameters that require user approval"); - sal_call_decline(call->op,SalReasonNotAcceptable,NULL); /*FIXME should send 504 Cannot change the session parameters without prompting the user"*/ - return; - } - } - } - - if ( call->state == LinphoneCallStreamsRunning) { - /*reINVITE and in-dialogs UPDATE go here*/ - linphone_core_notify_display_status(lc,_("Call is updated by remote.")); - call->defer_update = lp_config_get_int(lc->config, "sip", "defer_update_default", FALSE); - linphone_call_set_state(call, LinphoneCallUpdatedByRemote,"Call updated by remote"); - if (call->defer_update==FALSE){ - linphone_core_accept_call_update(lc,call,NULL); - } - if (rmd==NULL){ - call->expect_media_in_ack=TRUE; - } - - } else if( call->state == LinphoneCallPausedByRemote ){ - /* FIXME: the comment below is meaningless. */ - /* Case where no SDP is present and we were paused by remote. - * We send back an ACK with our SDP and expect the remote to send its own. - * No state change here until an answer is received. */ - call->defer_update = lp_config_get_int(lc->config, "sip", "defer_update_default", FALSE); - if (call->defer_update==FALSE){ - _linphone_core_accept_call_update(lc,call,NULL,call->state,linphone_call_state_to_string(call->state)); - } - if (rmd==NULL){ - call->expect_media_in_ack=TRUE; - } - } else if (is_update){ /*SIP UPDATE case, can occur in early states*/ - linphone_call_set_state(call, LinphoneCallEarlyUpdatedByRemote, "EarlyUpdatedByRemote"); - _linphone_core_accept_call_update(lc,call,NULL,call->prevstate,linphone_call_state_to_string(call->prevstate)); - } -} - /* this callback is called when an incoming re-INVITE/ SIP UPDATE modifies the session*/ -static void call_updating(SalOp *op, bool_t is_update){ - LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op)); - LinphoneCall *call=(LinphoneCall*)sal_op_get_user_pointer(op); +static void call_updated(LinphoneCore *lc, LinphoneCall *call, SalOp *op, bool_t is_update){ SalMediaDescription *rmd=sal_call_get_remote_media_description(op); - - if (rmd==NULL){ - /* case of a reINVITE or UPDATE without SDP */ - call_updated_by_remote(lc,call,is_update); - return; - } - + + call->defer_update = lp_config_get_int(lc->config, "sip", "defer_update_default", FALSE); + switch(call->state){ case LinphoneCallPausedByRemote: if (sal_media_description_has_dir(rmd,SalStreamSendRecv) || sal_media_description_has_dir(rmd,SalStreamRecvOnly)){ call_resumed(lc,call); - }else call_updated_by_remote(lc,call,is_update); + }else{ + _linphone_core_accept_call_update(lc,call,NULL,call->state,linphone_call_state_to_string(call->state)); + } break; /*SIP UPDATE CASE*/ case LinphoneCallOutgoingRinging: case LinphoneCallOutgoingEarlyMedia: case LinphoneCallIncomingEarlyMedia: - if (is_update) call_updated_by_remote(lc,call,is_update); + if (is_update) { + linphone_call_set_state(call, LinphoneCallEarlyUpdatedByRemote, "EarlyUpdatedByRemote"); + _linphone_core_accept_call_update(lc,call,NULL,call->prevstate,linphone_call_state_to_string(call->prevstate)); + } break; case LinphoneCallStreamsRunning: case LinphoneCallConnected: if (sal_media_description_has_dir(rmd,SalStreamSendOnly) || sal_media_description_has_dir(rmd,SalStreamInactive)){ call_paused_by_remote(lc,call); }else{ - call_updated_by_remote(lc,call,is_update); + linphone_core_notify_display_status(lc,_("Call is updated by remote.")); + linphone_call_set_state(call, LinphoneCallUpdatedByRemote,"Call updated by remote"); + if (call->defer_update == FALSE){ + linphone_core_accept_call_update(lc,call,NULL); + } } break; case LinphoneCallPaused: if (sal_media_description_has_dir(rmd,SalStreamSendOnly) || sal_media_description_has_dir(rmd,SalStreamInactive)){ call_paused_by_remote(lc,call); }else{ - call_updated_by_remote(lc,call,is_update); + /*we'll remain in pause state but accept the offer anyway according to default parameters*/ + _linphone_core_accept_call_update(lc,call,NULL,call->state,linphone_call_state_to_string(call->state)); } break; case LinphoneCallUpdating: @@ -766,6 +690,71 @@ static void call_updating(SalOp *op, bool_t is_update){ } } +/* this callback is called when an incoming re-INVITE/ SIP UPDATE modifies the session*/ +static void call_updating(SalOp *op, bool_t is_update){ + LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op)); + LinphoneCall *call=(LinphoneCall*)sal_op_get_user_pointer(op); + SalMediaDescription *rmd=sal_call_get_remote_media_description(op); + + if (!call) { + ms_error("call_updating(): call doesn't exist anymore"); + return ; + } + if (call->state!=LinphoneCallPaused){ + /*Refresh the local description, but in paused state, we don't change anything.*/ + linphone_call_make_local_media_description(lc,call); + sal_call_set_local_media_description(call->op,call->localdesc); + } + if (rmd == NULL){ + /* case of a reINVITE or UPDATE without SDP */ + call->expect_media_in_ack = TRUE; + sal_call_accept(op); /*respond with an offer*/ + /*don't do anything else in this case, wait for the ACK to receive to notify the app*/ + }else { + SalMediaDescription *md; + SalMediaDescription *prev_result_desc=call->resultdesc; + + call->expect_media_in_ack = FALSE; + + md=sal_call_get_final_media_description(call->op); + if (md && (sal_media_description_empty(md) || linphone_core_incompatible_security(lc,md))){ + sal_call_decline(call->op,SalReasonNotAcceptable,NULL); + return; + } + if (is_update && prev_result_desc && md){ + int diff=sal_media_description_equals(prev_result_desc,md); + if (diff & (SAL_MEDIA_DESCRIPTION_CRYPTO_POLICY_CHANGED|SAL_MEDIA_DESCRIPTION_STREAMS_CHANGED)){ + ms_warning("Cannot accept this update, it is changing parameters that require user approval"); + sal_call_decline(call->op,SalReasonNotAcceptable,NULL); /*FIXME should send 504 Cannot change the session parameters without prompting the user"*/ + return; + } + } + call_updated(lc, call, op, is_update); + } +} + + +static void call_ack(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 == NULL){ + ms_warning("call_ack(): no call for which an ack is expected"); + return; + } + if (call->expect_media_in_ack){ + switch(call->state){ + case LinphoneCallStreamsRunning: + case LinphoneCallPausedByRemote: + linphone_call_set_state(call, LinphoneCallUpdatedByRemote, "UpdatedByRemote"); + break; + default: + break; + } + process_call_accepted(lc, call, op); + } +} + static void call_terminated(SalOp *op, const char *from){ LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op)); LinphoneCall *call=(LinphoneCall*)sal_op_get_user_pointer(op); @@ -922,16 +911,11 @@ static void call_failure(SalOp *op){ msg=_("Incompatible media parameters."); linphone_core_notify_display_status(lc,msg); break; - case SalReasonRequestPending: - /*restore previous state, the application will decide to resubmit the action if relevant*/ - linphone_call_set_state(call,call->prevstate,msg); - return; - break; default: linphone_core_notify_display_status(lc,_("Call failed.")); } - /*some call error are not fatal*/ + /*some call errors are not fatal*/ switch (call->state) { case LinphoneCallUpdating: case LinphoneCallPausing: diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 1c60558c9..d4c9f43d5 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -43,11 +43,15 @@ static const char *EC_STATE_STORE = ".linphone.ecstate"; static void linphone_call_stats_uninit(LinphoneCallStats *stats); static void linphone_call_get_local_ip(LinphoneCall *call, const LinphoneAddress *remote_addr); -#ifdef VIDEO_ENABLED + MSWebCam *get_nowebcam_device(){ +#ifdef VIDEO_ENABLED return ms_web_cam_manager_get_cam(ms_web_cam_manager_get(),"StaticImage: Static picture"); -} +#else + return NULL; #endif +} + static bool_t generate_b64_crypto_key(int key_length, char* key_out, size_t key_out_size) { int b64_size; @@ -818,9 +822,6 @@ static void linphone_call_init_common(LinphoneCall *call, LinphoneAddress *from, linphone_call_init_stats(&call->stats[LINPHONE_CALL_STATS_AUDIO], LINPHONE_CALL_STATS_AUDIO); linphone_call_init_stats(&call->stats[LINPHONE_CALL_STATS_VIDEO], LINPHONE_CALL_STATS_VIDEO); -#ifdef VIDEO_ENABLED - call->cam = call->core->video_conf.device; -#endif } void linphone_call_init_stats(LinphoneCallStats *stats, int type) { @@ -948,6 +949,7 @@ void linphone_call_fill_media_multicast_addr(LinphoneCall *call) { } else call->media_ports[1].multicast_ip[0]='\0'; } + LinphoneCall * linphone_call_new_outgoing(struct _LinphoneCore *lc, LinphoneAddress *from, LinphoneAddress *to, const LinphoneCallParams *params, LinphoneProxyConfig *cfg){ LinphoneCall *call = belle_sip_object_new(LinphoneCall); @@ -955,7 +957,7 @@ LinphoneCall * linphone_call_new_outgoing(struct _LinphoneCore *lc, LinphoneAddr call->core=lc; linphone_call_outgoing_select_ip_version(call,to,cfg); linphone_call_get_local_ip(call, to); - linphone_call_init_common(call,from,to); + linphone_call_init_common(call, from, to); call->params = linphone_call_params_copy(params); linphone_call_fill_media_multicast_addr(call); @@ -1260,7 +1262,7 @@ void linphone_call_set_state(LinphoneCall *call, LinphoneCallState cstate, const call->prevstate=call->state; if (call->state==LinphoneCallEnd || call->state==LinphoneCallError){ if (cstate!=LinphoneCallReleased){ - ms_warning("Spurious call state change from %s to %s, ignored." ,linphone_call_state_to_string(call->state) + ms_fatal("Spurious call state change from %s to %s, ignored." ,linphone_call_state_to_string(call->state) ,linphone_call_state_to_string(cstate)); return; } @@ -2547,9 +2549,8 @@ static RtpSession * create_audio_rtp_io_session(LinphoneCall *call) { return rtp_session; } -static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, bool_t send_ringbacktone, bool_t use_arc){ +static void linphone_call_start_audio_stream(LinphoneCall *call, LinphoneCallState next_state, bool_t use_arc){ LinphoneCore *lc=call->core; - LpConfig* conf; int used_pt=-1; char rtcp_tool[128]={0}; const SalStreamDescription *stream; @@ -2586,26 +2587,24 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b if (captcard==NULL) { ms_warning("No card defined for capture !"); } - /*Replace soundcard filters by inactive file players or recorders - when placed in recvonly or sendonly mode*/ + /*Don't use file or soundcard capture when placed in recv-only mode*/ if (stream->rtp_port==0 || stream->dir==SalStreamRecvOnly || (stream->multicast_role == SalMulticastReceiver && is_multicast)){ captcard=NULL; playfile=NULL; - }else if (stream->dir==SalStreamSendOnly){ + } + if (next_state == LinphoneCallPaused){ + /*in paused state, we never use soundcard*/ playcard=NULL; - /*jehan: why capture card should be null in this case ? Not very good to only rely on stream dir to detect paused state. - * It can also be a simple call in one way audio*/ captcard=NULL; recfile=NULL; /*And we will eventually play "playfile" if set by the user*/ } - if (send_ringbacktone){ - conf = linphone_core_get_config(lc); + if (call->playing_ringbacktone){ captcard=NULL; playfile=NULL;/* it is setup later*/ - if( conf && lp_config_get_int(conf,"sound","send_ringback_without_playback", 0) == 1){ + if (lp_config_get_int(lc->config,"sound","send_ringback_without_playback", 0) == 1){ playcard = NULL; recfile = NULL; } @@ -2629,7 +2628,7 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b if (captcard && stream->max_rate>0) ms_snd_card_set_preferred_sample_rate(captcard, stream->max_rate); audio_stream_enable_adaptive_bitrate_control(call->audiostream,use_arc); media_stream_set_adaptive_bitrate_algorithm(&call->audiostream->ms, - ms_qos_analyzer_algorithm_from_string(linphone_core_get_adaptive_rate_algorithm(lc))); + ms_qos_analyzer_algorithm_from_string(linphone_core_get_adaptive_rate_algorithm(lc))); audio_stream_enable_adaptive_jittcomp(call->audiostream, linphone_core_audio_adaptive_jittcomp_enabled(lc)); rtp_session_set_jitter_compensation(call->audiostream->ms.sessions.rtp_session,linphone_core_get_audio_jittcomp(lc)); if (!call->params->in_conference && call->params->record_file){ @@ -2686,22 +2685,22 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, bool_t muted, b used_pt, &io ); - post_configure_audio_streams(call, muted && !send_ringbacktone); + post_configure_audio_streams(call, (call->all_muted || call->audio_muted) && !call->playing_ringbacktone); } ms_media_stream_sessions_set_encryption_mandatory(&call->audiostream->ms.sessions,linphone_core_is_media_encryption_mandatory(call->core)); - if (stream->dir==SalStreamSendOnly && playfile!=NULL){ + if (next_state == LinphoneCallPaused && captcard == NULL && playfile != NULL){ int pause_time=500; ms_filter_call_method(call->audiostream->soundread,MS_FILE_PLAYER_LOOP,&pause_time); } - if (send_ringbacktone){ + if (call->playing_ringbacktone){ setup_ring_player(lc,call); } if (call->params->in_conference){ /*transform the graph to connect it to the conference filter */ - mute=stream->dir==SalStreamRecvOnly; + mute = stream->dir==SalStreamRecvOnly; linphone_call_add_to_conf(call, mute); } call->current_params->in_conference=call->params->in_conference; @@ -2737,7 +2736,7 @@ static RtpSession * create_video_rtp_io_session(LinphoneCall *call) { } #endif -static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inputs_muted){ +static void linphone_call_start_video_stream(LinphoneCall *call, LinphoneCallState next_state){ #ifdef VIDEO_ENABLED LinphoneCore *lc=call->core; int used_pt=-1; @@ -2810,11 +2809,7 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu /*either inactive or incompatible with local capabilities*/ is_inactive=TRUE; } - if (all_inputs_muted){ - cam=get_nowebcam_device(); - } else { - cam = linphone_call_get_video_device(call); - } + cam = linphone_call_get_video_device(call); if (!is_inactive){ if (sal_stream_description_has_srtp(vstream) == TRUE) { int crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, vstream->crypto_local_tag); @@ -2934,13 +2929,29 @@ static void setZrtpCryptoTypesParameters(MSZrtpParams *params, LinphoneCore *lc) params->keyAgreementsCount = linphone_core_get_zrtp_key_agreement_suites(lc, params->keyAgreements); } -void linphone_call_start_media_streams(LinphoneCall *call, bool_t all_inputs_muted, bool_t send_ringbacktone){ +void linphone_call_start_media_streams(LinphoneCall *call, LinphoneCallState next_state){ LinphoneCore *lc=call->core; - bool_t use_arc=linphone_core_adaptive_rate_control_enabled(lc); + bool_t use_arc = linphone_core_adaptive_rate_control_enabled(lc); #ifdef VIDEO_ENABLED const SalStreamDescription *vstream=sal_media_description_find_best_stream(call->resultdesc,SalVideo); #endif + switch (next_state){ + case LinphoneCallIncomingEarlyMedia: + if (linphone_core_get_remote_ringback_tone(lc)){ + call->playing_ringbacktone = TRUE; + } + case LinphoneCallOutgoingEarlyMedia: + if (!call->params->real_early_media){ + call->all_muted = TRUE; + } + break; + default: + call->playing_ringbacktone = FALSE; + call->all_muted = FALSE; + break; + } + call->current_params->audio_codec = NULL; call->current_params->video_codec = NULL; @@ -2958,18 +2969,16 @@ void linphone_call_start_media_streams(LinphoneCall *call, bool_t all_inputs_mut call, linphone_core_get_upload_bandwidth(lc),linphone_core_get_download_bandwidth(lc)); if (call->audiostream!=NULL) { - linphone_call_start_audio_stream(call,all_inputs_muted||call->audio_muted,send_ringbacktone,use_arc); + linphone_call_start_audio_stream(call, next_state, use_arc); } else { ms_warning("DTLS no audio stream!"); } call->current_params->has_video=FALSE; if (call->videostream!=NULL) { if (call->audiostream) audio_stream_link_video(call->audiostream,call->videostream); - linphone_call_start_video_stream(call,all_inputs_muted); + linphone_call_start_video_stream(call, next_state); } - call->all_muted=all_inputs_muted; - call->playing_ringbacktone=send_ringbacktone; call->up_bw=linphone_core_get_upload_bandwidth(lc); /*might be moved in audio/video stream_start*/ @@ -4141,14 +4150,14 @@ void linphone_call_set_native_video_window_id(LinphoneCall *call, void *id) { } #endif } -#ifdef VIDEO_ENABLED + MSWebCam *linphone_call_get_video_device(const LinphoneCall *call) { - if (call->camera_enabled==FALSE) + if (call->all_muted || call->camera_enabled == FALSE) return get_nowebcam_device(); else - return call->cam; + return call->core->video_conf.device; } -#endif + void linphone_call_set_audio_route(LinphoneCall *call, LinphoneAudioRoute route) { if (call != NULL && call->audiostream != NULL){ diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 9db9e82bf..19bb7b5a1 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -100,7 +100,6 @@ static ortp_mutex_t liblinphone_log_collection_mutex; static bool_t liblinphone_serialize_logs = FALSE; static void set_network_reachable(LinphoneCore* lc,bool_t isReachable, time_t curtime); static void linphone_core_run_hooks(LinphoneCore *lc); -static void linphone_core_free_hooks(LinphoneCore *lc); #include "enum.h" #include "contact_providers_priv.h" @@ -1590,7 +1589,7 @@ static void linphone_core_init(LinphoneCore * lc, const LinphoneCoreVTable *vtab lc->config=lp_config_ref(config); lc->data=userdata; lc->ringstream_autorelease=TRUE; - + linphone_task_list_init(&lc->hooks); memcpy(local_vtable,vtable,sizeof(LinphoneCoreVTable)); _linphone_core_add_listener(lc, local_vtable, TRUE); @@ -3177,11 +3176,11 @@ int linphone_core_accept_early_media_with_params(LinphoneCore* lc, LinphoneCall* sal_op_set_sent_custom_header ( call->op,params->custom_headers ); } - sal_call_notify_ringing(call->op,TRUE); + sal_call_notify_ringing(call->op, TRUE); linphone_call_set_state(call,LinphoneCallIncomingEarlyMedia,"Incoming call early media"); md=sal_call_get_final_media_description(call->op); - if (md) linphone_core_update_streams(lc,call,md); + if (md) linphone_core_update_streams(lc, call, md, call->state); return 0; }else{ ms_error("Bad state %s for linphone_core_accept_early_media_with_params()", linphone_call_state_to_string(call->state)); @@ -3273,6 +3272,7 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho break; case LinphoneCallStreamsRunning: case LinphoneCallPaused: + case LinphoneCallPausedByRemote: nextstate=LinphoneCallUpdating; break; default: @@ -3329,7 +3329,7 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho video_stream_set_sent_video_size(call->videostream,linphone_core_get_preferred_video_size(lc)); video_stream_set_fps(call->videostream, linphone_core_get_preferred_framerate(lc)); if (call->camera_enabled && call->videostream->cam!=lc->video_conf.device){ - video_stream_change_camera(call->videostream,call->cam = lc->video_conf.device); + video_stream_change_camera(call->videostream, lc->video_conf.device); }else video_stream_update_video_params(call->videostream); } #endif @@ -3378,7 +3378,7 @@ int linphone_core_start_accept_call_update(LinphoneCore *lc, LinphoneCall *call, sal_call_accept(call->op); md=sal_call_get_final_media_description(call->op); if (md && !sal_media_description_empty(md)){ - linphone_core_update_streams (lc,call,md); + linphone_core_update_streams(lc, call, md, next_state); linphone_call_fix_call_parameters(call); } linphone_call_set_state(call,next_state,state_info); @@ -3613,7 +3613,7 @@ int linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call, linphone_call_set_state(call,LinphoneCallConnected,"Connected"); new_md=sal_call_get_final_media_description(call->op); if (new_md){ - linphone_core_update_streams(lc, call, new_md); + linphone_core_update_streams(lc, call, new_md, LinphoneCallStreamsRunning); linphone_call_fix_call_parameters(call); linphone_call_set_state(call,LinphoneCallStreamsRunning,"Connected (streams running)"); }else call->expect_media_in_ack=TRUE; @@ -6096,7 +6096,7 @@ LpConfig * linphone_core_create_lp_config(LinphoneCore *lc, const char *filename static void linphone_core_uninit(LinphoneCore *lc) { - linphone_core_free_hooks(lc); + linphone_task_list_free(&lc->hooks); lc->video_conf.show_local = FALSE; while(lc->calls) @@ -6558,47 +6558,18 @@ void linphone_core_set_max_calls(LinphoneCore *lc, int max) { lc->max_calls=max; } -typedef struct Hook{ - LinphoneCoreIterateHook fun; - void *data; -}Hook; - -static Hook *hook_new(LinphoneCoreIterateHook hook, void *hook_data){ - Hook *h=ms_new0(Hook,1); - h->fun=hook; - h->data=hook_data; - return h; -} - -static void hook_invoke(Hook *h){ - h->fun(h->data); -} void linphone_core_add_iterate_hook(LinphoneCore *lc, LinphoneCoreIterateHook hook, void *hook_data){ - lc->hooks=ms_list_append(lc->hooks,hook_new(hook,hook_data)); + linphone_task_list_add(&lc->hooks, hook, hook_data); } static void linphone_core_run_hooks(LinphoneCore *lc){ - ms_list_for_each(lc->hooks,(void (*)(void*))hook_invoke); -} - -static void linphone_core_free_hooks(LinphoneCore *lc){ - ms_list_for_each(lc->hooks,(void (*)(void*))ms_free); - ms_list_free(lc->hooks); - lc->hooks=NULL; + linphone_task_list_run(&lc->hooks); } void linphone_core_remove_iterate_hook(LinphoneCore *lc, LinphoneCoreIterateHook hook, void *hook_data){ - MSList *elem; - for(elem=lc->hooks;elem!=NULL;elem=elem->next){ - Hook *h=(Hook*)elem->data; - if (h->fun==hook && h->data==hook_data){ - lc->hooks = ms_list_remove_link(lc->hooks,elem); - ms_free(h); - return; - } - } - ms_error("linphone_core_remove_iterate_hook(): No such hook found."); + linphone_task_list_remove(&lc->hooks, hook, hook_data); + } void linphone_core_set_zrtp_secrets_file(LinphoneCore *lc, const char* file){ diff --git a/coreapi/misc.c b/coreapi/misc.c index d94b170e3..60465887d 100644 --- a/coreapi/misc.c +++ b/coreapi/misc.c @@ -1788,3 +1788,49 @@ const char *linphone_tunnel_mode_to_string(LinphoneTunnelMode mode) { return "invalid"; } + +typedef struct Hook{ + LinphoneCoreIterateHook fun; + void *data; +}Hook; + +void linphone_task_list_init(LinphoneTaskList *t){ + t->hooks = NULL; +} + +static Hook *hook_new(LinphoneCoreIterateHook hook, void *hook_data){ + Hook *h=ms_new0(Hook,1); + h->fun=hook; + h->data=hook_data; + return h; +} + +static void hook_invoke(Hook *h){ + h->fun(h->data); +} + +void linphone_task_list_add(LinphoneTaskList *t, LinphoneCoreIterateHook hook, void *hook_data){ + t->hooks = ms_list_append(t->hooks,hook_new(hook,hook_data)); +} + +void linphone_task_list_remove(LinphoneTaskList *t, LinphoneCoreIterateHook hook, void *hook_data){ + MSList *elem; + for(elem=t->hooks;elem!=NULL;elem=elem->next){ + Hook *h=(Hook*)elem->data; + if (h->fun==hook && h->data==hook_data){ + t->hooks = ms_list_remove_link(t->hooks,elem); + ms_free(h); + return; + } + } + ms_error("linphone_task_list_remove(): No such hook found."); +} + +void linphone_task_list_run(LinphoneTaskList *t){ + ms_list_for_each(t->hooks,(void (*)(void*))hook_invoke); +} + +void linphone_task_list_free(LinphoneTaskList *t){ + t->hooks = ms_list_free_with_data(t->hooks, (void (*)(void*))ms_free); +} + diff --git a/coreapi/private.h b/coreapi/private.h index 12fd5b4c4..da3290788 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -295,7 +295,6 @@ struct _LinphoneCall{ belle_sip_source_t *dtmfs_timer; /*DTMF timer needed to send a DTMF sequence*/ char *dtls_certificate_fingerprint; /**> This fingerprint is computed during stream init and is stored in call to be used when making local media description */ - MSWebCam *cam; /*webcam use for this call*/ bool_t refer_pending; bool_t expect_media_in_ack; bool_t audio_muted; @@ -450,7 +449,7 @@ void linphone_call_fix_call_parameters(LinphoneCall *call); void linphone_call_init_audio_stream(LinphoneCall *call); void linphone_call_init_video_stream(LinphoneCall *call); void linphone_call_init_media_streams(LinphoneCall *call); -void linphone_call_start_media_streams(LinphoneCall *call, bool_t all_inputs_muted, bool_t send_ringbacktone); +void linphone_call_start_media_streams(LinphoneCall *call, LinphoneCallState target_state); void linphone_call_start_media_streams_for_ice_gathering(LinphoneCall *call); void linphone_call_stop_media_streams(LinphoneCall *call); void linphone_call_delete_ice_session(LinphoneCall *call); @@ -757,6 +756,16 @@ const char *linphone_core_get_tone_file(const LinphoneCore *lc, LinphoneToneID i int _linphone_core_accept_call_update(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params, LinphoneCallState next_state, const char *state_info); typedef struct _LinphoneConference LinphoneConference; +typedef struct _LinphoneTaskList{ + MSList *hooks; +}LinphoneTaskList; + +void linphone_task_list_init(LinphoneTaskList *t); +void linphone_task_list_add(LinphoneTaskList *t, LinphoneCoreIterateHook hook, void *hook_data); +void linphone_task_list_remove(LinphoneTaskList *t, LinphoneCoreIterateHook hook, void *hook_data); +void linphone_task_list_run(LinphoneTaskList *t); +void linphone_task_list_free(LinphoneTaskList *t); + struct _LinphoneCore { MSList* vtable_refs; @@ -804,7 +813,7 @@ struct _LinphoneCore void *preview_window_id; time_t netup_time; /*time when network went reachable */ struct _EcCalibrator *ecc; - MSList *hooks; + LinphoneTaskList hooks; /*tasks periodically executed in linphone_core_iterate()*/ LinphoneConference conf_ctx; char* zrtp_secrets_cache; char* user_certificates_path; @@ -892,7 +901,7 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall * void linphone_call_make_local_media_description_with_params(LinphoneCore *lc, LinphoneCall *call, LinphoneCallParams *params); void linphone_call_increment_local_media_description(LinphoneCall *call); void linphone_call_fill_media_multicast_addr(LinphoneCall *call); -void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMediaDescription *new_md); +void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMediaDescription *new_md, LinphoneCallState target_state); bool_t linphone_core_is_payload_type_usable_for_bandwidth(LinphoneCore *lc, const PayloadType *pt, int bandwidth_limit); diff --git a/tester/call_tester.c b/tester/call_tester.c index 7b9eb36c5..a9ed2e494 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -288,9 +288,9 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr BC_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&callee_mgr->stat.number_of_LinphoneCallConnected,initial_callee.number_of_LinphoneCallConnected+1)); BC_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&caller_mgr->stat.number_of_LinphoneCallConnected,initial_callee.number_of_LinphoneCallConnected+1)); - result = wait_for(callee_mgr->lc,caller_mgr->lc,&caller_mgr->stat.number_of_LinphoneCallStreamsRunning,initial_caller.number_of_LinphoneCallStreamsRunning+1) + result = wait_for_until(callee_mgr->lc,caller_mgr->lc,&caller_mgr->stat.number_of_LinphoneCallStreamsRunning,initial_caller.number_of_LinphoneCallStreamsRunning+1, 2000) && - wait_for(callee_mgr->lc,caller_mgr->lc,&callee_mgr->stat.number_of_LinphoneCallStreamsRunning,initial_callee.number_of_LinphoneCallStreamsRunning+1); + wait_for_until(callee_mgr->lc,caller_mgr->lc,&callee_mgr->stat.number_of_LinphoneCallStreamsRunning,initial_callee.number_of_LinphoneCallStreamsRunning+1, 2000); if (linphone_core_get_media_encryption(caller_mgr->lc) != LinphoneMediaEncryptionNone || linphone_core_get_media_encryption(callee_mgr->lc) != LinphoneMediaEncryptionNone) { @@ -4112,7 +4112,7 @@ static void video_call_with_re_invite_inactive_followed_by_re_invite_base(Linpho linphone_call_params_destroy(params); BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); check_media_direction(marie,linphone_core_get_current_call(marie->lc),lcs,LinphoneMediaDirectionInactive,LinphoneMediaDirectionInactive); @@ -4122,19 +4122,13 @@ static void video_call_with_re_invite_inactive_followed_by_re_invite_base(Linpho linphone_core_enable_sdp_200_ack(marie->lc,TRUE); } - /* - currently update call cannot be used in paused state, might not be good. params=linphone_core_create_call_params(marie->lc,linphone_core_get_current_call(marie->lc)); linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionSendRecv); linphone_call_params_set_video_direction(params,LinphoneMediaDirectionSendRecv); linphone_core_update_call(marie->lc,linphone_core_get_current_call(marie->lc),params); linphone_call_params_destroy(params); - */ - - linphone_core_resume_call(marie->lc,linphone_core_get_current_call(marie->lc)); - - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallResuming,1)); - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,3)); BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); check_media_direction(marie,linphone_core_get_current_call(marie->lc),lcs,LinphoneMediaDirectionSendRecv,LinphoneMediaDirectionSendRecv); From a4594aecbae7e413b569307549e13ccd24aed62d Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 2 Sep 2015 22:19:46 +0200 Subject: [PATCH 114/134] fix and enhance test. Instead of just relying on bandwidth measurement, use video frame decoded callback. Some bandwidth assumption look inconsistent with what the test is doing, they have been modified. --- tester/call_tester.c | 10 +++++----- tester/liblinphone_tester.h | 2 +- tester/multicast_call_tester.c | 6 +++--- tester/video_tester.c | 29 +++++++++++++++++++++++------ 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/tester/call_tester.c b/tester/call_tester.c index a9ed2e494..809a9dec9 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -144,7 +144,7 @@ void linphone_transfer_state_changed(LinphoneCore *lc, LinphoneCall *transfered, } -void linphone_call_cb(LinphoneCall *call,void * user_data) { +void linphone_call_iframe_decoded_cb(LinphoneCall *call,void * user_data) { char* to=linphone_address_as_string(linphone_call_get_call_log(call)->to); char* from=linphone_address_as_string(linphone_call_get_call_log(call)->from); stats* counters; @@ -1496,7 +1496,7 @@ bool_t add_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee, bool_t } if (video_policy->automatically_accept) { - linphone_call_set_next_video_frame_decoded_callback(call_obj,linphone_call_cb,callee->lc); + linphone_call_set_next_video_frame_decoded_callback(call_obj,linphone_call_iframe_decoded_cb,callee->lc); /*send vfu*/ linphone_call_send_vfu_request(call_obj); return wait_for(caller->lc,callee->lc,&callee->stat.number_of_IframeDecoded,initial_callee_stat.number_of_IframeDecoded+1); @@ -1791,7 +1791,7 @@ void video_call_base_2(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, BC_ASSERT_TRUE(linphone_call_log_video_enabled(linphone_call_get_call_log(pauline_call))); /*check video path*/ - linphone_call_set_next_video_frame_decoded_callback(marie_call,linphone_call_cb,marie->lc); + linphone_call_set_next_video_frame_decoded_callback(marie_call,linphone_call_iframe_decoded_cb,marie->lc); linphone_call_send_vfu_request(marie_call); BC_ASSERT_TRUE( wait_for(marie->lc,pauline->lc,&marie->stat.number_of_IframeDecoded,1)); } else { @@ -3230,7 +3230,7 @@ void check_media_direction(LinphoneCoreManager* mgr, LinphoneCall *call, MSList* int dummy = 0; BC_ASSERT_EQUAL(video_dir,linphone_call_params_get_video_direction(params), int, "%d"); - linphone_call_set_next_video_frame_decoded_callback(call,linphone_call_cb,mgr->lc); + linphone_call_set_next_video_frame_decoded_callback(call,linphone_call_iframe_decoded_cb,mgr->lc); linphone_call_send_vfu_request(call); @@ -3288,7 +3288,7 @@ static void accept_call_in_send_only_base(LinphoneCoreManager* pauline, Linphone linphone_core_set_video_device(marie->lc,"Mire: Mire (synthetic moving picture)"); linphone_call_set_next_video_frame_decoded_callback(linphone_core_invite_address(pauline->lc,marie->identity) - ,linphone_call_cb + ,linphone_call_iframe_decoded_cb ,pauline->lc); diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index f04380203..660505049 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -310,7 +310,7 @@ void linphone_core_manager_check_accounts(LinphoneCoreManager *m); void account_manager_destroy(void); LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* path, const char* file, void* user_data); void liblinphone_tester_enable_ipv6(bool_t enabled); -void linphone_call_cb(LinphoneCall *call,void * user_data); +void linphone_call_iframe_decoded_cb(LinphoneCall *call,void * user_data); void call_paused_resumed_base(bool_t multicast); void simple_call_base(bool_t enable_multicast_recv_side); void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video,bool_t enable_relay,LinphoneFirewallPolicy policy,bool_t enable_tunnel, const char *marie_rc, const char *pauline_rc); diff --git a/tester/multicast_call_tester.c b/tester/multicast_call_tester.c index 4bb4f0334..437867329 100644 --- a/tester/multicast_call_tester.c +++ b/tester/multicast_call_tester.c @@ -58,7 +58,7 @@ static void call_multicast_base(bool_t video) { BC_ASSERT_GREATER(linphone_core_manager_get_max_audio_down_bw(marie),70,int,"%d"); if (video) { /*check video path*/ - linphone_call_set_next_video_frame_decoded_callback(linphone_core_get_current_call(marie->lc),linphone_call_cb,marie->lc); + linphone_call_set_next_video_frame_decoded_callback(linphone_core_get_current_call(marie->lc),linphone_call_iframe_decoded_cb,marie->lc); linphone_call_send_vfu_request(linphone_core_get_current_call(marie->lc)); BC_ASSERT_TRUE( wait_for(marie->lc,pauline->lc,&marie->stat.number_of_IframeDecoded,1)); } @@ -147,7 +147,7 @@ static void early_media_with_multicast_base(bool_t video) { /* send a 183 to initiate the early media */ if (video) { /*check video path*/ - linphone_call_set_next_video_frame_decoded_callback(linphone_core_get_current_call(pauline->lc),linphone_call_cb,pauline->lc); + linphone_call_set_next_video_frame_decoded_callback(linphone_core_get_current_call(pauline->lc),linphone_call_iframe_decoded_cb,pauline->lc); } linphone_core_accept_early_media(pauline->lc, linphone_core_get_current_call(pauline->lc)); @@ -158,7 +158,7 @@ static void early_media_with_multicast_base(bool_t video) { /* send a 183 to initiate the early media */ if (video) { /*check video path*/ - linphone_call_set_next_video_frame_decoded_callback(linphone_core_get_current_call(pauline2->lc),linphone_call_cb,pauline2->lc); + linphone_call_set_next_video_frame_decoded_callback(linphone_core_get_current_call(pauline2->lc),linphone_call_iframe_decoded_cb,pauline2->lc); } linphone_core_accept_early_media(pauline2->lc, linphone_core_get_current_call(pauline2->lc)); diff --git a/tester/video_tester.c b/tester/video_tester.c index 91b90c7ff..abffb59ab 100644 --- a/tester/video_tester.c +++ b/tester/video_tester.c @@ -430,28 +430,44 @@ static void forked_outgoing_early_media_video_call_with_inactive_audio_test(void linphone_core_invite_address_with_params(pauline->lc, marie1->identity, pauline_params); linphone_call_params_destroy(pauline_params); + + BC_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallIncomingReceived, 1, 3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallIncomingReceived, 1, 3000)); + + marie1_call = linphone_core_get_current_call(marie1->lc); + marie2_call = linphone_core_get_current_call(marie2->lc); + + if (marie1_call){ + linphone_call_set_next_video_frame_decoded_callback(marie1_call, linphone_call_iframe_decoded_cb, marie1->lc); + } + if (marie2_call){ + linphone_call_set_next_video_frame_decoded_callback(marie2_call, linphone_call_iframe_decoded_cb, marie2->lc); + } BC_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallIncomingEarlyMedia, 1, 3000)); BC_ASSERT_TRUE(wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallIncomingEarlyMedia, 1, 3000)); BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallOutgoingEarlyMedia, 1, 3000)); pauline_call = linphone_core_get_current_call(pauline->lc); - marie1_call = linphone_core_get_current_call(marie1->lc); - marie2_call = linphone_core_get_current_call(marie2->lc); + BC_ASSERT_PTR_NOT_NULL(pauline_call); BC_ASSERT_PTR_NOT_NULL(marie1_call); BC_ASSERT_PTR_NOT_NULL(marie2_call); if (pauline_call && marie1_call && marie2_call) { + linphone_call_set_next_video_frame_decoded_callback(pauline_call, linphone_call_iframe_decoded_cb, pauline->lc); + /* wait a bit that streams are established */ - wait_for_list(lcs, &dummy, 1, 6000); + wait_for_list(lcs, &dummy, 1, 3000); BC_ASSERT_EQUAL(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 0, float, "%f"); BC_ASSERT_EQUAL(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 0, float, "%f"); BC_ASSERT_EQUAL(linphone_call_get_audio_stats(marie2_call)->download_bandwidth, 0, float, "%f"); - BC_ASSERT_LOWER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 11, float, "%f"); /*3 because of stun packets*/ + BC_ASSERT_LOWER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 11, float, "%f"); /* because of stun packets*/ BC_ASSERT_GREATER(linphone_call_get_video_stats(marie1_call)->download_bandwidth, 0, float, "%f"); BC_ASSERT_GREATER(linphone_call_get_video_stats(marie2_call)->download_bandwidth, 0, float, "%f"); + BC_ASSERT_GREATER(marie1->stat.number_of_IframeDecoded, 1, int, "%i"); + BC_ASSERT_GREATER(marie2->stat.number_of_IframeDecoded, 1, int, "%i"); linphone_call_params_set_audio_direction(marie1_params, LinphoneMediaDirectionSendRecv); linphone_core_accept_call_with_params(marie1->lc, linphone_core_get_current_call(marie1->lc), marie1_params); @@ -465,8 +481,9 @@ static void forked_outgoing_early_media_video_call_with_inactive_audio_test(void wait_for_list(lcs, &dummy, 1, 3000); BC_ASSERT_GREATER(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 71, float, "%f"); BC_ASSERT_GREATER(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 71, float, "%f"); - BC_ASSERT_LOWER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 11, float, "%f"); - BC_ASSERT_LOWER(linphone_call_get_video_stats(marie1_call)->download_bandwidth, 11, float, "%f"); + BC_ASSERT_GREATER(linphone_call_get_video_stats(pauline_call)->download_bandwidth, 0, float, "%f"); + BC_ASSERT_GREATER(linphone_call_get_video_stats(marie1_call)->download_bandwidth, 0, float, "%f"); + BC_ASSERT_GREATER(pauline->stat.number_of_IframeDecoded, 1, int, "%i"); /* send an INFO in reverse side to check that dialogs are properly established */ info = linphone_core_create_info_message(marie1->lc); From 0d87a22d1dd050cb0d7431085b99546d5cd94ff1 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Thu, 3 Sep 2015 21:21:16 +0200 Subject: [PATCH 115/134] fix bugs in Paused state management. It was possible to transition from Paused to PausedByRemote, which actually breaks the Paused state, and eventually allows the pauser to be resumed by the paused. --- coreapi/call_params.c | 3 + coreapi/call_params.h | 2 +- coreapi/callbacks.c | 19 ++-- coreapi/linphonecall.c | 29 +++++- coreapi/linphonecore.c | 41 ++++---- coreapi/private.h | 2 +- coreapi/sal.c | 17 +-- tester/call_tester.c | 200 +++++++++++++++++++++++++++--------- tester/liblinphone_tester.h | 2 + tester/tester.c | 7 ++ 10 files changed, 229 insertions(+), 93 deletions(-) diff --git a/coreapi/call_params.c b/coreapi/call_params.c index 828fba70c..f9a1a1a4d 100644 --- a/coreapi/call_params.c +++ b/coreapi/call_params.c @@ -43,6 +43,9 @@ SalStreamDir sal_dir_from_call_params_dir(LinphoneMediaDirection cpdir) { return SalStreamRecvOnly; case LinphoneMediaDirectionSendRecv: return SalStreamSendRecv; + case LinphoneMediaDirectionInvalid: + ms_error("LinphoneMediaDirectionInvalid shall not be used."); + return SalStreamInactive; } return SalStreamSendRecv; } diff --git a/coreapi/call_params.h b/coreapi/call_params.h index 29c0a1223..a45eb8999 100644 --- a/coreapi/call_params.h +++ b/coreapi/call_params.h @@ -34,11 +34,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Indicates for a given media the stream direction * */ enum _LinphoneMediaDirection { + LinphoneMediaDirectionInvalid = -1, LinphoneMediaDirectionInactive, /** No active media not supported yet*/ LinphoneMediaDirectionSendOnly, /** Send only mode*/ LinphoneMediaDirectionRecvOnly, /** recv only mode*/ LinphoneMediaDirectionSendRecv, /** send receive*/ - }; /** * Typedef for enum diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index 015f10615..0f62eb9a0 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -329,7 +329,7 @@ static void call_received(SalOp *h){ call=linphone_call_new_incoming(lc,from_addr,to_addr,h); - linphone_call_make_local_media_description(lc,call); + linphone_call_make_local_media_description(call); sal_call_set_local_media_description(call->op,call->localdesc); md=sal_call_get_final_media_description(call->op); if (md){ @@ -637,7 +637,12 @@ static void call_updated(LinphoneCore *lc, LinphoneCall *call, SalOp *op, bool_t if (sal_media_description_has_dir(rmd,SalStreamSendRecv) || sal_media_description_has_dir(rmd,SalStreamRecvOnly)){ call_resumed(lc,call); }else{ - _linphone_core_accept_call_update(lc,call,NULL,call->state,linphone_call_state_to_string(call->state)); + /*we are staying in PausedByRemote*/ + linphone_core_notify_display_status(lc,_("Call is updated by remote.")); + linphone_call_set_state(call, LinphoneCallUpdatedByRemote,"Call updated by remote"); + if (call->defer_update == FALSE){ + linphone_core_accept_call_update(lc,call,NULL); + } } break; /*SIP UPDATE CASE*/ @@ -662,12 +667,8 @@ static void call_updated(LinphoneCore *lc, LinphoneCall *call, SalOp *op, bool_t } break; case LinphoneCallPaused: - if (sal_media_description_has_dir(rmd,SalStreamSendOnly) || sal_media_description_has_dir(rmd,SalStreamInactive)){ - call_paused_by_remote(lc,call); - }else{ - /*we'll remain in pause state but accept the offer anyway according to default parameters*/ - _linphone_core_accept_call_update(lc,call,NULL,call->state,linphone_call_state_to_string(call->state)); - } + /*we'll remain in pause state but accept the offer anyway according to default parameters*/ + _linphone_core_accept_call_update(lc,call,NULL,call->state,linphone_call_state_to_string(call->state)); break; case LinphoneCallUpdating: case LinphoneCallPausing: @@ -702,7 +703,7 @@ static void call_updating(SalOp *op, bool_t is_update){ } if (call->state!=LinphoneCallPaused){ /*Refresh the local description, but in paused state, we don't change anything.*/ - linphone_call_make_local_media_description(lc,call); + linphone_call_make_local_media_description(call); sal_call_set_local_media_description(call->op,call->localdesc); } if (rmd == NULL){ diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index d4c9f43d5..45a78f47f 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -582,11 +582,30 @@ static const char *linphone_call_get_public_ip_for_stream(LinphoneCall *call, in return public_ip; } -void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *call) { - linphone_call_make_local_media_description_with_params(lc, call, call->params); +static void force_streams_dir_according_to_state(LinphoneCall *call, SalMediaDescription *md){ + int i; + + switch (call->state){ + case LinphoneCallPausing: + case LinphoneCallPaused: + break; + default: + return; + break; + } + + for (i=0; i<2; ++i){ + SalStreamDescription *sd = &md->streams[i]; + sd->dir = SalStreamSendOnly; + if (sd->type == SalVideo){ + if (lp_config_get_int(call->core->config, "sip", "inactive_video_on_pause", 0)) { + sd->dir = SalStreamInactive; + } + } + } } -void linphone_call_make_local_media_description_with_params(LinphoneCore *lc, LinphoneCall *call, LinphoneCallParams *params) { +void linphone_call_make_local_media_description(LinphoneCall *call) { MSList *l; SalMediaDescription *old_md=call->localdesc; int i; @@ -595,6 +614,9 @@ void linphone_call_make_local_media_description_with_params(LinphoneCore *lc, Li LinphoneAddress *addr; const char *subject; CodecConstraints codec_hints={0}; + LinphoneCallParams *params = call->params; + LinphoneCore *lc = call->core; + /*multicast is only set in case of outgoing call*/ if (call->dir == LinphoneCallOutgoing && linphone_call_params_audio_multicast_enabled(params)) { @@ -718,6 +740,7 @@ void linphone_call_make_local_media_description_with_params(LinphoneCore *lc, Li call->localdesc_changed=sal_media_description_equals(md,old_md); sal_media_description_unref(old_md); } + force_streams_dir_according_to_state(call, md); } static int find_port_offset(LinphoneCore *lc, int stream_index, int base_port){ diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 19bb7b5a1..3d124d147 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -2768,7 +2768,7 @@ int linphone_core_start_invite(LinphoneCore *lc, LinphoneCall *call, const Linph linphone_call_set_contact_op(call); linphone_core_stop_dtmf_stream(lc); - linphone_call_make_local_media_description(lc,call); + linphone_call_make_local_media_description(call); if (lc->ringstream==NULL) { if (lc->sound_conf.play_sndcard && lc->sound_conf.capt_sndcard){ @@ -3171,7 +3171,7 @@ int linphone_core_accept_early_media_with_params(LinphoneCore* lc, LinphoneCall* // if parameters are passed, update the media description if ( params ) { linphone_call_set_new_params(call,params); - linphone_call_make_local_media_description ( lc,call ); + linphone_call_make_local_media_description (call); sal_call_set_local_media_description ( call->op,call->localdesc ); sal_op_set_sent_custom_header ( call->op,params->custom_headers ); } @@ -3209,7 +3209,7 @@ int linphone_core_start_update_call(LinphoneCore *lc, LinphoneCall *call){ linphone_call_fill_media_multicast_addr(call); - if (!no_user_consent) linphone_call_make_local_media_description(lc,call); + if (!no_user_consent) linphone_call_make_local_media_description(call); #ifdef BUILD_UPNP if(call->upnp_session != NULL) { linphone_core_update_local_media_description_from_upnp(call->localdesc, call->upnp_session); @@ -3350,15 +3350,24 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho * the call state notification, to deactivate the automatic answer that would just confirm the audio but reject the video. * Then, when the user responds to dialog prompt, it becomes possible to call linphone_core_accept_call_update() to answer * the reINVITE, with eventually video enabled in the LinphoneCallParams argument. + * + * The #LinphoneCallUpdatedByRemote notification can also arrive when receiving an INVITE without SDP. In such case, an unchanged offer is made + * in the 200Ok, and when the ACK containing the SDP answer is received, #LinphoneCallUpdatedByRemote is triggered to notify the application of possible + * changes in the media session. However in such case defering the update has no meaning since we just generating an offer. * - * @return 0 if successful, -1 if the linphone_core_defer_call_update() was done outside a #LinphoneCallUpdatedByRemote notification, which is illegal. + * @return 0 if successful, -1 if the linphone_core_defer_call_update() was done outside a valid #LinphoneCallUpdatedByRemote notification. **/ int linphone_core_defer_call_update(LinphoneCore *lc, LinphoneCall *call){ if (call->state==LinphoneCallUpdatedByRemote){ + if (call->expect_media_in_ack){ + ms_error("linphone_core_defer_call_update() is not possible during a late offer incoming reINVITE (INVITE without SDP)"); + return -1; + } call->defer_update=TRUE; return 0; + }else{ + ms_error("linphone_core_defer_call_update() not done in state LinphoneCallUpdatedByRemote"); } - ms_error("linphone_core_defer_call_update() not done in state LinphoneCallUpdatedByRemote"); return -1; } @@ -3370,7 +3379,7 @@ int linphone_core_start_accept_call_update(LinphoneCore *lc, LinphoneCall *call, return 0; } } - linphone_call_make_local_media_description(lc,call); + linphone_call_make_local_media_description(call); linphone_call_update_remote_session_id_and_ver(call); linphone_call_stop_ice_for_inactive_streams(call); @@ -3587,7 +3596,7 @@ int linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call, linphone_call_set_compatible_incoming_call_parameters(call, md); } linphone_call_prepare_ice(call,TRUE); - linphone_call_make_local_media_description(lc,call); + linphone_call_make_local_media_description(call); sal_call_set_local_media_description(call->op,call->localdesc); sal_op_set_sent_custom_header(call->op,params->custom_headers); } @@ -3797,10 +3806,8 @@ int linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call){ } /* Internal version that does not play tone indication*/ -int _linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call) -{ +int _linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call){ const char *subject=NULL; - LinphoneCallParams *params; if (call->state!=LinphoneCallStreamsRunning && call->state!=LinphoneCallPausedByRemote){ ms_warning("Cannot pause this call, it is not active."); @@ -3814,15 +3821,8 @@ int _linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call) ms_error("No reason to pause this call, it is already paused or inactive."); return -1; } - params = linphone_call_params_copy(call->params); - linphone_call_params_set_audio_direction(params, LinphoneMediaDirectionSendOnly); - if (lp_config_get_int(lc->config, "sip", "inactive_video_on_pause", 0)) { - linphone_call_params_set_video_direction(params, LinphoneMediaDirectionInactive); - } else { - linphone_call_params_set_video_direction(params, LinphoneMediaDirectionSendOnly); - } - linphone_call_make_local_media_description_with_params(lc, call, params); - linphone_call_params_unref(params); + linphone_call_set_state(call, LinphoneCallPausing, "Pausing call"); + linphone_call_make_local_media_description(call); #ifdef BUILD_UPNP if(call->upnp_session != NULL) { linphone_core_update_local_media_description_from_upnp(call->localdesc, call->upnp_session); @@ -3836,7 +3836,6 @@ int _linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call) linphone_core_notify_display_status(lc,_("Pausing the current call...")); if (call->audiostream || call->videostream) linphone_call_stop_media_streams (call); - linphone_call_set_state(call,LinphoneCallPausing,"Pausing call"); call->paused_by_app=FALSE; return 0; } @@ -3903,7 +3902,7 @@ int linphone_core_resume_call(LinphoneCore *lc, LinphoneCall *call){ prevents the participants to hear it while the 200OK comes back.*/ if (call->audiostream) audio_stream_play(call->audiostream, NULL); - linphone_call_make_local_media_description(lc,call); + linphone_call_make_local_media_description(call); #ifdef BUILD_UPNP if(call->upnp_session != NULL) { linphone_core_update_local_media_description_from_upnp(call->localdesc, call->upnp_session); diff --git a/coreapi/private.h b/coreapi/private.h index da3290788..4c8f1e1f4 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -897,7 +897,7 @@ int linphone_core_set_as_current_call(LinphoneCore *lc, LinphoneCall *call); int linphone_core_get_calls_nb(const LinphoneCore *lc); void linphone_core_set_state(LinphoneCore *lc, LinphoneGlobalState gstate, const char *message); -void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *call); +void linphone_call_make_local_media_description(LinphoneCall *call); void linphone_call_make_local_media_description_with_params(LinphoneCore *lc, LinphoneCall *call, LinphoneCallParams *params); void linphone_call_increment_local_media_description(LinphoneCall *call); void linphone_call_fill_media_multicast_addr(LinphoneCall *call); diff --git a/coreapi/sal.c b/coreapi/sal.c index c9f3facf7..efbc2ea0d 100644 --- a/coreapi/sal.c +++ b/coreapi/sal.c @@ -160,26 +160,27 @@ static bool_t is_null_address(const char *addr){ /*check for the presence of at least one stream with requested direction */ static bool_t has_dir(const SalMediaDescription *md, SalStreamDir stream_dir){ int i; - + /* we are looking for at least one stream with requested direction, inactive streams are ignored*/ for(i=0;inb_streams;++i){ const SalStreamDescription *ss=&md->streams[i]; if (!sal_stream_description_active(ss)) continue; - if (ss->dir==stream_dir) return TRUE; - /*compatibility check for phones that only used the null address and no attributes */ - if (ss->dir==SalStreamSendRecv && stream_dir==SalStreamSendOnly && (is_null_address(md->addr) || is_null_address(ss->rtp_addr))) + if (ss->dir==stream_dir) { return TRUE; + } + /*compatibility check for phones that only used the null address and no attributes */ + if (ss->dir==SalStreamSendRecv && stream_dir==SalStreamSendOnly && (is_null_address(md->addr) || is_null_address(ss->rtp_addr))){ + return TRUE; + } } return FALSE; } bool_t sal_media_description_has_dir(const SalMediaDescription *md, SalStreamDir stream_dir){ if (stream_dir==SalStreamRecvOnly){ - if (has_dir(md,SalStreamSendOnly) || has_dir(md,SalStreamSendRecv)) return FALSE; - else return TRUE; + return has_dir(md, SalStreamRecvOnly) && !(has_dir(md,SalStreamSendOnly) || has_dir(md,SalStreamSendRecv)); }else if (stream_dir==SalStreamSendOnly){ - if (has_dir(md,SalStreamRecvOnly) || has_dir(md,SalStreamSendRecv)) return FALSE; - else return TRUE; + return has_dir(md, SalStreamSendOnly) && !(has_dir(md,SalStreamRecvOnly) || has_dir(md,SalStreamSendRecv)); }else if (stream_dir==SalStreamSendRecv){ return has_dir(md,SalStreamSendRecv); }else{ diff --git a/tester/call_tester.c b/tester/call_tester.c index 809a9dec9..953632bb7 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -1240,6 +1240,74 @@ end: static void call_paused_resumed(void) { call_paused_resumed_base(FALSE); } + +static void call_paused_by_both() { + LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); + LinphoneCall* call_pauline, *call_marie; + const rtp_stats_t * stats; + MSList *lcs = NULL; + bool_t call_ok; + + lcs = ms_list_append(lcs, pauline->lc); + lcs = ms_list_append(lcs, marie->lc); + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); + + if (!call_ok) goto end; + + call_pauline = linphone_core_get_current_call(pauline->lc); + call_marie = linphone_core_get_current_call(marie->lc); + + wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); + + linphone_core_pause_call(pauline->lc,call_pauline); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); + + /*stay in pause a little while in order to generate traffic*/ + wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); + + /*marie pauses the call also*/ + linphone_core_pause_call(marie->lc, call_marie); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausing,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPaused,1)); + + wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); + /*pauline must stay in paused state*/ + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallPaused, 1, int, "%i"); + check_media_direction(pauline, call_pauline, lcs, LinphoneMediaDirectionInactive, LinphoneMediaDirectionInvalid); + check_media_direction(marie, call_marie, lcs, LinphoneMediaDirectionInactive, LinphoneMediaDirectionInvalid); + + + /*now pauline wants to resume*/ + linphone_core_resume_call(pauline->lc, call_pauline); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallResuming,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); + /*Marie must stay in paused state*/ + wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallPaused, 1, int, "%i"); + + /*now marie wants to resume also*/ + linphone_core_resume_call(marie->lc, call_marie); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallResuming,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + /*same here: wait a while for a bit of a traffic, we need to receive a RTCP packet*/ + wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); + + /*since RTCP streams are reset when call is paused/resumed, there should be no loss at all*/ + stats = rtp_session_get_stats(call_pauline->sessions->rtp_session); + BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); + + end_call(marie, pauline); + +end: + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); + ms_list_free(lcs); +} + #define CHECK_CURRENT_LOSS_RATE() \ rtcp_count_current = pauline->stat.number_of_rtcp_sent; \ /*wait for an RTCP packet to have an accurate cumulative lost value*/ \ @@ -3225,48 +3293,59 @@ void check_media_direction(LinphoneCoreManager* mgr, LinphoneCall *call, MSList* if (call) { const LinphoneCallParams *params = linphone_call_get_current_params(call); #ifdef VIDEO_ENABLED - int current_recv_iframe = mgr->stat.number_of_IframeDecoded; - int expected_recv_iframe=0; - int dummy = 0; + if (video_dir != LinphoneMediaDirectionInvalid){ + int current_recv_iframe = mgr->stat.number_of_IframeDecoded; + int expected_recv_iframe=0; + int dummy = 0; - BC_ASSERT_EQUAL(video_dir,linphone_call_params_get_video_direction(params), int, "%d"); - linphone_call_set_next_video_frame_decoded_callback(call,linphone_call_iframe_decoded_cb,mgr->lc); - linphone_call_send_vfu_request(call); + if (video_dir != LinphoneMediaDirectionInactive){ + BC_ASSERT_TRUE(linphone_call_params_video_enabled(params)); + } + BC_ASSERT_EQUAL(linphone_call_params_get_video_direction(params), video_dir, int, "%d"); + linphone_call_set_next_video_frame_decoded_callback(call,linphone_call_iframe_decoded_cb,mgr->lc); + linphone_call_send_vfu_request(call); - wait_for_list(lcs,&dummy,1,2000); /*on some device, it may take 3 to 4s to get audio from mic*/ + wait_for_list(lcs,&dummy,1,2000); /*on some device, it may take 3 to 4s to get audio from mic*/ - switch (video_dir) { - case LinphoneMediaDirectionInactive: - BC_ASSERT_TRUE(linphone_call_get_video_stats(call)->upload_bandwidth<5); - case LinphoneMediaDirectionSendOnly: - expected_recv_iframe = 0; - BC_ASSERT_TRUE(linphone_call_get_video_stats(call)->download_bandwidth<5); - break; - case LinphoneMediaDirectionRecvOnly: - BC_ASSERT_TRUE(linphone_call_get_video_stats(call)->upload_bandwidth<5); - case LinphoneMediaDirectionSendRecv: - expected_recv_iframe = 1; - break; - } - - BC_ASSERT_TRUE(wait_for_list(lcs, &mgr->stat.number_of_IframeDecoded,current_recv_iframe + expected_recv_iframe,3000)); -#endif - BC_ASSERT_EQUAL(audio_dir,linphone_call_params_get_audio_direction(params), int, "%d"); - switch (audio_dir) { + switch (video_dir) { case LinphoneMediaDirectionInactive: - BC_ASSERT_TRUE(linphone_call_get_audio_stats(call)->upload_bandwidth<5); + BC_ASSERT_TRUE(linphone_call_get_video_stats(call)->upload_bandwidth<5); case LinphoneMediaDirectionSendOnly: + expected_recv_iframe = 0; BC_ASSERT_TRUE(linphone_call_get_video_stats(call)->download_bandwidth<5); - if (audio_dir == LinphoneMediaDirectionSendOnly) BC_ASSERT_TRUE(wait_for_list(lcs,mgr->stat.current_audio_upload_bandwidth,70,4000)); break; case LinphoneMediaDirectionRecvOnly: - BC_ASSERT_TRUE(linphone_call_get_audio_stats(call)->upload_bandwidth<5); + BC_ASSERT_TRUE(linphone_call_get_video_stats(call)->upload_bandwidth<5); case LinphoneMediaDirectionSendRecv: - BC_ASSERT_TRUE(wait_for_list(lcs,mgr->stat.current_audio_download_bandwidth,70,4000)); - if (audio_dir == LinphoneMediaDirectionSendRecv) BC_ASSERT_TRUE(wait_for_list(lcs,mgr->stat.current_audio_upload_bandwidth,70,4000)); + expected_recv_iframe = 1; + break; + default: break; } + + BC_ASSERT_TRUE(wait_for_list(lcs, &mgr->stat.number_of_IframeDecoded,current_recv_iframe + expected_recv_iframe,3000)); + } +#endif + if (audio_dir != LinphoneMediaDirectionInvalid){ + BC_ASSERT_EQUAL(linphone_call_params_get_audio_direction(params), audio_dir, int, "%d"); + switch (audio_dir) { + case LinphoneMediaDirectionInactive: + BC_ASSERT_TRUE(linphone_call_get_audio_stats(call)->upload_bandwidth<5); + case LinphoneMediaDirectionSendOnly: + BC_ASSERT_TRUE(linphone_call_get_video_stats(call)->download_bandwidth<5); + if (audio_dir == LinphoneMediaDirectionSendOnly) BC_ASSERT_TRUE(wait_for_list(lcs,mgr->stat.current_audio_upload_bandwidth,70,4000)); + break; + case LinphoneMediaDirectionRecvOnly: + BC_ASSERT_TRUE(linphone_call_get_audio_stats(call)->upload_bandwidth<5); + case LinphoneMediaDirectionSendRecv: + BC_ASSERT_TRUE(wait_for_list(lcs,mgr->stat.current_audio_download_bandwidth,70,4000)); + if (audio_dir == LinphoneMediaDirectionSendRecv) BC_ASSERT_TRUE(wait_for_list(lcs,mgr->stat.current_audio_upload_bandwidth,70,4000)); + break; + default: + break; + } + } } } @@ -3281,11 +3360,11 @@ static void accept_call_in_send_only_base(LinphoneCoreManager* pauline, Linphone linphone_core_enable_video(pauline->lc,TRUE,TRUE); linphone_core_set_video_policy(pauline->lc,&pol); - linphone_core_set_video_device(pauline->lc,"Mire: Mire (synthetic moving picture)"); + linphone_core_set_video_device(pauline->lc,liblinphone_tester_mire_id); linphone_core_enable_video(marie->lc,TRUE,TRUE); linphone_core_set_video_policy(marie->lc,&pol); - linphone_core_set_video_device(marie->lc,"Mire: Mire (synthetic moving picture)"); + linphone_core_set_video_device(marie->lc,liblinphone_tester_mire_id); linphone_call_set_next_video_frame_decoded_callback(linphone_core_invite_address(pauline->lc,marie->identity) ,linphone_call_iframe_decoded_cb @@ -4095,8 +4174,8 @@ static void video_call_with_re_invite_inactive_followed_by_re_invite_base(Linpho marie = linphone_core_manager_new( "marie_rc"); pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); linphone_core_set_avpf_mode(pauline->lc,TRUE); - linphone_core_set_video_device(pauline->lc,"Mire: Mire (synthetic moving picture)"); - linphone_core_set_video_device(marie->lc,"Mire: Mire (synthetic moving picture)"); + linphone_core_set_video_device(pauline->lc,liblinphone_tester_mire_id); + linphone_core_set_video_device(marie->lc,liblinphone_tester_mire_id); linphone_core_set_avpf_mode(marie->lc,TRUE); lcs=ms_list_append(lcs,pauline->lc); lcs=ms_list_append(lcs,marie->lc); @@ -4281,13 +4360,24 @@ static void call_with_complex_late_offering(void){ LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); LinphoneCall* call_pauline; LinphoneCall* call_marie; + LinphoneVideoPolicy vpol = {TRUE, TRUE}; + bool_t call_ok; - BC_ASSERT_TRUE(call(pauline,marie)); + linphone_core_enable_video(pauline->lc, TRUE, TRUE); + linphone_core_enable_video(marie->lc, TRUE, TRUE); + linphone_core_set_video_policy(pauline->lc, &vpol); + linphone_core_set_video_policy(marie->lc, &vpol); + linphone_core_set_video_device(pauline->lc,liblinphone_tester_mire_id); + linphone_core_set_video_device(marie->lc,liblinphone_tester_mire_id); + + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); + if (!call_ok) goto end; call_pauline = linphone_core_get_current_call(pauline->lc); call_marie = linphone_core_get_current_call(marie->lc); //Invite inactive Audio/video (Marie pause Pauline) + ms_message("CONTEXT: Marie sends INVITE with SDP with all streams inactive"); params=linphone_core_create_call_params(marie->lc,call_marie); linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionInactive); linphone_call_params_set_video_direction(params,LinphoneMediaDirectionInactive); @@ -4295,66 +4385,75 @@ static void call_with_complex_late_offering(void){ linphone_core_update_call(marie->lc, call_marie ,params); linphone_call_params_destroy(params); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); - //Marie send INVITE without SDP + //Marie sends INVITE without SDP + ms_message("CONTEXT: Marie sends INVITE without SDP for setting streams in send-only mode"); linphone_core_enable_sdp_200_ack(marie->lc,TRUE); params=linphone_core_create_call_params(marie->lc,call_marie); linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionSendOnly); linphone_call_params_set_video_direction(params,LinphoneMediaDirectionSendOnly); linphone_core_update_call(marie->lc, call_marie , params); linphone_call_params_destroy(params); - + //Pauline OK with sendonly - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,3)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,2)); linphone_core_enable_sdp_200_ack(marie->lc,FALSE); - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); //Pauline pause Marie + ms_message("CONTEXT: Pauline pauses the call"); linphone_core_pause_call(pauline->lc,call_pauline); BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); //Pauline resume Marie - wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); + ms_message("CONTEXT: Pauline resumes the call"); + wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); linphone_core_resume_call(pauline->lc,call_pauline); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,4)); BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallResuming,1)); - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,3)); wait_for_until(pauline->lc, marie->lc, NULL, 0, 2000); //Marie invite inactive Audio/Video + ms_message("CONTEXT: Marie sends INVITE with SDP with all streams inactive"); params=linphone_core_create_call_params(marie->lc,call_marie); linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionInactive); linphone_call_params_set_video_direction(params,LinphoneMediaDirectionInactive); linphone_core_update_call(marie->lc, call_marie,params); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,3)); linphone_call_params_destroy(params); - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,3)); - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,3)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,4)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,5)); - //Marie send INVITE without SDP + //Marie sends INVITE without SDP + ms_message("CONTEXT: Marie sends INVITE without SDP in the purpose of re-enabling streams in sendrecv mode"); linphone_core_enable_sdp_200_ack(marie->lc,TRUE); params=linphone_core_create_call_params(marie->lc,call_marie); linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionSendRecv); linphone_call_params_set_video_direction(params,LinphoneMediaDirectionSendRecv); linphone_core_update_call(marie->lc, call_marie,params); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,3)); linphone_call_params_destroy(params); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallUpdatedByRemote,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,5)); linphone_core_enable_sdp_200_ack(marie->lc,FALSE); - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,4)); - BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,4)); end_call(marie,pauline); - BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); - BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -4830,6 +4929,7 @@ test_t call_tests[] = { { "Call without SDP", call_with_no_sdp}, { "Call without SDP and ACK without SDP", call_with_no_sdp_ack_without_sdp}, { "Call paused resumed", call_paused_resumed }, + { "Call paused by both parties", call_paused_by_both }, { "Call paused resumed with loss", call_paused_resumed_with_loss }, { "Call paused resumed from callee", call_paused_resumed_from_callee }, { "SRTP call", srtp_call }, diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index 660505049..c3db2bf5e 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -335,6 +335,8 @@ int liblinphone_tester_setup(); void liblinphone_tester_init(void(*ftester_printf)(int level, const char *fmt, va_list args)); void liblinphone_tester_uninit(void); +extern const char *liblinphone_tester_mire_id; + #ifdef __cplusplus }; diff --git a/tester/tester.c b/tester/tester.c index b6d6c6980..eded255ed 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -44,6 +44,8 @@ const char* test_password="secret"; const char* test_route="sip2.linphone.org"; const char *userhostsfile = "tester_hosts"; +const char *liblinphone_tester_mire_id="Mire: Mire (synthetic moving picture)"; + static void network_reachable(LinphoneCore *lc, bool_t reachable) { stats* counters; ms_message("Network reachable [%s]",reachable?"TRUE":"FALSE"); @@ -237,6 +239,10 @@ bool_t transport_supported(LinphoneTransportType transport) { } +static void display_status(LinphoneCore *lc, const char *status){ + ms_message("display_status(): %s",status); +} + LinphoneCoreManager* linphone_core_manager_init(const char* rc_file) { LinphoneCoreManager* mgr= ms_new0(LinphoneCoreManager,1); char *rc_path = NULL; @@ -260,6 +266,7 @@ LinphoneCoreManager* linphone_core_manager_init(const char* rc_file) { mgr->v_table.network_reachable=network_reachable; mgr->v_table.dtmf_received=dtmf_received; mgr->v_table.call_stats_updated=call_stats_updated; + mgr->v_table.display_status=display_status; reset_counters(&mgr->stat); if (rc_file) rc_path = ms_strdup_printf("rcfiles/%s", rc_file); From 96bbacec265c9ebb4c3c5abbfe16f2e6e392584e Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Thu, 3 Sep 2015 21:39:35 +0200 Subject: [PATCH 116/134] update ms2 and ortp --- mediastreamer2 | 2 +- oRTP | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mediastreamer2 b/mediastreamer2 index 7a5e76c4d..82849dbb8 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 7a5e76c4d5f9bd1ff28cb7dad177af20269b6441 +Subproject commit 82849dbb8a090ee7e3501b89e87fa2fee7c4b32b diff --git a/oRTP b/oRTP index 8409812bd..7e89236af 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit 8409812bdf023e5f0b10a2d0644d7bf96603d8d2 +Subproject commit 7e89236af6552140d0d6fa3b6878bc13addd8f7d From cf6995ef5c122ed833bb75afe1e9c4dcf6111c7d Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Fri, 4 Sep 2015 14:57:25 +0200 Subject: [PATCH 117/134] clean chat room api. fix multiple memory leaks, mainly in gtk UI --- console/commands.c | 2 +- coreapi/chat.c | 92 ++++++++++++++++++++----------------- coreapi/help/chatroom.c | 3 +- coreapi/help/filetransfer.c | 3 +- coreapi/linphonecore.h | 24 +++------- coreapi/message_storage.c | 6 ++- gtk/calllogs.c | 10 ++-- gtk/chat.c | 19 ++++---- gtk/friendlist.c | 30 ++++++++---- gtk/main.c | 2 +- tester/flexisip_tester.c | 27 +++-------- tester/message_tester.c | 76 +++++++----------------------- tester/setup_tester.c | 6 +-- 13 files changed, 125 insertions(+), 175 deletions(-) diff --git a/console/commands.c b/console/commands.c index 539d33512..f50ed4886 100644 --- a/console/commands.c +++ b/console/commands.c @@ -633,7 +633,7 @@ lpc_cmd_chat(LinphoneCore *lc, char *args) /* missing one parameter */ return 0; } - cr = linphone_core_create_chat_room(lc,arg1); + cr = linphone_core_get_chat_room_from_uri(lc,arg1); linphone_chat_room_send_message(cr,arg2); return 1; } diff --git a/coreapi/chat.c b/coreapi/chat.c index 0c8217733..57e111476 100644 --- a/coreapi/chat.c +++ b/coreapi/chat.c @@ -39,6 +39,9 @@ #define FILE_TRANSFER_KEY_SIZE 32 + +static void linphone_chat_message_release(LinphoneChatMessage *msg); + static LinphoneChatMessageCbs * linphone_chat_message_cbs_new(void) { return belle_sip_object_new(LinphoneChatMessageCbs); } @@ -429,14 +432,6 @@ static LinphoneChatRoom * _linphone_core_get_or_create_chat_room(LinphoneCore* l return ret; } -LinphoneChatRoom* linphone_core_get_or_create_chat_room(LinphoneCore* lc, const char* to) { - return _linphone_core_get_or_create_chat_room(lc, to); -} - -LinphoneChatRoom * linphone_core_create_chat_room(LinphoneCore *lc, const char *to) { - return _linphone_core_get_or_create_chat_room(lc, to); -} - LinphoneChatRoom *linphone_core_get_chat_room(LinphoneCore *lc, const LinphoneAddress *addr){ LinphoneChatRoom *ret = _linphone_core_get_chat_room(lc, addr); if (!ret) { @@ -445,6 +440,17 @@ LinphoneChatRoom *linphone_core_get_chat_room(LinphoneCore *lc, const LinphoneAd return ret; } +void linphone_core_delete_chat_room(LinphoneCore *lc, LinphoneChatRoom *cr){ + if (ms_list_find(lc->chatrooms, cr)){ + lc->chatrooms = ms_list_remove(cr->lc->chatrooms, cr); + linphone_chat_room_unref(cr); + }else{ + ms_error("linphone_core_delete_chat_room(): chatroom [%p] isn't part of LinphoneCore.", + cr); + } + +} + LinphoneChatRoom * linphone_core_get_chat_room_from_uri(LinphoneCore *lc, const char *to) { return _linphone_core_get_or_create_chat_room(lc, to); } @@ -477,12 +483,18 @@ static void linphone_chat_room_delete_remote_composing_refresh_timer(LinphoneCha } static void _linphone_chat_room_destroy(LinphoneChatRoom *cr){ - ms_list_free_with_data(cr->transient_messages, (void (*)(void*))linphone_chat_message_unref); + ms_list_free_with_data(cr->transient_messages, (void (*)(void*))linphone_chat_message_release); linphone_chat_room_delete_composing_idle_timer(cr); linphone_chat_room_delete_composing_refresh_timer(cr); linphone_chat_room_delete_remote_composing_refresh_timer(cr); if (cr->lc != NULL) { - cr->lc->chatrooms=ms_list_remove(cr->lc->chatrooms,(void *) cr); + if (ms_list_find(cr->lc->chatrooms, cr)){ + ms_error("LinphoneChatRoom[%p] is destroyed while still being used by the LinphoneCore. This is abnormal." + " linphone_core_get_chat_room() doesn't give a reference, there is no need to call linphone_chat_room_unref(). " + "In order to remove a chat room from the core, use linphone_core_delete_chat_room().", + cr); + } + cr->lc->chatrooms=ms_list_remove(cr->lc->chatrooms, cr); } linphone_address_destroy(cr->peer_url); ms_free(cr->peer); @@ -794,14 +806,17 @@ static void process_im_is_composing_notification(LinphoneChatRoom *cr, xmlparsin xmlXPathRegisterNs(xml_ctx->xpath_ctx, (const xmlChar *)"xsi", (const xmlChar *)"urn:ietf:params:xml:ns:im-iscomposing"); iscomposing_object = linphone_get_xml_xpath_object_for_node_list(xml_ctx, iscomposing_prefix); - if ((iscomposing_object != NULL) && (iscomposing_object->nodesetval != NULL)) { - for (i = 1; i <= iscomposing_object->nodesetval->nodeNr; i++) { - snprintf(xpath_str, sizeof(xpath_str), "%s[%i]/xsi:state", iscomposing_prefix, i); - state_str = linphone_get_xml_text_content(xml_ctx, xpath_str); - if (state_str == NULL) continue; - snprintf(xpath_str, sizeof(xpath_str), "%s[%i]/xsi:refresh", iscomposing_prefix, i); - refresh_str = linphone_get_xml_text_content(xml_ctx, xpath_str); + if (iscomposing_object != NULL){ + if(iscomposing_object->nodesetval != NULL) { + for (i = 1; i <= iscomposing_object->nodesetval->nodeNr; i++) { + snprintf(xpath_str, sizeof(xpath_str), "%s[%i]/xsi:state", iscomposing_prefix, i); + state_str = linphone_get_xml_text_content(xml_ctx, xpath_str); + if (state_str == NULL) continue; + snprintf(xpath_str, sizeof(xpath_str), "%s[%i]/xsi:refresh", iscomposing_prefix, i); + refresh_str = linphone_get_xml_text_content(xml_ctx, xpath_str); + } } + xmlXPathFreeObject(iscomposing_object); } if (state_str != NULL) { @@ -841,10 +856,12 @@ static void linphone_chat_room_notify_is_composing(LinphoneChatRoom *cr, const c } void linphone_core_is_composing_received(LinphoneCore *lc, SalOp *op, const SalIsComposing *is_composing) { - LinphoneChatRoom *cr = linphone_core_get_or_create_chat_room(lc, is_composing->from); + LinphoneAddress *addr = linphone_address_new(is_composing->from); + LinphoneChatRoom *cr = _linphone_core_get_chat_room(lc, addr); if (cr != NULL) { linphone_chat_room_notify_is_composing(cr, is_composing->text); } + linphone_address_destroy(addr); } bool_t linphone_chat_room_is_remote_composing(const LinphoneChatRoom *cr) { @@ -971,37 +988,22 @@ static char * linphone_chat_room_create_is_composing_xml(LinphoneChatRoom *cr) { static void linphone_chat_room_send_is_composing_notification(LinphoneChatRoom *cr) { SalOp *op = NULL; - LinphoneCall *call; const char *identity = NULL; char *content = NULL; + LinphoneProxyConfig *proxy = linphone_core_lookup_known_proxy(cr->lc, cr->peer_url); + if (proxy) + identity = linphone_proxy_config_get_identity(proxy); + else + identity = linphone_core_get_primary_contact(cr->lc); + /*sending out of calls*/ + op = sal_op_new(cr->lc->sal); + linphone_configure_op(cr->lc, op, cr->peer_url, NULL, lp_config_get_int(cr->lc->config, "sip", "chat_msg_with_contact", 0)); - if (lp_config_get_int(cr->lc->config, "sip", "chat_use_call_dialogs", 0)) { - if ((call = linphone_core_get_call_by_remote_address(cr->lc, cr->peer)) != NULL) { - if (call->state == LinphoneCallConnected || - call->state == LinphoneCallStreamsRunning || - call->state == LinphoneCallPaused || - call->state == LinphoneCallPausing || - call->state == LinphoneCallPausedByRemote) { - ms_message("send SIP message through the existing call."); - op = call->op; - identity = linphone_core_find_best_identity(cr->lc, linphone_call_get_remote_address(call)); - } - } - } - if (op == NULL) { - LinphoneProxyConfig *proxy = linphone_core_lookup_known_proxy(cr->lc, cr->peer_url); - if (proxy) - identity = linphone_proxy_config_get_identity(proxy); - else - identity = linphone_core_get_primary_contact(cr->lc); - /*sending out of calls*/ - op = sal_op_new(cr->lc->sal); - linphone_configure_op(cr->lc, op, cr->peer_url, NULL, lp_config_get_int(cr->lc->config, "sip", "chat_msg_with_contact", 0)); - } content = linphone_chat_room_create_is_composing_xml(cr); if (content != NULL) { sal_message_send(op, identity, cr->peer, "application/im-iscomposing+xml", content, NULL); ms_free(content); + sal_op_unref(op); } } @@ -1402,6 +1404,12 @@ void linphone_chat_message_unref(LinphoneChatMessage *msg){ belle_sip_object_unref(msg); } +static void linphone_chat_message_release(LinphoneChatMessage *msg){ + /*mark the chat message as orphan (it has no chat room anymore), and unref it*/ + msg->chat_room = NULL; + linphone_chat_message_unref(msg); +} + const LinphoneErrorInfo *linphone_chat_message_get_error_info(const LinphoneChatMessage *msg){ return linphone_error_info_from_sal_op(msg->op); } diff --git a/coreapi/help/chatroom.c b/coreapi/help/chatroom.c index 1f0f200a0..62d75bab9 100644 --- a/coreapi/help/chatroom.c +++ b/coreapi/help/chatroom.c @@ -81,7 +81,7 @@ int main(int argc, char *argv[]){ /*Next step is to create a chat root*/ - chat_room = linphone_core_create_chat_room(lc,dest_friend); + chat_room = linphone_core_get_chat_room_from_uri(lc,dest_friend); linphone_chat_room_send_message(chat_room,"Hello world"); /*sending message*/ @@ -92,7 +92,6 @@ int main(int argc, char *argv[]){ } printf("Shutting down...\n"); - linphone_chat_room_destroy(chat_room); linphone_core_destroy(lc); printf("Exited\n"); return 0; diff --git a/coreapi/help/filetransfer.c b/coreapi/help/filetransfer.c index 570e22692..21cb19115 100644 --- a/coreapi/help/filetransfer.c +++ b/coreapi/help/filetransfer.c @@ -160,7 +160,7 @@ int main(int argc, char *argv[]){ /*Next step is to create a chat room*/ - chat_room = linphone_core_create_chat_room(lc,dest_friend); + chat_room = linphone_core_get_chat_room_from_uri(lc,dest_friend); content = linphone_core_create_content(lc); linphone_content_set_type(content,"text"); @@ -196,7 +196,6 @@ int main(int argc, char *argv[]){ printf("Shutting down...\n"); linphone_content_unref(content); - linphone_chat_room_destroy(chat_room); linphone_core_destroy(lc); printf("Exited\n"); return 0; diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index c35bc40ae..53016b499 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -1232,24 +1232,11 @@ typedef LinphoneBuffer * (*LinphoneChatMessageCbsFileTransferSendCb)(LinphoneCha typedef void (*LinphoneChatMessageCbsFileTransferProgressIndicationCb)(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t total); LINPHONE_PUBLIC void linphone_core_set_chat_database_path(LinphoneCore *lc, const char *path); -/** - * Create a new chat room for messaging from a sip uri like sip:joe@sip.linphone.org - * @param lc #LinphoneCore object - * @param to destination address for messages - * @return #LinphoneChatRoom where messaging can take place. - * @deprecated Use linphone_core_get_chat_room() or linphone_core_get_chat_room_from_uri() instead. - */ -LINPHONE_PUBLIC LinphoneChatRoom * linphone_core_create_chat_room(LinphoneCore *lc, const char *to); -/** - * Create a new chat room for messaging from a sip uri like sip:joe@sip.linphone.org if not already existing, else return exisiting one - * @param lc #LinphoneCore object - * @param to destination address for messages - * @return #LinphoneChatRoom where messaging can take place. - * @deprecated Use linphone_core_get_chat_room() or linphone_core_get_chat_room_from_uri() instead. - */ -LINPHONE_PUBLIC LinphoneChatRoom * linphone_core_get_or_create_chat_room(LinphoneCore *lc, const char *to); + + /** * Get a chat room whose peer is the supplied address. If it does not exist yet, it will be created. + * No reference is transfered to the application. The LinphoneCore keeps a reference on the chat room. * @param lc the linphone core * @param addr a linphone address. * @return #LinphoneChatRoom where messaging can take place. @@ -1257,6 +1244,7 @@ LINPHONE_PUBLIC LinphoneChatRoom * linphone_core_get_or_create_chat_room(Linphon LINPHONE_PUBLIC LinphoneChatRoom *linphone_core_get_chat_room(LinphoneCore *lc, const LinphoneAddress *addr); /** * Get a chat room for messaging from a sip uri like sip:joe@sip.linphone.org. If it does not exist yet, it will be created. + * No reference is transfered to the application. The LinphoneCore keeps a reference on the chat room. * @param lc The linphone core * @param to The destination address for messages. * @return #LinphoneChatRoom where messaging can take place. @@ -1356,6 +1344,7 @@ LINPHONE_PUBLIC void linphone_chat_room_send_message(LinphoneChatRoom *cr, const * @param ud user data for the status cb. * @deprecated Use linphone_chat_room_send_chat_message() instead. * @note The LinphoneChatMessage must not be destroyed until the the callback is called. + * The LinphoneChatMessage reference is transfered to the function and thus doesn't need to be unref'd by the application. */ LINPHONE_PUBLIC void linphone_chat_room_send_message2(LinphoneChatRoom *cr, LinphoneChatMessage* msg,LinphoneChatMessageStateChangedCb status_cb,void* ud); /** @@ -1364,6 +1353,7 @@ LINPHONE_PUBLIC void linphone_chat_room_send_message2(LinphoneChatRoom *cr, Linp * @param[in] msg LinphoneChatMessage object * The state of the message sending will be notified via the callbacks defined in the LinphoneChatMessageCbs object that can be obtained * by calling linphone_chat_message_get_callbacks(). + * The LinphoneChatMessage reference is transfered to the function and thus doesn't need to be unref'd by the application. */ LINPHONE_PUBLIC void linphone_chat_room_send_chat_message(LinphoneChatRoom *cr, LinphoneChatMessage *msg); @@ -1583,7 +1573,7 @@ LINPHONE_PUBLIC void linphone_chat_message_set_user_data(LinphoneChatMessage* me **/ LINPHONE_PUBLIC LinphoneChatRoom* linphone_chat_message_get_chat_room(LinphoneChatMessage *msg); /** - * get peer address \link linphone_core_create_chat_room() associated to \endlink this #LinphoneChatRoom + * get peer address \link linphone_core_get_chat_room() associated to \endlink this #LinphoneChatRoom * @param cr #LinphoneChatRoom object * @return #LinphoneAddress peer address */ diff --git a/coreapi/message_storage.c b/coreapi/message_storage.c index ed9f6be34..25d37a1b8 100644 --- a/coreapi/message_storage.c +++ b/coreapi/message_storage.c @@ -100,7 +100,11 @@ static void fetch_content_from_database(sqlite3 *db, LinphoneChatMessage *messag static int callback_all(void *data, int argc, char **argv, char **colName){ LinphoneCore* lc = (LinphoneCore*) data; char* address = argv[0]; - linphone_core_get_or_create_chat_room(lc, address); + LinphoneAddress *addr = linphone_address_new(address); + if (addr){ + linphone_core_get_chat_room(lc, addr); + linphone_address_destroy(addr); + } return 0; } diff --git a/gtk/calllogs.c b/gtk/calllogs.c index a6af60257..4d91c38bd 100644 --- a/gtk/calllogs.c +++ b/gtk/calllogs.c @@ -282,8 +282,7 @@ void linphone_gtk_call_log_update(GtkWidget *w){ LinphoneFriend *lf=NULL; int duration=linphone_call_log_get_duration(cl); time_t start_date_time=linphone_call_log_get_start_date(cl); - GdkPixbuf *incoming; - GdkPixbuf *outgoing; + GdkPixbuf *pbuf; #if GLIB_CHECK_VERSION(2,26,0) if (start_date_time){ @@ -348,14 +347,13 @@ void linphone_gtk_call_log_update(GtkWidget *w){ g_free(seconds); if (start_date) g_free(start_date); gtk_tree_store_append (store,&iter,NULL); - - incoming = create_pixbuf("call_status_incoming.png"); - outgoing = create_pixbuf("call_status_outgoing.png"); + pbuf = linphone_call_log_get_dir(cl)==LinphoneCallOutgoing ? create_pixbuf("call_status_outgoing.png") : create_pixbuf("call_status_incoming.png"); gtk_tree_store_set (store,&iter, - 0, linphone_call_log_get_dir(cl)==LinphoneCallOutgoing ? outgoing : incoming, + 0, pbuf, 1, headtxt,2,cl,-1); gtk_tree_store_append (store,&iter2,&iter); gtk_tree_store_set (store,&iter2,1,logtxt,-1); + g_object_unref(pbuf); ms_free(addr); g_free(logtxt); g_free(headtxt); diff --git a/gtk/chat.c b/gtk/chat.c index 3f3670e75..674b07b76 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -64,7 +64,6 @@ void linphone_gtk_quit_chatroom(LinphoneChatRoom *cr) { GtkWidget *friendlist=linphone_gtk_get_widget(main_window,"contact_list"); GtkWidget *w=g_object_get_data(G_OBJECT(friendlist),"chatview"); gchar *from; - GHashTable *table=g_object_get_data(G_OBJECT(w),"table"); g_return_if_fail(w!=NULL); gtk_notebook_remove_page(GTK_NOTEBOOK(nb),gtk_notebook_page_num(GTK_NOTEBOOK(nb),w)); @@ -76,7 +75,6 @@ void linphone_gtk_quit_chatroom(LinphoneChatRoom *cr) { g_object_set_data(G_OBJECT(w),"from_message",NULL); g_free(from); } - g_hash_table_destroy(table); g_object_set_data(G_OBJECT(w),"cr",NULL); linphone_gtk_friend_list_set_active_address(NULL); gtk_widget_destroy(w); @@ -215,7 +213,7 @@ void linphone_gtk_push_text(GtkWidget *w, const LinphoneAddress *from, g_hash_table_insert(table,(gpointer)msg,GINT_TO_POINTER(gtk_text_iter_get_line(&iter))); gtk_text_buffer_insert_with_tags_by_name(buffer,&iter,"Sending ..",-1, "status", me ? "me" : NULL, NULL); - g_object_set_data(G_OBJECT(w),"table",table); + //g_object_set_data(G_OBJECT(w),"table",table); break; case LinphoneChatMessageStateDelivered: tnow=time(NULL); @@ -293,7 +291,7 @@ void update_chat_state_message(LinphoneChatMessageState state,LinphoneChatMessag } gtk_text_buffer_insert_with_tags_by_name(b,&iter,result,-1, "status", "me", NULL); - g_object_set_data(G_OBJECT(page),"table",table); + //g_object_set_data(G_OBJECT(page),"table",table); } } @@ -348,7 +346,7 @@ void linphone_gtk_free_list(MSList *messages){ } void display_history_message(GtkWidget *chat_view,MSList *messages,const LinphoneAddress *with){ - if(messages != NULL){ + if (messages != NULL){ MSList *it; char *from_str; char *with_str; @@ -361,14 +359,15 @@ void display_history_message(GtkWidget *chat_view,MSList *messages,const Linphon linphone_chat_message_get_from(msg), strcmp(from_str,with_str)==0? FALSE : TRUE, linphone_chat_message_get_chat_room(msg),msg,TRUE); + ms_free(from_str); + ms_free(with_str); } tmp=g_object_get_data(G_OBJECT(chat_view),"from_message"); if (tmp){ g_object_set_data(G_OBJECT(chat_view),"from_message",NULL); g_free(tmp); } - ms_free(from_str); - ms_free(with_str); + linphone_gtk_free_list(messages); } } @@ -497,7 +496,7 @@ GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddres table=g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL); g_object_set_data(G_OBJECT(chat_view),"cr",cr); g_object_set_data(G_OBJECT(chat_view),"from_message",NULL); - g_object_set_data(G_OBJECT(chat_view),"table",table); + g_object_set_data_full(G_OBJECT(chat_view),"table",table,(GDestroyNotify)g_hash_table_destroy); gtk_text_buffer_create_tag( gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), @@ -553,9 +552,7 @@ GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddres } LinphoneChatRoom * linphone_gtk_create_chatroom(const LinphoneAddress *with){ - char *tmp=linphone_address_as_string(with); - LinphoneChatRoom *cr=linphone_core_get_or_create_chat_room(linphone_gtk_get_core(),tmp); - ms_free(tmp); + LinphoneChatRoom *cr=linphone_core_get_chat_room(linphone_gtk_get_core(), with); return cr; } diff --git a/gtk/friendlist.c b/gtk/friendlist.c index 2164e1505..6cd6c8581 100644 --- a/gtk/friendlist.c +++ b/gtk/friendlist.c @@ -243,20 +243,23 @@ void linphone_gtk_friend_list_update_chat_picture(){ int nbmsg=0; if (gtk_tree_model_get_iter_first(model,&iter)) { do{ + GdkPixbuf *pbuf = NULL; gtk_tree_model_get (model, &iter,FRIEND_CHATROOM , &cr, -1); nbmsg=linphone_chat_room_get_unread_messages_count(cr); is_composing=linphone_chat_room_is_remote_composing(cr); if(nbmsg != 0){ if (is_composing == TRUE) - gtk_list_store_set(GTK_LIST_STORE(model),&iter,FRIEND_CHAT,create_composing_unread_msg(),-1); + pbuf = create_composing_unread_msg(); else - gtk_list_store_set(GTK_LIST_STORE(model),&iter,FRIEND_CHAT,create_unread_msg(),-1); + pbuf = create_unread_msg(); } else { if (is_composing == TRUE) - gtk_list_store_set(GTK_LIST_STORE(model),&iter,FRIEND_CHAT,create_composing_chat_picture(),-1); + pbuf = create_composing_chat_picture(); else - gtk_list_store_set(GTK_LIST_STORE(model),&iter,FRIEND_CHAT,create_chat_picture(),-1); + pbuf = create_chat_picture(); } + gtk_list_store_set(GTK_LIST_STORE(model),&iter,FRIEND_CHAT,pbuf,-1); + if (pbuf) g_object_unref(pbuf); }while(gtk_tree_model_iter_next(model,&iter)); } } @@ -269,9 +272,7 @@ static gboolean grab_focus(GtkWidget *w){ void linphone_gtk_friend_list_set_active_address(const LinphoneAddress *addr){ GtkWidget *w=linphone_gtk_get_main_window(); GtkWidget *friendlist=linphone_gtk_get_widget(w,"contact_list"); - LinphoneAddress *old_addr=(LinphoneAddress*)g_object_get_data(G_OBJECT(friendlist),"from"); - g_object_set_data(G_OBJECT(friendlist),"from", addr ? linphone_address_clone(addr) : NULL); - if (old_addr) linphone_address_unref(old_addr); + g_object_set_data_full(G_OBJECT(friendlist),"from", addr ? linphone_address_clone(addr) : NULL, (GDestroyNotify)linphone_address_destroy); } const LinphoneAddress *linphone_gtk_friend_list_get_active_address(void){ @@ -831,6 +832,7 @@ void linphone_gtk_show_friends(void){ char *escaped=NULL; //char buf[26]={0}; int nbmsg=0; + GdkPixbuf *pbuf, *pbuf2, *pbuf3; /*if (lookup){ if (strstr(uri,search)==NULL){ @@ -844,14 +846,22 @@ void linphone_gtk_show_friends(void){ display=linphone_address_get_username(f_uri); } gtk_list_store_append(store,&iter); + pbuf = create_chat_picture(); + pbuf2 = create_call_picture(); + pbuf3 = send_subscribe ? create_status_picture(linphone_friend_get_status(lf)) : NULL; gtk_list_store_set(store,&iter,FRIEND_NAME, display,FRIEND_ID,lf, - FRIEND_PRESENCE_IMG, send_subscribe ? create_status_picture(linphone_friend_get_status(lf)) : NULL, - FRIEND_CHAT,create_chat_picture(),FRIEND_CALL,create_call_picture(),-1); + FRIEND_PRESENCE_IMG, pbuf3, + FRIEND_CHAT,pbuf,FRIEND_CALL,pbuf2,-1); + g_object_unref(pbuf); + g_object_unref(pbuf2); + if (pbuf3) g_object_unref(pbuf3); cr=linphone_gtk_create_chatroom(f_uri); gtk_list_store_set(store,&iter,FRIEND_CHATROOM,cr,-1); nbmsg=linphone_chat_room_get_unread_messages_count(cr); if(nbmsg != 0){ - gtk_list_store_set(store,&iter,FRIEND_CHAT,create_unread_msg(),-1); + pbuf = create_unread_msg(); + gtk_list_store_set(store,&iter,FRIEND_CHAT,pbuf,-1); + g_object_unref(pbuf); } escaped=g_markup_escape_text(uri,-1); gtk_list_store_set(store,&iter,FRIEND_SIP_ADDRESS,escaped,-1); diff --git a/gtk/main.c b/gtk/main.c index af4d13d80..5e967242b 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1750,7 +1750,7 @@ static void linphone_gtk_configure_main_window(){ gchar *tmp; GtkWidget *menu_item=linphone_gtk_get_widget(w,"home_item"); tmp=g_strdup(home); - g_object_set_data(G_OBJECT(menu_item),"home",tmp); + g_object_set_data_full(G_OBJECT(menu_item),"home",tmp, (GDestroyNotify)g_free); } { /* diff --git a/tester/flexisip_tester.c b/tester/flexisip_tester.c index d210aef1f..c2bb8b780 100644 --- a/tester/flexisip_tester.c +++ b/tester/flexisip_tester.c @@ -63,8 +63,7 @@ static void message_forking(void) { LinphoneCoreManager* pauline = linphone_core_manager_new( transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); LinphoneCoreManager* marie2 = linphone_core_manager_new( "marie_rc"); MSList* lcs=ms_list_append(NULL,marie->lc); - char* to = linphone_address_as_string(marie->identity); - LinphoneChatRoom* chat_room = linphone_core_create_chat_room(pauline->lc,to); + LinphoneChatRoom* chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); LinphoneChatMessage* message = linphone_chat_room_create_message(chat_room,"Bli bli bli \n blu"); lcs=ms_list_append(lcs,pauline->lc); @@ -78,7 +77,6 @@ static void message_forking(void) { linphone_core_manager_destroy(marie); linphone_core_manager_destroy(marie2); linphone_core_manager_destroy(pauline); - ms_free(to); ms_list_free(lcs); } @@ -88,8 +86,7 @@ static void message_forking_with_unreachable_recipients(void) { LinphoneCoreManager* marie2 = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* marie3 = linphone_core_manager_new( "marie_rc"); MSList* lcs=ms_list_append(NULL,marie->lc); - char* to = linphone_address_as_string(marie->identity); - LinphoneChatRoom* chat_room = linphone_core_create_chat_room(pauline->lc,to); + LinphoneChatRoom* chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); LinphoneChatMessage* message = linphone_chat_room_create_message(chat_room,"Bli bli bli \n blu"); lcs=ms_list_append(lcs,pauline->lc); @@ -121,7 +118,6 @@ static void message_forking_with_unreachable_recipients(void) { linphone_core_manager_destroy(marie2); linphone_core_manager_destroy(marie3); linphone_core_manager_destroy(pauline); - ms_free(to); ms_list_free(lcs); } @@ -131,8 +127,7 @@ static void message_forking_with_all_recipients_unreachable(void) { LinphoneCoreManager* marie2 = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* marie3 = linphone_core_manager_new( "marie_rc"); MSList* lcs=ms_list_append(NULL,marie->lc); - char* to = linphone_address_as_string(marie->identity); - LinphoneChatRoom* chat_room = linphone_core_create_chat_room(pauline->lc,to); + LinphoneChatRoom* chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); LinphoneChatMessage* message = linphone_chat_room_create_message(chat_room,"Bli bli bli \n blu"); lcs=ms_list_append(lcs,pauline->lc); @@ -172,7 +167,6 @@ static void message_forking_with_all_recipients_unreachable(void) { linphone_core_manager_destroy(marie2); linphone_core_manager_destroy(marie3); linphone_core_manager_destroy(pauline); - ms_free(to); ms_list_free(lcs); } @@ -729,7 +723,6 @@ static void call_with_ipv6(void) { static void file_transfer_message_rcs_to_external_body_client(void) { if (transport_supported(LinphoneTransportTls)) { LinphoneCoreManager* marie = linphone_core_manager_init( "marie_rc"); - char* to; LinphoneChatRoom* chat_room; LinphoneChatMessage* message; LinphoneChatMessageCbs *cbs; @@ -758,9 +751,8 @@ static void file_transfer_message_rcs_to_external_body_client(void) { linphone_core_set_file_transfer_server(pauline->lc,"https://www.linphone.org:444/lft.php"); /* create a chatroom on pauline's side */ - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); - ms_free(to); + + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); /* create a file transfer message */ content = linphone_core_create_content(pauline->lc); linphone_content_set_type(content,"image"); @@ -803,14 +795,12 @@ static void file_transfer_message_rcs_to_external_body_client(void) { } void send_file_transfer_message_using_external_body_url(LinphoneCoreManager *marie, LinphoneCoreManager *pauline) { - char *to; LinphoneChatMessageCbs *cbs; LinphoneChatRoom *chat_room; LinphoneChatMessage *message; /* create a chatroom on pauline's side */ - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); message = linphone_chat_room_create_message(chat_room, NULL); @@ -876,7 +866,6 @@ static void file_transfer_message_external_body_to_rcs_client(void) { } static void dos_module_trigger(void) { - char *to; LinphoneChatRoom *chat_room; int i = 0; const char* passmsg = "This one should pass through"; @@ -887,8 +876,7 @@ static void dos_module_trigger(void) { reset_counters(&marie->stat); reset_counters(&pauline->stat); - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); do { char msg[128]; @@ -913,7 +901,6 @@ static void dos_module_trigger(void) { } linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); - ms_free(to); } test_t flexisip_tests[] = { diff --git a/tester/message_tester.c b/tester/message_tester.c index 6ffaab17d..568b77739 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -183,12 +183,9 @@ void liblinphone_tester_chat_message_msg_state_changed(LinphoneChatMessage *msg, static void text_message(void) { LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc"); - char* to; LinphoneChatRoom* chat_room; - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); - ms_free(to); + chat_room = linphone_core_get_chat_room(pauline->lc,marie->identity); { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ @@ -206,16 +203,13 @@ static void text_message(void) { } static void text_message_within_dialog(void) { - char* to; LinphoneChatRoom* chat_room; LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc"); lp_config_set_int(pauline->lc->config,"sip","chat_use_call_dialogs",1); - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); - ms_free(to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ @@ -243,7 +237,6 @@ static void text_message_with_credential_from_auth_cb_auth_info_requested(Linpho static void text_message_with_credential_from_auth_cb(void) { - char* to; LinphoneChatRoom* chat_room; LinphoneCoreVTable* vtable = linphone_core_v_table_new(); LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); @@ -255,9 +248,7 @@ static void text_message_with_credential_from_auth_cb(void) { vtable->auth_info_requested=text_message_with_credential_from_auth_cb_auth_info_requested; linphone_core_add_listener(pauline->lc, vtable); - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); - ms_free(to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ @@ -275,16 +266,13 @@ static void text_message_with_credential_from_auth_cb(void) { } static void text_message_with_privacy(void) { - char *to; LinphoneChatRoom* chat_room; LinphoneProxyConfig* pauline_proxy; LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc"); - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); - ms_free(to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); /*test proxy config privacy*/ linphone_core_get_default_proxy(pauline->lc,&pauline_proxy); @@ -313,7 +301,6 @@ static void text_message_compatibility_mode(void) { LinphoneAddress* proxy_address; char*tmp; LCSipTransports transport; - char* to = linphone_address_as_string(pauline->identity); LinphoneChatRoom* chat_room; linphone_core_get_default_proxy(marie->lc,&proxy); @@ -336,7 +323,7 @@ static void text_message_compatibility_mode(void) { BC_ASSERT_TRUE (wait_for(marie->lc,marie->lc,&marie->stat.number_of_LinphoneRegistrationOk,1)); - chat_room = linphone_core_create_chat_room(marie->lc,to); + chat_room = linphone_core_get_chat_room(marie->lc, pauline->identity); { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ @@ -363,8 +350,7 @@ static void text_message_with_ack(void) { pauline = linphone_core_manager_new( "pauline_tcp_rc"); { - char* to = linphone_address_as_string(marie->identity); - LinphoneChatRoom* chat_room = linphone_core_create_chat_room(pauline->lc,to); + LinphoneChatRoom* chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); LinphoneChatMessage* message = linphone_chat_room_create_message(chat_room,"Bli bli bli \n blu"); LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(message); int dummy=0; @@ -376,7 +362,6 @@ static void text_message_with_ack(void) { BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageDelivered,1)); BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1, int, "%d"); - ms_free(to); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -390,8 +375,7 @@ static void text_message_with_ack(void) { static void text_message_with_external_body(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc"); - char *to = linphone_address_as_string(marie->identity); - LinphoneChatRoom* chat_room = linphone_core_create_chat_room(pauline->lc,to); + LinphoneChatRoom* chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); LinphoneChatMessage* message = linphone_chat_room_create_message(chat_room,"Bli bli bli \n blu"); LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(message); @@ -420,7 +404,6 @@ static void text_message_with_external_body(void) { linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); - ms_free(to); } bool_t compare_files(const char *path1, const char *path2) { @@ -441,7 +424,6 @@ bool_t compare_files(const char *path1, const char *path2) { static void file_transfer_message(void) { if (transport_supported(LinphoneTransportTls)) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); - char* to; LinphoneChatRoom* chat_room; LinphoneChatMessage* message; LinphoneChatMessageCbs *cbs; @@ -464,9 +446,7 @@ static void file_transfer_message(void) { linphone_core_set_file_transfer_server(pauline->lc,"https://www.linphone.org:444/lft.php"); /* create a chatroom on pauline's side */ - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); - ms_free(to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); /* create a file transfer message */ content = linphone_core_create_content(pauline->lc); linphone_content_set_type(content,"image"); @@ -514,7 +494,6 @@ static void small_file_transfer_message(void) { if (transport_supported(LinphoneTransportTls)) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); int i; - char* to; LinphoneChatRoom* chat_room; LinphoneChatMessage* message; LinphoneChatMessageCbs *cbs; @@ -534,9 +513,7 @@ static void small_file_transfer_message(void) { linphone_core_set_file_transfer_server(pauline->lc,"https://www.linphone.org:444/lft.php"); /* create a chatroom on pauline's side */ - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); - ms_free(to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); /* create a file transfer message */ content = linphone_core_create_content(pauline->lc); linphone_content_set_type(content,"text"); @@ -916,7 +893,6 @@ static void file_transfer_message_io_error_upload(void) { if (transport_supported(LinphoneTransportTls)) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); int i; - char* to; LinphoneChatRoom* chat_room; LinphoneChatMessage* message; LinphoneChatMessageCbs *cbs; @@ -938,8 +914,7 @@ static void file_transfer_message_io_error_upload(void) { linphone_core_set_file_transfer_server(pauline->lc,"https://www.linphone.org:444/lft.php"); /* create a chatroom on pauline's side */ - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); /* create a file transfer message */ content = linphone_core_create_content(pauline->lc); @@ -1054,7 +1029,6 @@ static void file_transfer_message_upload_cancelled(void) { if (transport_supported(LinphoneTransportTls)) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); int i; - char* to; LinphoneChatRoom* chat_room; LinphoneChatMessage* message; LinphoneChatMessageCbs *cbs; @@ -1076,8 +1050,7 @@ static void file_transfer_message_upload_cancelled(void) { linphone_core_set_file_transfer_server(pauline->lc,"https://www.linphone.org:444/lft.php"); /* create a chatroom on pauline's side */ - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); /* create a file transfer message */ content = linphone_core_create_content(pauline->lc); @@ -1182,7 +1155,6 @@ static void file_transfer_message_download_cancelled(void) { static void file_transfer_using_external_body_url(void) { if (transport_supported(LinphoneTransportTls)) { LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - char *to; LinphoneChatMessageCbs *cbs; LinphoneChatRoom *chat_room; LinphoneChatMessage *message; @@ -1195,8 +1167,7 @@ static void file_transfer_using_external_body_url(void) { linphone_core_enable_lime(pauline->lc, FALSE); /* create a chatroom on pauline's side */ - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); message = linphone_chat_room_create_message(chat_room, NULL); @@ -1212,7 +1183,6 @@ static void file_transfer_using_external_body_url(void) { } BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneMessageExtBodyReceived, 1)); BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneMessageInProgress, 1)); - ms_free(to); linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(marie); } @@ -1221,7 +1191,6 @@ static void file_transfer_using_external_body_url(void) { static void file_transfer_2_messages_simultaneously() { if (transport_supported(LinphoneTransportTls)) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); - char* to; LinphoneChatRoom* pauline_room; LinphoneChatMessage* message; LinphoneChatMessage* message2; @@ -1245,9 +1214,7 @@ static void file_transfer_2_messages_simultaneously() { linphone_core_set_file_transfer_server(pauline->lc,"https://www.linphone.org:444/lft.php"); /* create a chatroom on pauline's side */ - to = linphone_address_as_string(marie->identity); - pauline_room = linphone_core_create_chat_room(pauline->lc,to); - ms_free(to); + pauline_room = linphone_core_get_chat_room(pauline->lc, marie->identity); /* create a file transfer message */ content = linphone_core_create_content(pauline->lc); linphone_content_set_type(content,"image"); @@ -1325,8 +1292,7 @@ static void text_message_with_send_error(void) { LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc"); - char *to = linphone_address_as_string(pauline->identity); - LinphoneChatRoom* chat_room = linphone_core_create_chat_room(marie->lc,to); + LinphoneChatRoom* chat_room = linphone_core_get_chat_room(marie->lc, pauline->identity); LinphoneChatMessage* message = linphone_chat_room_create_message(chat_room,"Bli bli bli \n blu"); LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(message); reset_counters(&marie->stat); @@ -1360,8 +1326,7 @@ static void text_message_with_send_error(void) { /*give a chance to register again to allow linphone_core_manager_destroy to properly unregister*/ linphone_core_refresh_registers(marie->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneRegistrationOk,marie->stat.number_of_LinphoneRegistrationOk + 1)); - - ms_free(to); + linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1369,9 +1334,7 @@ static void text_message_with_send_error(void) { static void text_message_denied(void) { LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc"); - - char *to = linphone_address_as_string(pauline->identity); - LinphoneChatRoom* chat_room = linphone_core_create_chat_room(marie->lc,to); + LinphoneChatRoom* chat_room = linphone_core_get_chat_room(marie->lc, pauline->identity); LinphoneChatMessage* message = linphone_chat_room_create_message(chat_room,"Bli bli bli \n blu"); LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(message); @@ -1388,7 +1351,6 @@ static void text_message_denied(void) { BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageNotDelivered,1)); BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageReceived,0, int, "%d"); - ms_free(to); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1471,17 +1433,13 @@ static void info_message_with_body(){ } static void is_composing_notification(void) { - char* to; LinphoneChatRoom* chat_room; int dummy = 0; LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc"); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc, to); - - ms_free(to); { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ diff --git a/tester/setup_tester.c b/tester/setup_tester.c index 2f7002bd2..c24aa27b8 100644 --- a/tester/setup_tester.c +++ b/tester/setup_tester.c @@ -233,13 +233,13 @@ void linphone_proxy_config_is_server_config_changed_test() { linphone_proxy_config_destroy(proxy_config); } -static void chat_root_test(void) { +static void chat_room_test(void) { LinphoneCoreVTable v_table; LinphoneCore* lc; memset (&v_table,0,sizeof(v_table)); lc = linphone_core_new(&v_table,NULL,NULL,NULL); BC_ASSERT_PTR_NOT_NULL_FATAL(lc); - linphone_core_create_chat_room(lc,"sip:toto@titi.com"); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room_from_uri(lc,"sip:toto@titi.com")); linphone_core_destroy(lc); } @@ -301,7 +301,7 @@ test_t setup_tests[] = { { "LPConfig zero_len value from buffer", linphone_lpconfig_from_buffer_zerolen_value }, { "LPConfig zero_len value from file", linphone_lpconfig_from_file_zerolen_value }, { "LPConfig zero_len value from XML", linphone_lpconfig_from_xml_zerolen_value }, - { "Chat room", chat_root_test }, + { "Chat room", chat_room_test }, { "Devices reload", devices_reload_test }, { "Codec usability", codec_usability_test } }; From 44327da3ec399aa4eb29a4fb93a585bd99c47af5 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Fri, 4 Sep 2015 15:13:51 +0200 Subject: [PATCH 118/134] fix declrations --- coreapi/chat.c | 4 +++- coreapi/linphonecore.h | 10 +++++++++- tester/message_tester.c | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/coreapi/chat.c b/coreapi/chat.c index 57e111476..990f06998 100644 --- a/coreapi/chat.c +++ b/coreapi/chat.c @@ -366,7 +366,8 @@ void linphone_core_enable_chat(LinphoneCore *lc){ bool_t linphone_core_chat_enabled(const LinphoneCore *lc){ return lc->chat_deny_code!=LinphoneReasonNone; } -MSList* linphone_core_get_chat_rooms(LinphoneCore *lc) { + +const MSList* linphone_core_get_chat_rooms(LinphoneCore *lc) { return lc->chatrooms; } @@ -443,6 +444,7 @@ LinphoneChatRoom *linphone_core_get_chat_room(LinphoneCore *lc, const LinphoneAd void linphone_core_delete_chat_room(LinphoneCore *lc, LinphoneChatRoom *cr){ if (ms_list_find(lc->chatrooms, cr)){ lc->chatrooms = ms_list_remove(cr->lc->chatrooms, cr); + linphone_chat_room_delete_history(cr); linphone_chat_room_unref(cr); }else{ ms_error("linphone_core_delete_chat_room(): chatroom [%p] isn't part of LinphoneCore.", diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 53016b499..cdc275bb1 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -1250,6 +1250,14 @@ LINPHONE_PUBLIC LinphoneChatRoom *linphone_core_get_chat_room(LinphoneCore *lc, * @return #LinphoneChatRoom where messaging can take place. **/ LINPHONE_PUBLIC LinphoneChatRoom *linphone_core_get_chat_room_from_uri(LinphoneCore *lc, const char *to); + +/** + * Removes a chatroom including all message history from the LinphoneCore. + * @param lc The linphone core + * @param to The chatroom. +**/ +LINPHONE_PUBLIC void linphone_core_delete_chat_room(LinphoneCore *lc, LinphoneChatRoom *cr); + /** * Inconditionnaly disable incoming chat messages. * @param lc the core @@ -1432,7 +1440,7 @@ LINPHONE_PUBLIC LinphoneCore* linphone_chat_room_get_core(LinphoneChatRoom *cr); * @param[in] lc #LinphoneCore object * @return \mslist{LinphoneChatRoom} **/ -LINPHONE_PUBLIC MSList* linphone_core_get_chat_rooms(LinphoneCore *lc); +LINPHONE_PUBLIC const MSList* linphone_core_get_chat_rooms(LinphoneCore *lc); LINPHONE_PUBLIC unsigned int linphone_chat_message_store(LinphoneChatMessage *msg); /** diff --git a/tester/message_tester.c b/tester/message_tester.c index 568b77739..06fc648e3 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -1255,7 +1255,7 @@ static void file_transfer_2_messages_simultaneously() { BC_ASSERT_EQUAL(ms_list_size(linphone_core_get_chat_rooms(marie->lc)), 1, int, "%d"); if (ms_list_size(linphone_core_get_chat_rooms(marie->lc)) != 1) { char * buf = ms_strdup_printf("Found %d rooms instead of 1: ", ms_list_size(linphone_core_get_chat_rooms(marie->lc))); - MSList *it = linphone_core_get_chat_rooms(marie->lc); + const MSList *it = linphone_core_get_chat_rooms(marie->lc); while (it) { const LinphoneAddress * peer = linphone_chat_room_get_peer_address(it->data); buf = ms_strcat_printf("%s, ", linphone_address_get_username(peer)); @@ -1515,7 +1515,7 @@ static void message_storage_migration() { LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); char *src_db = bc_tester_res("messages.db"); char *tmp_db = bc_tester_file("tmp.db"); - MSList* chatrooms; + const MSList* chatrooms; BC_ASSERT_EQUAL_FATAL(message_tester_copy_file(src_db, tmp_db), 0, int, "%d"); From c6f1d4303cbb3c0480b8ddb31a198fb4f5c29852 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Fri, 4 Sep 2015 16:06:53 +0200 Subject: [PATCH 119/134] fix tester --- tester/message_tester.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/tester/message_tester.c b/tester/message_tester.c index 06fc648e3..c82388235 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -561,7 +561,6 @@ static FILE* fopen_from_write_dir(const char * name, const char * mode) { static void lime_file_transfer_message_base(bool_t encrypt_file) { int i; - char *to; FILE *ZIDCacheMarieFD, *ZIDCachePaulineFD; LinphoneCoreManager *marie, *pauline; LinphoneChatRoom *chat_room; @@ -616,9 +615,8 @@ static void lime_file_transfer_message_base(bool_t encrypt_file) { linphone_core_set_file_transfer_server(pauline->lc,"https://www.linphone.org:444/lft.php"); /* create a chatroom on pauline's side */ - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); - ms_free(to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); + /* create a file transfer message */ content = linphone_core_create_content(pauline->lc); linphone_content_set_type(content,"text"); @@ -846,7 +844,6 @@ static void lime_unit(void) { } static void lime_text_message(void) { - char* to; FILE *ZIDCacheMarieFD, *ZIDCachePaulineFD; LinphoneChatRoom* chat_room; char* filepath; @@ -873,9 +870,7 @@ static void lime_text_message(void) { linphone_core_set_zrtp_secrets_file(pauline->lc, filepath); ms_free(filepath); - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); - ms_free(to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); linphone_chat_room_send_message(chat_room,"Bla bla bla bla"); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); @@ -961,7 +956,6 @@ static void file_transfer_message_io_error_download(void) { if (transport_supported(LinphoneTransportTls)) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); int i; - char* to; LinphoneChatRoom* chat_room; LinphoneChatMessage* message; LinphoneContent content; @@ -982,9 +976,7 @@ static void file_transfer_message_io_error_download(void) { linphone_core_set_file_transfer_server(pauline->lc,"https://www.linphone.org:444/lft.php"); /* create a chatroom on pauline's side */ - to = linphone_address_as_string(marie->identity); - chat_room = linphone_core_create_chat_room(pauline->lc,to); - ms_free(to); + chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); /* create a file transfer message */ memset(&content,0,sizeof(content)); From b9c32d33a5b4ee90b71e6bb37ae8c23a4481b4b6 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Fri, 4 Sep 2015 22:23:00 +0200 Subject: [PATCH 120/134] send presence to multiple instances of a same user that subscribed to us. Fixes memory leak. --- coreapi/friend.c | 33 ++++++++++++++++++++------------- coreapi/presence.c | 21 ++++----------------- coreapi/private.h | 4 +++- gtk/chat.c | 4 ++-- 4 files changed, 29 insertions(+), 33 deletions(-) diff --git a/coreapi/friend.c b/coreapi/friend.c index e6c429bee..5dd49bec3 100644 --- a/coreapi/friend.c +++ b/coreapi/friend.c @@ -92,7 +92,7 @@ LinphoneFriend *linphone_find_friend_by_inc_subscribe(MSList *l, SalOp *op){ MSList *elem; for (elem=l;elem!=NULL;elem=elem->next){ LinphoneFriend *lf=(LinphoneFriend*)elem->data; - if (lf->insub==op) return lf; + if (ms_list_find(lf->insubs, op)) return lf; } return NULL; } @@ -227,12 +227,24 @@ int linphone_friend_set_inc_subscribe_policy(LinphoneFriend *fr, LinphoneSubscri } void linphone_friend_notify(LinphoneFriend *lf, LinphonePresenceModel *presence){ - char *addr=linphone_address_as_string(linphone_friend_get_address(lf)); - ms_message("Want to notify %s, insub=%p",addr,lf->insub); - ms_free(addr); - if (lf->insub!=NULL){ - sal_notify_presence(lf->insub,(SalPresenceModel *)presence); + MSList *elem; + if (lf->insubs){ + char *addr=linphone_address_as_string(linphone_friend_get_address(lf)); + ms_message("Want to notify %s",addr); + ms_free(addr); } + for(elem=lf->insubs; elem!=NULL; elem=elem->next){ + SalOp *op = (SalOp*)elem->data; + sal_notify_presence(op,(SalPresenceModel *)presence); + } +} + +void linphone_friend_add_incoming_subscription(LinphoneFriend *lf, SalOp *op){ + lf->insubs = ms_list_append(lf->insubs, op); +} + +void linphone_friend_remove_incoming_subscription(LinphoneFriend *lf, SalOp *op){ + lf->insubs = ms_list_remove(lf->insubs, op); } static void linphone_friend_unsubscribe(LinphoneFriend *lf){ @@ -260,17 +272,12 @@ static void linphone_friend_invalidate_subscription(LinphoneFriend *lf){ void linphone_friend_close_subscriptions(LinphoneFriend *lf){ linphone_friend_unsubscribe(lf); - if (lf->insub){ - sal_notify_presence_close(lf->insub); + ms_list_for_each(lf->insubs, (MSIterateFunc) sal_notify_presence_close); - } } static void _linphone_friend_destroy(LinphoneFriend *lf){ - if (lf->insub) { - sal_op_release(lf->insub); - lf->insub=NULL; - } + lf->insubs = ms_list_free_with_data(lf->insubs, (MSIterateFunc) sal_op_release); if (lf->outsub){ sal_op_release(lf->outsub); lf->outsub=NULL; diff --git a/coreapi/presence.c b/coreapi/presence.c index 63f21ff18..f70f78ae0 100644 --- a/coreapi/presence.c +++ b/coreapi/presence.c @@ -1445,7 +1445,7 @@ static LinphonePresenceModel * process_pidf_xml_presence_notification(xmlparsing void linphone_core_add_subscriber(LinphoneCore *lc, const char *subscriber, SalOp *op){ LinphoneFriend *fl=linphone_friend_new_with_address(subscriber); if (fl==NULL) return ; - fl->insub=op; + linphone_friend_add_incoming_subscription(fl, op); linphone_friend_set_inc_subscribe_policy(fl,LinphoneSPAccept); fl->inc_subscribe_pending=TRUE; lc->subscribers=ms_list_append(lc->subscribers,(void *)fl); @@ -1468,9 +1468,7 @@ void linphone_core_notify_all_friends(LinphoneCore *lc, LinphonePresenceModel *p if (activity_str != NULL) ms_free(activity_str); for(elem=lc->friends;elem!=NULL;elem=elem->next){ LinphoneFriend *lf=(LinphoneFriend *)elem->data; - if (lf->insub){ - linphone_friend_notify(lf,presence); - } + linphone_friend_notify(lf,presence); } } @@ -1478,26 +1476,15 @@ void linphone_subscription_new(LinphoneCore *lc, SalOp *op, const char *from){ LinphoneFriend *lf=NULL; char *tmp; LinphoneAddress *uri; - LinphoneProxyConfig *cfg; uri=linphone_address_new(from); linphone_address_clean(uri); tmp=linphone_address_as_string(uri); ms_message("Receiving new subscription from %s.",from); - cfg=linphone_core_lookup_known_proxy(lc,uri); - if (cfg!=NULL){ - if (cfg->op){ - if (sal_op_get_contact_address(cfg->op)) { - sal_op_set_contact_address (op,sal_op_get_contact_address(cfg->op)); - ms_message("Contact for next subscribe answer has been fixed using proxy "/*to %s",fixed_contact*/); - } - } - } - /* check if we answer to this subscription */ if (linphone_find_friend_by_address(lc->friends,uri,&lf)!=NULL){ - lf->insub=op; + linphone_friend_add_incoming_subscription(lf, op); lf->inc_subscribe_pending=TRUE; sal_subscribe_accept(op); linphone_friend_done(lf); /*this will do all necessary actions */ @@ -1904,7 +1891,7 @@ void linphone_subscription_closed(LinphoneCore *lc, SalOp *op){ lf=linphone_find_friend_by_inc_subscribe(lc->friends,op); sal_op_release(op); if (lf!=NULL){ - lf->insub=NULL; + linphone_friend_remove_incoming_subscription(lf, op); }else{ ms_warning("Receiving unsuscribe for unknown in-subscribtion from %s", sal_op_get_from(op)); } diff --git a/coreapi/private.h b/coreapi/private.h index 4c8f1e1f4..942f14f2c 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -355,6 +355,8 @@ const LinphoneAddress* linphone_proxy_config_get_service_route(const LinphonePro void linphone_friend_close_subscriptions(LinphoneFriend *lf); void linphone_friend_update_subscribes(LinphoneFriend *fr, LinphoneProxyConfig *cfg, bool_t only_when_registered); void linphone_friend_notify(LinphoneFriend *lf, LinphonePresenceModel *presence); +void linphone_friend_add_incoming_subscription(LinphoneFriend *lf, SalOp *op); +void linphone_friend_remove_incoming_subscription(LinphoneFriend *lf, SalOp *op); LinphoneFriend *linphone_find_friend_by_inc_subscribe(MSList *l, SalOp *op); LinphoneFriend *linphone_find_friend_by_out_subscribe(MSList *l, SalOp *op); MSList *linphone_find_friend_by_address(MSList *fl, const LinphoneAddress *addr, LinphoneFriend **lf); @@ -585,7 +587,7 @@ struct _LinphoneFriend{ belle_sip_object_t base; void *user_data; LinphoneAddress *uri; - SalOp *insub; + MSList *insubs; /*list of SalOp. There can be multiple instances of a same Friend that subscribe to our presence*/ SalOp *outsub; LinphoneSubscribePolicy pol; LinphonePresenceModel *presence; diff --git a/gtk/chat.c b/gtk/chat.c index 674b07b76..ac4fac23c 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -188,7 +188,7 @@ void linphone_gtk_push_text(GtkWidget *w, const LinphoneAddress *from, int tnow_year; gtk_text_buffer_get_end_iter(buffer, &iter); - if(g_strcmp0(from_message,from_str)!=0){ + if (g_strcmp0(from_message,from_str)!=0){ gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, get_display_name(from), -1, "from", me ? "me" : NULL, NULL); gtk_text_buffer_insert_with_tags_by_name(buffer,&iter, " : ", -1, @@ -196,8 +196,8 @@ void linphone_gtk_push_text(GtkWidget *w, const LinphoneAddress *from, gtk_text_buffer_insert(buffer,&iter,"\n",-1); g_free(from_message); g_object_set_data(G_OBJECT(w),"from_message",g_strdup(from_str)); - ms_free(from_str); } + ms_free(from_str); link_start_mark = gtk_text_buffer_create_mark(buffer, NULL, &iter, TRUE); gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, linphone_chat_message_get_text(msg), -1, From 787501ea2f83cf93d6948564fe08132985c1e7e7 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Fri, 4 Sep 2015 22:24:05 +0200 Subject: [PATCH 121/134] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 82849dbb8..203c5bbca 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 82849dbb8a090ee7e3501b89e87fa2fee7c4b32b +Subproject commit 203c5bbca581db81abc6d6e64e3e0cd0c948c3d3 From bf16b53c6e434250131f9a0823c315c4017b2c79 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sun, 6 Sep 2015 22:45:37 +0200 Subject: [PATCH 122/134] fix memory leak when receiving a is-composing notification --- coreapi/callbacks.c | 1 + 1 file changed, 1 insertion(+) diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index 0f62eb9a0..5ce07dd3c 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -1106,6 +1106,7 @@ static void text_received(SalOp *op, const SalMessage *msg){ static void is_composing_received(SalOp *op, const SalIsComposing *is_composing) { LinphoneCore *lc = (LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op)); linphone_core_is_composing_received(lc, op, is_composing); + sal_op_release(op); } static void parse_presence_requested(SalOp *op, const char *content_type, const char *content_subtype, const char *body, SalPresenceModel **result) { From 1d3d4f51f3174c2bcde12c673b4cf30984f991aa Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 7 Sep 2015 10:50:00 +0200 Subject: [PATCH 123/134] Set linphone_core_set_sip_transport_timeout public --- coreapi/linphonecore.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index cdc275bb1..642492150 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -2589,7 +2589,7 @@ LINPHONE_PUBLIC int linphone_core_get_upload_ptime(LinphoneCore *lc); * @param[in] timeout_ms The SIP transport timeout in milliseconds. * @ingroup media_parameters */ -void linphone_core_set_sip_transport_timeout(LinphoneCore *lc, int timeout_ms); +LINPHONE_PUBLIC void linphone_core_set_sip_transport_timeout(LinphoneCore *lc, int timeout_ms); /** * Get the SIP transport timeout. From 3b364c173a2db338662be6a39fcce9495a687639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Mon, 7 Sep 2015 14:26:09 +0200 Subject: [PATCH 124/134] Makes gtk-mac-bundler copy icons from $prefix/share/icons/hicolor --- build/macos/linphone.bundle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build/macos/linphone.bundle b/build/macos/linphone.bundle index 8109ff6cb..841feb3a2 100644 --- a/build/macos/linphone.bundle +++ b/build/macos/linphone.bundle @@ -136,6 +136,10 @@ ${prefix:linphone}/share/images + + ${prefix:linphone}/share/icons + + From 041116cb67902a7e4db236abfe6a8573529a9630 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 7 Sep 2015 16:09:15 +0200 Subject: [PATCH 125/134] implement a mechanism to monitor the memory consumption of the tests. --- tester/common/bc_tester_utils.c | 48 ++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/tester/common/bc_tester_utils.c b/tester/common/bc_tester_utils.c index ba5e6b811..bc1980d17 100644 --- a/tester/common/bc_tester_utils.c +++ b/tester/common/bc_tester_utils.c @@ -27,6 +27,7 @@ along with this program. If not, see . #include "CUnit/Basic.h" #include "CUnit/Automated.h" + #ifdef _WIN32 #if defined(__MINGW32__) || !defined(WINAPI_FAMILY_PARTITION) || !defined(WINAPI_PARTITION_DESKTOP) #define BC_TESTER_WINDOWS_DESKTOP 1 @@ -43,6 +44,11 @@ along with this program. If not, see . #endif #endif +#ifdef __linux +/*for monitoring total space allocated via malloc*/ +#include +#endif + static char *bc_tester_resource_dir_prefix = NULL; static char *bc_tester_writable_dir_prefix = NULL; @@ -62,6 +68,8 @@ char* xml_file = "CUnitAutomated-Results.xml"; int xml_enabled = 0; char * suite_name; char * test_name; +static long max_vm_kb = 0; + void (*tester_printf_va)(int level, const char *fmt, va_list args); void bc_tester_printf(int level, const char *fmt, ...) { @@ -186,6 +194,22 @@ static void test_complete_message_handler(const CU_pTest pTest, } } bc_tester_printf(bc_printf_verbosity_info,"%s\n", result); +#ifdef __linux + /* use mallinfo() to monitor allocated space. It is linux specific but other methods don't work: + * setrlimit() RLIMIT_DATA doesn't count memory allocated via mmap() (which is used internally by malloc) + * setrlimit() RLIMIT_AS works but also counts virtual memory allocated by thread stacks, which is very big and hardly controllable. + * setrlimit() RLIMIT_RSS does nothing interesting on linux. + * getrusage() of RSS is unreliable: memory blocks can be leaked without being read or written, which would not appear in RSS. + * mallinfo() itself is the less worse solution. Allocated bytes are returned as 'int' so limited to 2GB + */ + if (max_vm_kb){ + struct mallinfo minfo = mallinfo(); + if (minfo.uordblks > max_vm_kb * 1024){ + bc_tester_printf(bc_printf_verbosity_error, "The program exceeded the maximum ammount of memory allocatable (%i bytes), aborting now.\n", minfo.uordblks); + abort(); + } + } +#endif } #endif @@ -256,6 +280,10 @@ int bc_tester_run_tests(const char *suite_name, const char *test_name) { } } } +#ifdef __linux + bc_tester_printf(bc_printf_verbosity_info, "Still %i kilobytes allocated when all tests are finished.", mallinfo().uordblks/1024); +#endif + return CU_get_number_of_tests_failed()!=0; } @@ -272,6 +300,7 @@ void bc_tester_helper(const char *name, const char* additionnal_helper) { #endif "\t\t\t--xml\n" "\t\t\t--xml-file \n" + "\t\t\t--max-alloc (maximum ammount of memory obtained via malloc allocator)\n" "And additionally:\n" "%s" , name @@ -300,9 +329,19 @@ void bc_tester_init(void (*ftester_printf)(int level, const char *fmt, va_list a bc_printf_verbosity_info = iverbosity_info; } +void bc_tester_set_max_vm(long max_vm_kb){ +#ifdef __linux + max_vm_kb = max_vm_kb; + bc_tester_printf(bc_printf_verbosity_info, "Maximum virtual memory space set to %li kilo bytes", max_vm_kb); +#else + bc_tester_printf(bc_printf_verbosity_error,"Maximum virtual memory space setting is only implemented on Linux."); +#endif +} + int bc_tester_parse_args(int argc, char **argv, int argid) { int i = argid; + if (strcmp(argv[i],"--help")==0){ return -1; } else if (strcmp(argv[i],"--test")==0){ @@ -325,7 +364,10 @@ int bc_tester_parse_args(int argc, char **argv, int argid) xml_enabled = 1; } else if (strcmp(argv[i], "--xml") == 0){ xml_enabled = 1; - }else { + } else if (strcmp(argv[i], "--max-alloc") == 0){ + CHECK_ARG("--max-alloc", ++i, argc); + max_vm_kb = atol(argv[i]); + } else { bc_tester_printf(bc_printf_verbosity_error, "Unknown option \"%s\"\n", argv[i]); return -1; } @@ -341,6 +383,10 @@ int bc_tester_parse_args(int argc, char **argv, int argid) int bc_tester_start(void) { int ret; + + if (max_vm_kb) + bc_tester_set_max_vm(max_vm_kb); + if( xml_enabled ){ size_t size = strlen(xml_file) + strlen(".tmp") + 1; char * xml_tmp_file = malloc(sizeof(char) * size); From f46f1fbe77630dfa79d58099b7684d6a97e5fa99 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Mon, 7 Sep 2015 17:38:32 +0200 Subject: [PATCH 126/134] linphonecall: LinphoneCoreCallStateChangedCb should never receive NULL as last argument "message" --- coreapi/linphonecall.c | 28 +++++++++++++++++----------- coreapi/linphonecore.c | 6 +++--- coreapi/linphonecore.h | 2 +- coreapi/private.h | 2 +- 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 45a78f47f..b5e8d62b9 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -584,7 +584,7 @@ static const char *linphone_call_get_public_ip_for_stream(LinphoneCall *call, in static void force_streams_dir_according_to_state(LinphoneCall *call, SalMediaDescription *md){ int i; - + switch (call->state){ case LinphoneCallPausing: case LinphoneCallPaused: @@ -593,7 +593,7 @@ static void force_streams_dir_according_to_state(LinphoneCall *call, SalMediaDes return; break; } - + for (i=0; i<2; ++i){ SalStreamDescription *sd = &md->streams[i]; sd->dir = SalStreamSendOnly; @@ -1349,7 +1349,13 @@ void linphone_call_set_state(LinphoneCall *call, LinphoneCallState cstate, const linphone_call_cancel_dtmfs(call); } } - linphone_core_notify_call_state_changed(lc,call,cstate,message); + if (!message) { + ms_error("%s(): You must fill a reason when changing call state (from %s o %s)." + , __FUNCTION__ + , linphone_call_state_to_string(call->prevstate) + , linphone_call_state_to_string(call->state)); + } + linphone_core_notify_call_state_changed(lc,call,cstate,message?message:""); linphone_reporting_call_state_updated(call); if (cstate==LinphoneCallReleased) {/*shall be performed after app notification*/ linphone_call_set_released(call); @@ -2696,7 +2702,7 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, LinphoneCallSta io.input.type = MSResourceFile; io.input.file = playfile; } - + } if (ok == TRUE) { audio_stream_start_from_io(call->audiostream, @@ -2788,7 +2794,7 @@ static void linphone_call_start_video_stream(LinphoneCall *call, LinphoneCallSta MediaStreamDir dir= MediaStreamSendRecv; bool_t is_inactive=FALSE; MSWebCam *cam; - + call->current_params->video_codec = rtp_profile_get_payload(call->video_profile, used_pt); call->current_params->has_video=TRUE; @@ -2974,7 +2980,7 @@ void linphone_call_start_media_streams(LinphoneCall *call, LinphoneCallState nex call->all_muted = FALSE; break; } - + call->current_params->audio_codec = NULL; call->current_params->video_codec = NULL; @@ -3124,7 +3130,7 @@ static void update_rtp_stats(LinphoneCall *call, int stream_index) { if (stream_index >= linphone_call_get_stream_count(call)) { return; } - + if (call->sessions[stream_index].rtp_session) { const rtp_stats_t *stats = rtp_session_get_stats(call->sessions[stream_index].rtp_session); memcpy(&call->stats[stream_index].rtp_stats, stats, sizeof(*stats)); @@ -3527,7 +3533,7 @@ rtp_stats_t linphone_call_stats_get_rtp_stats(const LinphoneCallStats *stats) { if (stats) { memcpy(&rtp_stats, &stats->rtp_stats, sizeof(stats->rtp_stats)); } - + return rtp_stats; } @@ -4208,7 +4214,7 @@ MSFormatType linphone_call_get_stream_type(LinphoneCall *call, int stream_index) RtpTransport* linphone_call_get_meta_rtp_transport(LinphoneCall *call, int stream_index) { RtpTransport *meta_rtp; RtpTransport *meta_rtcp; - + if (!call || stream_index < 0 || stream_index >= linphone_call_get_stream_count(call)) { return NULL; } @@ -4220,11 +4226,11 @@ RtpTransport* linphone_call_get_meta_rtp_transport(LinphoneCall *call, int strea RtpTransport* linphone_call_get_meta_rtcp_transport(LinphoneCall *call, int stream_index) { RtpTransport *meta_rtp; RtpTransport *meta_rtcp; - + if (!call || stream_index < 0 || stream_index >= linphone_call_get_stream_count(call)) { return NULL; } rtp_session_get_transports(call->sessions[stream_index].rtp_session, &meta_rtp, &meta_rtcp); return meta_rtcp; -} \ No newline at end of file +} diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 3d124d147..1c238a4aa 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -3320,7 +3320,7 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho #endif //defined(VIDEO_ENABLED) && defined(BUILD_UPNP) if ((err = linphone_core_start_update_call(lc, call)) && call->state!=initial_state) { /*Restore initial state*/ - linphone_call_set_state(call,initial_state,NULL); + linphone_call_set_state(call,initial_state,"Restore initial state"); } }else{ @@ -3350,7 +3350,7 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho * the call state notification, to deactivate the automatic answer that would just confirm the audio but reject the video. * Then, when the user responds to dialog prompt, it becomes possible to call linphone_core_accept_call_update() to answer * the reINVITE, with eventually video enabled in the LinphoneCallParams argument. - * + * * The #LinphoneCallUpdatedByRemote notification can also arrive when receiving an INVITE without SDP. In such case, an unchanged offer is made * in the 200Ok, and when the ACK containing the SDP answer is received, #LinphoneCallUpdatedByRemote is triggered to notify the application of possible * changes in the media session. However in such case defering the update has no meaning since we just generating an offer. @@ -6568,7 +6568,7 @@ static void linphone_core_run_hooks(LinphoneCore *lc){ void linphone_core_remove_iterate_hook(LinphoneCore *lc, LinphoneCoreIterateHook hook, void *hook_data){ linphone_task_list_remove(&lc->hooks, hook, hook_data); - + } void linphone_core_set_zrtp_secrets_file(LinphoneCore *lc, const char* file){ diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 642492150..c6d05152e 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -1766,7 +1766,7 @@ typedef void (*LinphoneCoreGlobalStateChangedCb)(LinphoneCore *lc, LinphoneGloba * @param lc the LinphoneCore * @param call the call object whose state is changed. * @param cstate the new state of the call - * @param message an informational message about the state. + * @param message a non NULL informational message about the state. */ typedef void (*LinphoneCoreCallStateChangedCb)(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState cstate, const char *message); diff --git a/coreapi/private.h b/coreapi/private.h index 942f14f2c..6d5bc08d3 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -79,7 +79,7 @@ extern "C" { #endif #include - + #ifndef _ #define _(String) dgettext(GETTEXT_PACKAGE,String) #endif From 4dd7ab621d00e79356bfafb926d63fc6336b79b6 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 7 Sep 2015 18:09:10 +0200 Subject: [PATCH 127/134] update ms2 (memory leak) --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 203c5bbca..93cf916ac 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 203c5bbca581db81abc6d6e64e3e0cd0c948c3d3 +Subproject commit 93cf916ac44dea93db7744b1d66ea3655c8345d9 From 352b9c84067692131b2c58ad8d2d62a37b664e9e Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Tue, 8 Sep 2015 10:33:42 +0200 Subject: [PATCH 128/134] callbacks.c: avoid crashing when we receive response to a message belonging to already destroyed chat room with unit test added --- coreapi/callbacks.c | 42 +++++++++++++++++++++-------------------- tester/message_tester.c | 13 ++++++++++++- 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index 5ce07dd3c..f58c2a77f 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -198,7 +198,7 @@ void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMedia /*this happens after pausing the call locally. The streams are destroyed and then we wait the 200Ok to recreate them*/ linphone_call_init_media_streams (call); } - + if (call->params->real_early_media && call->state==LinphoneCallOutgoingEarlyMedia){ prepare_early_media_forking(call); } @@ -476,7 +476,7 @@ static void process_call_accepted(LinphoneCore *lc, LinphoneCall *call, SalOp *o LinphoneCallState next_state = LinphoneCallIdle; const char *next_state_str = NULL; LinphoneTaskList tl; - + switch (call->state){/*immediately notify the connected state, even if errors occur after*/ case LinphoneCallOutgoingProgress: case LinphoneCallOutgoingRinging: @@ -494,7 +494,7 @@ static void process_call_accepted(LinphoneCore *lc, LinphoneCall *call, SalOp *o default: break; } - + linphone_task_list_init(&tl); rmd=sal_call_get_remote_media_description(op); /*set privacy*/ @@ -559,7 +559,7 @@ static void process_call_accepted(LinphoneCore *lc, LinphoneCall *call, SalOp *o ms_error("call_accepted(): don't know what to do in state [%s]", linphone_call_state_to_string(call->state)); break; } - + if (next_state != LinphoneCallIdle){ linphone_call_update_remote_session_id_and_ver(call); linphone_core_update_ice_state_in_call_stats(call); @@ -600,7 +600,7 @@ static void process_call_accepted(LinphoneCore *lc, LinphoneCall *call, SalOp *o static void call_accepted(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 == NULL){ ms_warning("call_accepted: call does no longer exist."); return ; @@ -629,9 +629,9 @@ static void call_paused_by_remote(LinphoneCore *lc, LinphoneCall *call){ /* this callback is called when an incoming re-INVITE/ SIP UPDATE modifies the session*/ static void call_updated(LinphoneCore *lc, LinphoneCall *call, SalOp *op, bool_t is_update){ SalMediaDescription *rmd=sal_call_get_remote_media_description(op); - + call->defer_update = lp_config_get_int(lc->config, "sip", "defer_update_default", FALSE); - + switch(call->state){ case LinphoneCallPausedByRemote: if (sal_media_description_has_dir(rmd,SalStreamSendRecv) || sal_media_description_has_dir(rmd,SalStreamRecvOnly)){ @@ -714,9 +714,9 @@ static void call_updating(SalOp *op, bool_t is_update){ }else { SalMediaDescription *md; SalMediaDescription *prev_result_desc=call->resultdesc; - + call->expect_media_in_ack = FALSE; - + md=sal_call_get_final_media_description(call->op); if (md && (sal_media_description_empty(md) || linphone_core_incompatible_security(lc,md))){ sal_call_decline(call->op,SalReasonNotAcceptable,NULL); @@ -738,7 +738,7 @@ static void call_updating(SalOp *op, bool_t is_update){ static void call_ack(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 == NULL){ ms_warning("call_ack(): no call for which an ack is expected"); return; @@ -1250,17 +1250,19 @@ static void text_delivery_update(SalOp *op, SalTextDeliveryStatus status){ // Do not handle delivery status for isComposing messages. return; } + // check that the message does not belong to an already destroyed chat room - if so, do not invoke callbacks + if (chat_msg->chat_room != NULL) { + chat_msg->state=chatStatusSal2Linphone(status); + linphone_chat_message_update_state(chat_msg); - chat_msg->state=chatStatusSal2Linphone(status); - linphone_chat_message_update_state(chat_msg); - - if (chat_msg && (chat_msg->cb || (chat_msg->callbacks && linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)))) { - ms_message("Notifying text delivery with status %s",linphone_chat_message_state_to_string(chat_msg->state)); - if (chat_msg->callbacks && linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)) { - linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)(chat_msg, chat_msg->state); - } else { - /* Legacy */ - chat_msg->cb(chat_msg,chat_msg->state,chat_msg->cb_ud); + if (chat_msg && (chat_msg->cb || (chat_msg->callbacks && linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)))) { + ms_message("Notifying text delivery with status %s",linphone_chat_message_state_to_string(chat_msg->state)); + if (chat_msg->callbacks && linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)) { + linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)(chat_msg, chat_msg->state); + } else { + /* Legacy */ + chat_msg->cb(chat_msg,chat_msg->state,chat_msg->cb_ud); + } } } if (status != SalTextDeliveryInProgress) { /*only release op if not in progress*/ diff --git a/tester/message_tester.c b/tester/message_tester.c index c82388235..36326f1e7 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -1318,7 +1318,7 @@ static void text_message_with_send_error(void) { /*give a chance to register again to allow linphone_core_manager_destroy to properly unregister*/ linphone_core_refresh_registers(marie->lc); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneRegistrationOk,marie->stat.number_of_LinphoneRegistrationOk + 1)); - + linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1644,6 +1644,16 @@ static void history_messages_count() { #endif +static void text_status_after_destroying_chat_room() { + LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); + LinphoneChatRoom *chatroom = linphone_core_get_chat_room_from_uri(marie->lc, ""); + LinphoneChatMessage *message = linphone_chat_room_create_message(chatroom, "hello"); + linphone_chat_room_send_chat_message(chatroom, message); + linphone_chat_room_unref(chatroom); + wait_for_until(marie->lc, NULL, &marie->stat.number_of_LinphoneMessageNotDelivered, 1, 1000); + linphone_core_manager_destroy(marie); +} + test_t message_tests[] = { { "Text message", text_message }, { "Text message within call's dialog", text_message_within_dialog}, @@ -1676,6 +1686,7 @@ test_t message_tests[] = { ,{ "History count", history_messages_count } ,{ "History range", history_range_full_test } #endif + ,{ "Text status after destroying chat room", text_status_after_destroying_chat_room }, }; test_suite_t message_test_suite = { From 1127f97f8ca0288d93aaa53abb30f3365d1be936 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Tue, 8 Sep 2015 12:38:27 +0200 Subject: [PATCH 129/134] fix test --- tester/common/bc_tester_utils.c | 6 +----- tester/liblinphone_tester.c | 2 +- tester/message_tester.c | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/tester/common/bc_tester_utils.c b/tester/common/bc_tester_utils.c index bc1980d17..62ccc5f19 100644 --- a/tester/common/bc_tester_utils.c +++ b/tester/common/bc_tester_utils.c @@ -445,11 +445,8 @@ void bc_tester_uninit(void) { } static void bc_tester_set_dir_prefix(char **prefix, const char *name) { - size_t len = strlen(name); if (*prefix != NULL) free(*prefix); - *prefix = malloc(len + 1); - strncpy(*prefix, name, len); - (*prefix)[len] = '\0'; + *prefix = strdup(name); } const char * bc_tester_get_resource_dir_prefix(void) { @@ -474,7 +471,6 @@ static char * bc_tester_path(const char *prefix, const char *name) { size_t len = strlen(prefix) + 1 + strlen(name) + 1; file = malloc(len); snprintf(file, len, "%s/%s", prefix, name); - file[strlen(file)] = '\0'; } return file; } diff --git a/tester/liblinphone_tester.c b/tester/liblinphone_tester.c index d49c890de..1c542d736 100644 --- a/tester/liblinphone_tester.c +++ b/tester/liblinphone_tester.c @@ -196,7 +196,7 @@ int main (int argc, char *argv[]) liblinphone_tester_init(NULL); - if (strstr(argv[0], ".libs")) { + if (strstr(argv[0], ".libs") && argv[0][0] == '/') { char res_dir[128] = {0}; // this allows to launch liblinphone_tester from outside of tester directory strncpy(res_dir, argv[0], strstr(argv[0], ".libs")-argv[0]); diff --git a/tester/message_tester.c b/tester/message_tester.c index 36326f1e7..f2e663483 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -1431,7 +1431,7 @@ static void is_composing_notification(void) { LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc"); chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity); - + linphone_core_get_chat_room(marie->lc, pauline->identity); /*make marie create the chatroom with pauline, which is necessary for receiving the is-composing*/ { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ From 13f0d85f68077fb637bfd31009a42a7795b26790 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Tue, 8 Sep 2015 21:20:25 +0200 Subject: [PATCH 130/134] implement automatic repairing of SIP dialogs broken by a network disconnection. --- coreapi/linphonecall.c | 70 +++++++++++++++++++++++++++++++++++++----- coreapi/linphonecore.c | 3 ++ coreapi/misc.c | 1 - coreapi/private.h | 3 ++ coreapi/proxy.c | 7 ++++- tester/call_tester.c | 56 ++++++++++++++++++++++++++++++++- 6 files changed, 130 insertions(+), 10 deletions(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index b5e8d62b9..ed2975358 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -3651,16 +3651,23 @@ static void report_bandwidth(LinphoneCall *call, MediaStream *as, MediaStream *v } -static void linphone_core_disconnected(LinphoneCore *lc, LinphoneCall *call){ - char temp[256]={0}; +static void linphone_call_lost(LinphoneCall *call, LinphoneReason reason){ + LinphoneCore *lc = call->core; + char *temp = NULL; char *from=NULL; from = linphone_call_get_remote_address_as_string(call); - snprintf(temp,sizeof(temp)-1,"Remote end %s seems to have disconnected, the call is going to be closed.",from ? from : ""); + 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; + } if (from) ms_free(from); - - ms_message("On call [%p]: %s",call,temp); - linphone_core_notify_display_warning(lc,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); } @@ -3928,7 +3935,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse && call->audiostream->ms.state==MSStreamStarted && disconnect_timeout>0 ) disconnected=!audio_stream_alive(call->audiostream,disconnect_timeout); if (disconnected) - linphone_core_disconnected(call->core,call); + linphone_call_lost(call, LinphoneReasonUnknown); } void linphone_call_log_completed(LinphoneCall *call){ @@ -4234,3 +4241,52 @@ RtpTransport* linphone_call_get_meta_rtcp_transport(LinphoneCall *call, int stre rtp_session_get_transports(call->sessions[stream_index].rtp_session, &meta_rtp, &meta_rtcp); return meta_rtcp; } + +void linphone_call_set_broken(LinphoneCall *call){ + switch(call->state){ + /*for all the early states, we prefer to drop the call*/ + case LinphoneCallOutgoingInit: + case LinphoneCallOutgoingRinging: + case LinphoneCallOutgoingEarlyMedia: + case LinphoneCallIncomingReceived: + case LinphoneCallIncomingEarlyMedia: + linphone_call_lost(call, LinphoneReasonIOError); + break; + case LinphoneCallStreamsRunning: + case LinphoneCallPaused: + case LinphoneCallPausedByRemote: + call->broken = TRUE; + break; + default: + ms_error("linphone_call_set_broken() unimplemented case."); + break; + } +} + +void linphone_call_repair_if_broken(LinphoneCall *call){ + LinphoneCallParams *params; + + if (!call->broken) return; + + /*First, make sure that the proxy from which we received this call, or to which we routed this call is registered*/ + if (!call->dest_proxy || linphone_proxy_config_get_state(call->dest_proxy) != LinphoneRegistrationOk) return; + + + switch (call->state){ + case LinphoneCallStreamsRunning: + case LinphoneCallPaused: + case LinphoneCallPausedByRemote: + ms_message("LinphoneCall[%p] is going to be updated (reINVITE) in order to recover from lost connectivity", call); + if (call->ice_session){ + ice_session_restart(call->ice_session); + ice_session_set_role(call->ice_session, IR_Controlling); + } + params = linphone_core_create_call_params(call->core, call); + linphone_core_update_call(call->core, call, params); + linphone_call_params_unref(params); + break; + default: + ms_error("linphone_call_resume_if_broken(): don't know what to do in state [%s]", linphone_call_state_to_string(call->state)); + break; + } +} diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 1c238a4aa..fc18ce331 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -3281,6 +3281,7 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho } if (params!=NULL){ + call->broken = FALSE; linphone_call_set_state(call,nextstate,"Updating call"); #if defined(VIDEO_ENABLED) && defined(BUILD_UPNP) has_video = call->params->has_video; @@ -6200,6 +6201,8 @@ static void set_network_reachable(LinphoneCore* lc,bool_t isReachable, time_t cu if (!lc->network_reachable){ linphone_core_invalidate_friend_subscriptions(lc); sal_reset_transports(lc->sal); + /*mark all calls as broken, so that they can be either dropped immediately or restaured when network will be back*/ + ms_list_for_each(lc->calls, (MSIterateFunc) linphone_call_set_broken); }else{ linphone_core_resolve_stun_server(lc); } diff --git a/coreapi/misc.c b/coreapi/misc.c index 60465887d..7547f1022 100644 --- a/coreapi/misc.c +++ b/coreapi/misc.c @@ -1833,4 +1833,3 @@ void linphone_task_list_run(LinphoneTaskList *t){ void linphone_task_list_free(LinphoneTaskList *t){ t->hooks = ms_list_free_with_data(t->hooks, (void (*)(void*))ms_free); } - diff --git a/coreapi/private.h b/coreapi/private.h index 6d5bc08d3..afcae52a8 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -311,6 +311,7 @@ struct _LinphoneCall{ bool_t record_active; bool_t paused_by_app; + bool_t broken; /*set to TRUE when the call is in broken state due to network disconnection or transport */ }; BELLE_SIP_DECLARE_VPTR(LinphoneCall); @@ -935,6 +936,8 @@ LinphoneEcCalibratorStatus ec_calibrator_get_status(EcCalibrator *ecc); void ec_calibrator_destroy(EcCalibrator *ecc); void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapsed); +void linphone_call_set_broken(LinphoneCall *call); +void linphone_call_repair_if_broken(LinphoneCall *call); void linphone_core_preempt_sound_resources(LinphoneCore *lc); int _linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call); diff --git a/coreapi/proxy.c b/coreapi/proxy.c index 5378236a1..b22b5f29a 100644 --- a/coreapi/proxy.c +++ b/coreapi/proxy.c @@ -1512,8 +1512,13 @@ void linphone_proxy_config_set_state(LinphoneProxyConfig *cfg, LinphoneRegistrat if (update_friends){ linphone_core_update_friends_subscriptions(lc,cfg,TRUE); } - if (lc) + if (lc){ linphone_core_notify_registration_state_changed(lc,cfg,state,message); + if (lc->calls && lp_config_get_int(lc->config, "sip", "repair_broken_calls", 1)){ + /*if we are registered and there were broken calls due to a past network disconnection, attempt to repair them*/ + ms_list_for_each(lc->calls, (MSIterateFunc) linphone_call_repair_if_broken); + } + } } else { /*state already reported*/ } diff --git a/tester/call_tester.c b/tester/call_tester.c index 953632bb7..dc54182cb 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -4901,6 +4901,55 @@ static void call_record_with_custom_rtp_modifier(void) { custom_rtp_modifier(FALSE, TRUE); } +static void _call_with_network_switch(bool_t use_ice){ + LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); + bool_t call_ok; + + if (use_ice){ + linphone_core_set_firewall_policy(marie->lc,LinphonePolicyUseIce); + linphone_core_set_firewall_policy(pauline->lc,LinphonePolicyUseIce); + } + + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); + if (!call_ok) goto end; + + wait_for_until(marie->lc, pauline->lc, NULL, 0, 2000); + if (use_ice) BC_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection)); + + /*marie looses the network and reconnects*/ + linphone_core_set_network_reachable(marie->lc, FALSE); + wait_for_until(marie->lc, pauline->lc, NULL, 0, 1000); + + /*marie will reconnect and register*/ + linphone_core_set_network_reachable(marie->lc, TRUE); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneRegistrationOk, 2)); + + /*pauline shall receive a reINVITE to update the session*/ + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallUpdatedByRemote, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 2)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 2)); + + liblinphone_tester_check_rtcp(pauline, marie); + if (use_ice) BC_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection)); + + /*pauline shall be able to end the call without problem now*/ + end_call(pauline, marie); +end: + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); +} + +static void call_with_network_switch(void){ + _call_with_network_switch(FALSE); +} + +#if 0 +static void call_with_network_switch_and_ice(void){ + _call_with_network_switch(TRUE); +} +#endif + test_t call_tests[] = { { "Early declined call", early_declined_call }, { "Call declined", call_declined }, @@ -5033,7 +5082,12 @@ test_t call_tests[] = { { "Call with complex late offering", call_with_complex_late_offering }, { "Call with custom RTP Modifier", call_with_custom_rtp_modifier }, { "Call paused resumed with custom RTP Modifier", call_paused_resumed_with_custom_rtp_modifier }, - { "Call record with custom RTP Modifier", call_record_with_custom_rtp_modifier } + { "Call record with custom RTP Modifier", call_record_with_custom_rtp_modifier }, + { "Call with network switch", call_with_network_switch } +#if 0 + , + { "Call with network switch and ICE", call_with_network_switch_and_ice } +#endif }; test_suite_t call_test_suite = { From 4b7ec9e1306e2bc0f634518f307724d083302725 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 9 Sep 2015 10:36:14 +0200 Subject: [PATCH 131/134] Improved call declined test to check call log status is ok --- tester/call_tester.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tester/call_tester.c b/tester/call_tester.c index dc54182cb..3deeb560c 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -925,7 +925,9 @@ static void call_declined(void) { BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallEnd,1, int, "%d"); BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallEnd,1, int, "%d"); BC_ASSERT_EQUAL(linphone_call_get_reason(in_call),LinphoneReasonDeclined, int, "%d"); + BC_ASSERT_EQUAL(linphone_call_log_get_status(linphone_call_get_call_log(in_call)),LinphoneCallDeclined, int, "%d"); BC_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonDeclined, int, "%d"); + BC_ASSERT_EQUAL(linphone_call_log_get_status(linphone_call_get_call_log(out_call)),LinphoneCallDeclined, int, "%d"); linphone_call_unref(in_call); } linphone_call_unref(out_call); From ec0c7d5f70ed5332a44bb77998949ac75fa03230 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 9 Sep 2015 11:04:27 +0200 Subject: [PATCH 132/134] Fix wrong call declined log status --- coreapi/linphonecall.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index ed2975358..6a9b440bd 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -1311,11 +1311,11 @@ void linphone_call_set_state(LinphoneCall *call, LinphoneCallState cstate, const break; case LinphoneCallEnd: case LinphoneCallError: - switch(call->non_op_error.reason){ - case SalReasonDeclined: + switch(linphone_error_info_get_reason(linphone_call_get_error_info(call))) { + case LinphoneReasonDeclined: call->log->status=LinphoneCallDeclined; break; - case SalReasonRequestTimeout: + case LinphoneReasonNotAnswered: call->log->status=LinphoneCallMissed; break; default: From ebff938b646e3a2c2d54d546f6f7405bd0e6bbfc Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 9 Sep 2015 14:11:22 +0200 Subject: [PATCH 133/134] fix non-working icons on mac --- build/macos/linphone.bundle | 2 +- oRTP | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/macos/linphone.bundle b/build/macos/linphone.bundle index 841feb3a2..f9309ebaa 100644 --- a/build/macos/linphone.bundle +++ b/build/macos/linphone.bundle @@ -76,7 +76,7 @@ - ${prefix}/share/mime/globs + ${prefix}/share/mime/mime.cache diff --git a/oRTP b/oRTP index 7e89236af..bb95930a7 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit 7e89236af6552140d0d6fa3b6878bc13addd8f7d +Subproject commit bb95930a77e8a1432e5c31dc170f05ecd15518e5 From 4619c551d38265850e6fd371bac829c1ce69bff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Wed, 9 Sep 2015 15:56:32 +0200 Subject: [PATCH 134/134] Delete the code which modifies the XDG_DATA_DIRS envvar at Linphone starting --- gtk/main.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/gtk/main.c b/gtk/main.c index 5e967242b..d283d3c80 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -2082,18 +2082,6 @@ int main(int argc, char *argv[]){ /*for pulseaudio:*/ g_setenv("PULSE_PROP_media.role", "phone", TRUE); #endif - - /* Add the data directory of the install prefix to XDG_DATA_DIRS - * This environment variable is used by GTK+ to locate the directory - * which stores icon images. */ - tmp = g_getenv("XDG_DATA_DIRS"); - if(tmp && strlen(tmp) > 0) { - char *xdg_data_dirs = g_strdup_printf("%s:%s", PACKAGE_DATA_DIR, tmp); - g_setenv("XDG_DATA_DIRS", xdg_data_dirs, TRUE); - g_free(xdg_data_dirs); - } else { - g_setenv("XDG_DATA_DIRS", PACKAGE_DATA_DIR, FALSE); - } lang=linphone_gtk_get_lang(config_file); if (lang == NULL || lang[0]=='\0'){