From 2359a199a27de809ee56991f5494bdb146020543 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Wed, 10 Feb 2010 17:04:45 -0500 Subject: [PATCH 001/197] [#1641] Implement gconf support (window size and position) --- sflphone-client-gnome/Makefile.am | 12 +- sflphone-client-gnome/configure.ac | 3 + .../sflphone-client-gnome.schemas | 56 ++ sflphone-client-gnome/src/Makefile.am | 5 +- .../src/eel-gconf-extensions.c | 606 ++++++++++++++++++ .../src/eel-gconf-extensions.h | 88 +++ sflphone-client-gnome/src/mainwindow.c | 36 +- sflphone-client-gnome/src/sflphone_const.h | 9 + 8 files changed, 806 insertions(+), 9 deletions(-) create mode 100644 sflphone-client-gnome/sflphone-client-gnome.schemas create mode 100644 sflphone-client-gnome/src/eel-gconf-extensions.c create mode 100644 sflphone-client-gnome/src/eel-gconf-extensions.h diff --git a/sflphone-client-gnome/Makefile.am b/sflphone-client-gnome/Makefile.am index 47bb88964f..7b944d2331 100644 --- a/sflphone-client-gnome/Makefile.am +++ b/sflphone-client-gnome/Makefile.am @@ -2,6 +2,8 @@ SUBDIRS = src pixmaps tests man po doc ACLOCAL_AMFLAGS = -I m4 +GCONFTOOL=gconftool-2 + GNOME_DOC=gnome-doc-utils.make log4crc_DATA = log4crc @@ -10,10 +12,16 @@ log4crcdir = $(datadir)/sflphone uidir=$(datadir)/sflphone/ui ui_DATA=src/ui.xml -EXTRA_DIST = $(log4crc_DATA) sflphone.desktop.in $(GNOME_DOC) m4 $(UI_DATA) +schemadir = @GCONF_SCHEMA_FILE_DIR@ +schema_DATA = sflphone-client-gnome.schemas + +EXTRA_DIST = $(log4crc_DATA) sflphone.desktop.in $(GNOME_DOC) m4 $(UI_DATA) $(schema_DATA) appsdir = $(datadir)/applications apps_in_files = sflphone.desktop.in apps_DATA = $(apps_in_files:.desktop.in=.desktop) #@INTLTOOL_DESKTOP_RULE@ -DISTCLEANFILES= sflphone.desktop $(GNOME_DOC) +DISTCLEANFILES= sflphone.desktop $(GNOME_DOC) + +install-data-local: + GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA) diff --git a/sflphone-client-gnome/configure.ac b/sflphone-client-gnome/configure.ac index f64a87384a..bb631adde6 100644 --- a/sflphone-client-gnome/configure.ac +++ b/sflphone-client-gnome/configure.ac @@ -32,6 +32,9 @@ AC_PROG_INSTALL AC_STDC_HEADERS AC_PROG_LIBTOOL +dnl GCONF utilities +AM_GCONF_SOURCE_2 + dnl Check for log4c AC_CHECK_HEADERS(log4c.h, have_log4c=true, have_log4c=false) if ! $have_log4c; then diff --git a/sflphone-client-gnome/sflphone-client-gnome.schemas b/sflphone-client-gnome/sflphone-client-gnome.schemas new file mode 100644 index 0000000000..ef876b5543 --- /dev/null +++ b/sflphone-client-gnome/sflphone-client-gnome.schemas @@ -0,0 +1,56 @@ +<gconfschemafile> + <schemalist> + + <schema> + <key>/schemas/apps/sflphone-client-gnome/state/window_width</key> + <applyto>/apps/sflphone-client-gnome/state/window_width</applyto> + <owner>sflphone-client-gnome</owner> + <type>int</type> + <default>800</default> + <locale name="C"> + <short>Main window width</short> + <long>Main window width.</long> + </locale> + </schema> + + + <schema> + <key>/schemas/apps/sflphone-client-gnome/state/window_position_x</key> + <applyto>/apps/sflphone-client-gnome/state/window_position_x</applyto> + <owner>sflphone-client-gnome</owner> + <type>int</type> + <default>0</default> + <locale name="C"> + <short>Main window X position</short> + <long>Main window X position.</long> + </locale> + </schema> + + + <schema> + <key>/schemas/apps/sflphone-client-gnome/state/window_position_y</key> + <applyto>/apps/sflphone-client-gnome/state/window_position_y</applyto> + <owner>sflphone-client-gnome</owner> + <type>int</type> + <default>0</default> + <locale name="C"> + <short>Main window Y position</short> + <long>Main window Y position.</long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/sflphone-client-gnome/state/window_height</key> + <applyto>/apps/sflphone-client-gnome/state/window_height</applyto> + <owner>sflphone-client-gnome</owner> + <type>int</type> + <default>550</default> + <locale name="C"> + <short>Main window height</short> + <long>Main window height.</long> + </locale> + </schema> + + + </schemalist> +</gconfschemafile> diff --git a/sflphone-client-gnome/src/Makefile.am b/sflphone-client-gnome/src/Makefile.am index 1f2eb25028..7e3fb51388 100644 --- a/sflphone-client-gnome/src/Makefile.am +++ b/sflphone-client-gnome/src/Makefile.am @@ -24,11 +24,12 @@ sflphone_client_gnome_SOURCES = \ sliders.c \ statusicon.c \ codeclist.c \ - reqaccount.c + reqaccount.c \ + eel-gconf-extensions.c noinst_HEADERS = actions.h sflnotify.h mainwindow.h dialpad.h codeclist.h \ reqaccount.h errors.h sflphone_const.h uimanager.h \ - accountlist.h sliders.h statusicon.h callable_obj.h conference_obj.h + accountlist.h sliders.h statusicon.h callable_obj.h conference_obj.h eel-gconf-extensions.h sflphone_client_gnome_LDADD = $(DEPS_LIBS) $(NOTIFY_LIBS) $(SFLPHONEGTK_LIBS) $(LIBSEXY_LIBS) $(LOG4C) diff --git a/sflphone-client-gnome/src/eel-gconf-extensions.c b/sflphone-client-gnome/src/eel-gconf-extensions.c new file mode 100644 index 0000000000..2bc4ab804f --- /dev/null +++ b/sflphone-client-gnome/src/eel-gconf-extensions.c @@ -0,0 +1,606 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ + +/* eel-gconf-extensions.c - Stuff to make GConf easier to use. + + Copyright (C) 2000, 2001 Eazel, Inc. + + The Gnome Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The Gnome Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the Gnome Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + Authors: Ramiro Estrugo <ramiro@eazel.com> +*/ + +#include <stdlib.h> +#include <config.h> +#include "eel-gconf-extensions.h" + +#include <gconf/gconf-client.h> +#include <gconf/gconf.h> +#include <gtk/gtkwidget.h> +#include <libgnome/gnome-i18n.h> +#include <gtk/gtkmessagedialog.h> + +static GConfClient *global_gconf_client = NULL; + +static void +global_client_free (void) +{ + if (global_gconf_client == NULL) { + return; + } + + g_object_unref (G_OBJECT (global_gconf_client)); + global_gconf_client = NULL; +} + +/* Public */ +GConfClient * +eel_gconf_client_get_global (void) +{ + /* Initialize gconf if needed */ + if (!gconf_is_initialized ()) { + char *argv[] = { "eel-preferences", NULL }; + GError *error = NULL; + char *teststr; + + if (!gconf_init (1, argv, &error)) { + if (eel_gconf_handle_error (&error)) { + return NULL; + } + } + + /* check if gconf schemas are working */ + teststr = gconf_client_get_string (eel_gconf_client_get_global(), + "/apps/gpdf/gconf_test", NULL); + if (!teststr) + { + GtkWidget *dialog; + dialog = gtk_message_dialog_new (NULL, + GTK_DIALOG_MODAL, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + _("Cannot find a schema for gpdf preferences. \n" + "Check your gconf setup, look at gpdf FAQ for \n" + "more info")); + gtk_dialog_run (GTK_DIALOG (dialog)); + exit (0); + } + else + { + g_free (teststr); + } + + } + + if (global_gconf_client == NULL) { + global_gconf_client = gconf_client_get_default (); + g_atexit (global_client_free); + } + + return global_gconf_client; +} + +gboolean +eel_gconf_handle_error (GError **error) +{ + g_return_val_if_fail (error != NULL, FALSE); + + if (*error != NULL) { + g_warning (_("GConf error:\n %s"), (*error)->message); + g_error_free (*error); + *error = NULL; + + return TRUE; + } + + return FALSE; +} + +void +eel_gconf_set_boolean (const char *key, + gboolean boolean_value) +{ + GConfClient *client; + GError *error = NULL; + + g_return_if_fail (key != NULL); + + client = eel_gconf_client_get_global (); + g_return_if_fail (client != NULL); + + gconf_client_set_bool (client, key, boolean_value, &error); + eel_gconf_handle_error (&error); +} + +gboolean +eel_gconf_get_boolean (const char *key) +{ + gboolean result; + GConfClient *client; + GError *error = NULL; + + g_return_val_if_fail (key != NULL, FALSE); + + client = eel_gconf_client_get_global (); + g_return_val_if_fail (client != NULL, FALSE); + + result = gconf_client_get_bool (client, key, &error); + + if (eel_gconf_handle_error (&error)) { + result = FALSE; + } + + return result; +} + +void +eel_gconf_set_integer (const char *key, + int int_value) +{ + GConfClient *client; + GError *error = NULL; + + g_return_if_fail (key != NULL); + + client = eel_gconf_client_get_global (); + g_return_if_fail (client != NULL); + + gconf_client_set_int (client, key, int_value, &error); + eel_gconf_handle_error (&error); +} + +int +eel_gconf_get_integer (const char *key) +{ + int result; + GConfClient *client; + GError *error = NULL; + + g_return_val_if_fail (key != NULL, 0); + + client = eel_gconf_client_get_global (); + g_return_val_if_fail (client != NULL, 0); + + result = gconf_client_get_int (client, key, &error); + + if (eel_gconf_handle_error (&error)) { + result = 0; + } + + return result; +} + +void +eel_gconf_set_float (const char *key, + gfloat float_value) +{ + GConfClient *client; + GError *error = NULL; + + g_return_if_fail (key != NULL); + + client = eel_gconf_client_get_global (); + g_return_if_fail (client != NULL); + + gconf_client_set_float (client, key, float_value, &error); + eel_gconf_handle_error (&error); +} + +gfloat +eel_gconf_get_float (const char *key) +{ + gfloat result; + GConfClient *client; + GError *error = NULL; + + g_return_val_if_fail (key != NULL, 0); + + client = eel_gconf_client_get_global (); + g_return_val_if_fail (client != NULL, 0); + + result = gconf_client_get_float (client, key, &error); + + if (eel_gconf_handle_error (&error)) { + result = 0; + } + + return result; +} + +void +eel_gconf_set_string (const char *key, + const char *string_value) +{ + GConfClient *client; + GError *error = NULL; + + g_return_if_fail (key != NULL); + g_return_if_fail (string_value != NULL); + + client = eel_gconf_client_get_global (); + g_return_if_fail (client != NULL); + + gconf_client_set_string (client, key, string_value, &error); + eel_gconf_handle_error (&error); +} + +void +eel_gconf_unset (const char *key) +{ + GConfClient *client; + GError *error = NULL; + + g_return_if_fail (key != NULL); + + client = eel_gconf_client_get_global (); + g_return_if_fail (client != NULL); + + gconf_client_unset (client, key, &error); + eel_gconf_handle_error (&error); +} + +char * +eel_gconf_get_string (const char *key) +{ + char *result; + GConfClient *client; + GError *error = NULL; + + g_return_val_if_fail (key != NULL, NULL); + + client = eel_gconf_client_get_global (); + g_return_val_if_fail (client != NULL, NULL); + + result = gconf_client_get_string (client, key, &error); + + if (eel_gconf_handle_error (&error)) { + result = g_strdup (""); + } + + return result; +} + +void +eel_gconf_set_string_list (const char *key, + const GSList *slist) +{ + GConfClient *client; + GError *error; + + g_return_if_fail (key != NULL); + + client = eel_gconf_client_get_global (); + g_return_if_fail (client != NULL); + + error = NULL; + gconf_client_set_list (client, key, GCONF_VALUE_STRING, + /* Need cast cause of GConf api bug */ + (GSList *) slist, + &error); + eel_gconf_handle_error (&error); +} + +GSList * +eel_gconf_get_string_list (const char *key) +{ + GSList *slist; + GConfClient *client; + GError *error; + + g_return_val_if_fail (key != NULL, NULL); + + client = eel_gconf_client_get_global (); + g_return_val_if_fail (client != NULL, NULL); + + error = NULL; + slist = gconf_client_get_list (client, key, GCONF_VALUE_STRING, &error); + if (eel_gconf_handle_error (&error)) { + slist = NULL; + } + + return slist; +} + +/* This code wasn't part of the original eel-gconf-extensions.c */ +void +eel_gconf_set_integer_list (const char *key, + const GSList *slist) +{ + GConfClient *client; + GError *error; + + g_return_if_fail (key != NULL); + + client = eel_gconf_client_get_global (); + g_return_if_fail (client != NULL); + + error = NULL; + gconf_client_set_list (client, key, GCONF_VALUE_INT, + /* Need cast cause of GConf api bug */ + (GSList *) slist, + &error); + eel_gconf_handle_error (&error); +} + +GSList * +eel_gconf_get_integer_list (const char *key) +{ + GSList *slist; + GConfClient *client; + GError *error; + + g_return_val_if_fail (key != NULL, NULL); + + client = eel_gconf_client_get_global (); + g_return_val_if_fail (client != NULL, NULL); + + error = NULL; + slist = gconf_client_get_list (client, key, GCONF_VALUE_INT, &error); + if (eel_gconf_handle_error (&error)) { + slist = NULL; + } + + return slist; +} +/* End of added code */ + +gboolean +eel_gconf_is_default (const char *key) +{ + gboolean result; + GConfValue *value; + GError *error = NULL; + + g_return_val_if_fail (key != NULL, FALSE); + + value = gconf_client_get_without_default (eel_gconf_client_get_global (), key, &error); + + if (eel_gconf_handle_error (&error)) { + if (value != NULL) { + gconf_value_free (value); + } + return FALSE; + } + + result = (value == NULL); + + if (value != NULL) { + gconf_value_free (value); + } + + + return result; +} + +gboolean +eel_gconf_monitor_add (const char *directory) +{ + GError *error = NULL; + GConfClient *client; + + g_return_val_if_fail (directory != NULL, FALSE); + + client = eel_gconf_client_get_global (); + g_return_val_if_fail (client != NULL, FALSE); + + gconf_client_add_dir (client, + directory, + GCONF_CLIENT_PRELOAD_NONE, + &error); + + if (eel_gconf_handle_error (&error)) { + return FALSE; + } + + return TRUE; +} + +gboolean +eel_gconf_monitor_remove (const char *directory) +{ + GError *error = NULL; + GConfClient *client; + + if (directory == NULL) { + return FALSE; + } + + client = eel_gconf_client_get_global (); + g_return_val_if_fail (client != NULL, FALSE); + + gconf_client_remove_dir (client, + directory, + &error); + + if (eel_gconf_handle_error (&error)) { + return FALSE; + } + + return TRUE; +} + +void +eel_gconf_suggest_sync (void) +{ + GConfClient *client; + GError *error = NULL; + + client = eel_gconf_client_get_global (); + g_return_if_fail (client != NULL); + + gconf_client_suggest_sync (client, &error); + eel_gconf_handle_error (&error); +} + +GConfValue* +eel_gconf_get_value (const char *key) +{ + GConfValue *value = NULL; + GConfClient *client; + GError *error = NULL; + + g_return_val_if_fail (key != NULL, NULL); + + client = eel_gconf_client_get_global (); + g_return_val_if_fail (client != NULL, NULL); + + value = gconf_client_get (client, key, &error); + + if (eel_gconf_handle_error (&error)) { + if (value != NULL) { + gconf_value_free (value); + value = NULL; + } + } + + return value; +} + +void +eel_gconf_set_value (const char *key, const GConfValue *value) +{ + GConfClient *client; + GError *error = NULL; + + g_return_if_fail (key != NULL); + + client = eel_gconf_client_get_global (); + g_return_if_fail (client != NULL); + + gconf_client_set (client, key, value, &error); + + if (eel_gconf_handle_error (&error)) { + return; + } +} + +gboolean +eel_gconf_key_exists (const char *key) +{ + GConfValue *value = NULL; + GConfClient *client; + GError *error = NULL; + gboolean error_occurred; + gboolean value_found; + + g_return_val_if_fail (key != NULL, FALSE); + + client = eel_gconf_client_get_global (); + g_return_val_if_fail (client != NULL, FALSE); + + value = gconf_client_get (client, key, &error); + + value_found = (value != NULL); + error_occurred = (error != NULL); + + eel_gconf_value_free (value); + if (error != NULL) { + g_error_free (error); + } + + return (!error_occurred && value_found); +} + +void +eel_gconf_value_free (GConfValue *value) +{ + if (value == NULL) { + return; + } + + gconf_value_free (value); +} + +guint +eel_gconf_notification_add (const char *key, + GConfClientNotifyFunc notification_callback, + gpointer callback_data) +{ + guint notification_id; + GConfClient *client; + GError *error = NULL; + + g_return_val_if_fail (key != NULL, EEL_GCONF_UNDEFINED_CONNECTION); + g_return_val_if_fail (notification_callback != NULL, EEL_GCONF_UNDEFINED_CONNECTION); + + client = eel_gconf_client_get_global (); + g_return_val_if_fail (client != NULL, EEL_GCONF_UNDEFINED_CONNECTION); + + notification_id = gconf_client_notify_add (client, + key, + notification_callback, + callback_data, + NULL, + &error); + + if (eel_gconf_handle_error (&error)) { + if (notification_id != EEL_GCONF_UNDEFINED_CONNECTION) { + gconf_client_notify_remove (client, notification_id); + notification_id = EEL_GCONF_UNDEFINED_CONNECTION; + } + } + + return notification_id; +} + +void +eel_gconf_notification_remove (guint notification_id) +{ + GConfClient *client; + + if (notification_id == EEL_GCONF_UNDEFINED_CONNECTION) { + return; + } + + client = eel_gconf_client_get_global (); + g_return_if_fail (client != NULL); + + gconf_client_notify_remove (client, notification_id); +} + +/* Simple wrapper for eel_gconf_notifier_add which + * adds the notifier id to the GList given as argument + * so that a call to gpdf_notification_free can remove the notifiers + */ +void +gpdf_notification_add (const char *key, + GConfClientNotifyFunc notification_callback, + gpointer callback_data, + GList **notifiers) +{ + guint id = 0; + + id = eel_gconf_notification_add(key, + notification_callback, + callback_data); + if (notifiers != NULL) { + *notifiers = g_list_append(*notifiers, + (gpointer)id); + } +} + +/* Removes all the notifiers listed in notifiers */ +/* Frees the notifiers list */ +void +gpdf_notification_remove (GList **notifiers) +{ + g_list_foreach(*notifiers, + (GFunc)eel_gconf_notification_remove, + NULL); + g_list_free(*notifiers); + *notifiers = NULL; +} + + diff --git a/sflphone-client-gnome/src/eel-gconf-extensions.h b/sflphone-client-gnome/src/eel-gconf-extensions.h new file mode 100644 index 0000000000..f4afab2606 --- /dev/null +++ b/sflphone-client-gnome/src/eel-gconf-extensions.h @@ -0,0 +1,88 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ + +/* eel-gconf-extensions.h - Stuff to make GConf easier to use. + + Copyright (C) 2000, 2001 Eazel, Inc. + + The Gnome Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The Gnome Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the Gnome Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + Authors: Ramiro Estrugo <ramiro@eazel.com> +*/ + +#ifndef EEL_GCONF_EXTENSIONS_H +#define EEL_GCONF_EXTENSIONS_H + +#include <glib/gerror.h> +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + +#ifdef __cplusplus +BEGIN_EXTERN_C +#endif + +#define EEL_GCONF_UNDEFINED_CONNECTION 0 + +GConfClient *eel_gconf_client_get_global (void); +gboolean eel_gconf_handle_error (GError **error); +void eel_gconf_set_boolean (const char *key, + gboolean boolean_value); +gboolean eel_gconf_get_boolean (const char *key); +int eel_gconf_get_integer (const char *key); +void eel_gconf_set_integer (const char *key, + int int_value); +gfloat eel_gconf_get_float (const char *key); +void eel_gconf_set_float (const char *key, + gfloat float_value); +char * eel_gconf_get_string (const char *key); +void eel_gconf_set_string (const char *key, + const char *string_value); +GSList * eel_gconf_get_string_list (const char *key); +void eel_gconf_set_string_list (const char *key, + const GSList *string_list_value); +gboolean eel_gconf_is_default (const char *key); +gboolean eel_gconf_monitor_add (const char *directory); +gboolean eel_gconf_monitor_remove (const char *directory); +void eel_gconf_suggest_sync (void); +GConfValue* eel_gconf_get_value (const char *key); +gboolean eel_gconf_value_is_equal (const GConfValue *a, + const GConfValue *b); +void eel_gconf_set_value (const char *key, + const GConfValue *value); +gboolean eel_gconf_key_exists (const char *key); + +void eel_gconf_value_free (GConfValue *value); +void eel_gconf_unset (const char *key); + +/* Functions which weren't part of the eel-gconf-extensions.h file from eel */ +GSList *eel_gconf_get_integer_list (const char *key); +void eel_gconf_set_integer_list (const char *key, + const GSList *slist); +void gpdf_notification_add (const char *key, + GConfClientNotifyFunc notification_callback, + gpointer callback_data, + GList **notifiers); +void gpdf_notification_remove (GList **notifiers); +guint eel_gconf_notification_add (const char *key, + GConfClientNotifyFunc notification_callback, + gpointer callback_data); +void eel_gconf_notification_remove (guint notification_id); + +#ifdef __cplusplus +END_EXTERN_C +#endif + +#endif /* EEL_GCONF_EXTENSIONS_H */ + diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c index 8218938509..4ac4250247 100644 --- a/sflphone-client-gnome/src/mainwindow.c +++ b/sflphone-client-gnome/src/mainwindow.c @@ -33,6 +33,7 @@ #include <widget/minidialog.h> #include <gtk/gtk.h> +#include <eel-gconf-extensions.h> /** Local variables */ GtkUIManager *ui_manager = NULL; @@ -47,6 +48,22 @@ GtkWidget * statusBar = NULL; GtkWidget * filterEntry = NULL; PidginScrollBook *embedded_error_notebook; +static gboolean window_configure_cb (GtkWidget *win, GdkEventConfigure *event) { + + int pos_x, pos_y; + + eel_gconf_set_integer (CONF_MAIN_WINDOW_WIDTH, event->width); + eel_gconf_set_integer (CONF_MAIN_WINDOW_HEIGHT, event->height); + + gtk_window_get_position (GTK_WINDOW (window), &pos_x, &pos_y); + eel_gconf_set_integer (CONF_MAIN_WINDOW_POSITION_X, pos_x); + eel_gconf_set_integer (CONF_MAIN_WINDOW_POSITION_Y, pos_y); + + return FALSE; +} + + + /** * Minimize the main window. */ @@ -148,20 +165,24 @@ create_main_window () GError *error = NULL; gboolean ret; const char *window_title = "SFLphone VoIP Client"; + int width, height, position_x, position_y; focus_is_on_calltree = FALSE; focus_is_on_searchbar = FALSE; + // Get configuration stored in gconf + width = eel_gconf_get_integer (CONF_MAIN_WINDOW_WIDTH); + height = eel_gconf_get_integer (CONF_MAIN_WINDOW_HEIGHT); + position_x = eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_X); + position_y = eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_Y); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 0); gtk_window_set_title (GTK_WINDOW (window), window_title); - gtk_window_set_default_size (GTK_WINDOW (window), MAIN_WINDOW_WIDTH, MAIN_WINDOW_HEIGHT); + gtk_window_set_default_size (GTK_WINDOW (window), width, height); gtk_window_set_default_icon_from_file (LOGO, NULL); - gtk_window_set_position( GTK_WINDOW( window ) , GTK_WIN_POS_MOUSE); - - // GTK_WIDGET_SET_FLAGS (GTK_WIDGET(window),GTK_CAN_FOCUS); - // gtk_widget_grab_focus (GTK_WIDGET(window)); + gtk_window_set_position (GTK_WINDOW(window) , GTK_WIN_POS_MOUSE); /* Connect the destroy event of the window with our on_destroy function * When the window is about to be destroyed we get a notificaiton and @@ -179,6 +200,8 @@ create_main_window () g_signal_connect_after (G_OBJECT (window), "focus-out-event", G_CALLBACK (focus_on_mainwindow_out), NULL); + g_signal_connect_object (G_OBJECT (window), "configure-event", + G_CALLBACK (window_configure_cb), NULL, 0); gtk_widget_set_name (window, "mainwindow"); @@ -270,6 +293,9 @@ create_main_window () } #endif } + + gtk_window_move (GTK_WINDOW (window), position_x, position_y); + } GtkAccelGroup * diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index 7df3cc9144..4a7bc06770 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -161,4 +161,13 @@ log4c_category_t* log4c_sfl_gtk_category; #define ERROR(...) log4c_category_log(log4c_sfl_gtk_category, LOG4C_PRIORITY_ERROR, __VA_ARGS__); #define FATAL(...) log4c_category_log(log4c_sfl_gtk_category, LOG4C_PRIORITY_FATAL, __VA_ARGS__); +/** + * Gconf + */ +#define CONF_PREFIX "/apps/sflphone-client-gnome" +#define CONF_MAIN_WINDOW_WIDTH CONF_PREFIX "/state/window_width" +#define CONF_MAIN_WINDOW_HEIGHT CONF_PREFIX "/state/window_height" +#define CONF_MAIN_WINDOW_POSITION_X CONF_PREFIX "/state/window_x_position" +#define CONF_MAIN_WINDOW_POSITION_Y CONF_PREFIX "/state/window_y_position" + #endif -- GitLab From 26f2b6988d2fbf2b64353653ca5d6ff5928d5fbf Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Wed, 10 Feb 2010 17:56:27 -0500 Subject: [PATCH 002/197] [#1641] Remember position when restoring window from the system tray --- sflphone-client-gnome/src/mainwindow.c | 5 +++++ sflphone-client-gnome/src/statusicon.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c index 4ac4250247..58f96ad600 100644 --- a/sflphone-client-gnome/src/mainwindow.c +++ b/sflphone-client-gnome/src/mainwindow.c @@ -48,6 +48,10 @@ GtkWidget * statusBar = NULL; GtkWidget * filterEntry = NULL; PidginScrollBook *embedded_error_notebook; + +/** + * Handle main window resizing + */ static gboolean window_configure_cb (GtkWidget *win, GdkEventConfigure *event) { int pos_x, pos_y; @@ -294,6 +298,7 @@ create_main_window () #endif } + // Restore position according to the configuration stored in gconf gtk_window_move (GTK_WINDOW (window), position_x, position_y); } diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c index 47e9d4a855..e89bf81ade 100644 --- a/sflphone-client-gnome/src/statusicon.c +++ b/sflphone-client-gnome/src/statusicon.c @@ -35,6 +35,7 @@ void popup_main_window (void) if (__POPUP_WINDOW) { gtk_widget_show (get_main_window ()); + gtk_window_move (GTK_WINDOW (get_main_window ()), eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_X), eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_Y)); set_minimized (FALSE); } } @@ -61,6 +62,7 @@ void show_hide (void) if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(show_menu_item))) { gtk_widget_show(GTK_WIDGET(get_main_window())); + gtk_window_move (GTK_WINDOW (get_main_window ()), eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_X), eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_Y)); set_minimized( !MINIMIZED ); } else -- GitLab From ac481c0e313011b2ea7b6c199cca7444894e6bc8 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Thu, 11 Feb 2010 15:38:26 -0500 Subject: [PATCH 003/197] [#1641] Add default value for width/height + fixes redundant gconf key --- sflphone-client-gnome/sflphone-client-gnome.schemas | 4 ++-- sflphone-client-gnome/src/sflphone_const.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sflphone-client-gnome/sflphone-client-gnome.schemas b/sflphone-client-gnome/sflphone-client-gnome.schemas index ef876b5543..cd8fdfbd16 100644 --- a/sflphone-client-gnome/sflphone-client-gnome.schemas +++ b/sflphone-client-gnome/sflphone-client-gnome.schemas @@ -6,7 +6,7 @@ <applyto>/apps/sflphone-client-gnome/state/window_width</applyto> <owner>sflphone-client-gnome</owner> <type>int</type> - <default>800</default> + <default>240</default> <locale name="C"> <short>Main window width</short> <long>Main window width.</long> @@ -44,7 +44,7 @@ <applyto>/apps/sflphone-client-gnome/state/window_height</applyto> <owner>sflphone-client-gnome</owner> <type>int</type> - <default>550</default> + <default>320</default> <locale name="C"> <short>Main window height</short> <long>Main window height.</long> diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index 4a7bc06770..78e1833b9d 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -167,7 +167,7 @@ log4c_category_t* log4c_sfl_gtk_category; #define CONF_PREFIX "/apps/sflphone-client-gnome" #define CONF_MAIN_WINDOW_WIDTH CONF_PREFIX "/state/window_width" #define CONF_MAIN_WINDOW_HEIGHT CONF_PREFIX "/state/window_height" -#define CONF_MAIN_WINDOW_POSITION_X CONF_PREFIX "/state/window_x_position" -#define CONF_MAIN_WINDOW_POSITION_Y CONF_PREFIX "/state/window_y_position" +#define CONF_MAIN_WINDOW_POSITION_X CONF_PREFIX "/state/window_position_x" +#define CONF_MAIN_WINDOW_POSITION_Y CONF_PREFIX "/state/window_position_y" #endif -- GitLab From 936d5ea952abe69e9ad5b8899eeceb240a26e49c Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Thu, 11 Feb 2010 16:25:16 -0500 Subject: [PATCH 004/197] [#1641] Store dialpad display in gconf --- sflphone-client-gnome/sflphone-client-gnome.schemas | 13 +++++++++++++ sflphone-client-gnome/src/mainwindow.c | 2 +- sflphone-client-gnome/src/sflphone_const.h | 4 ++-- sflphone-client-gnome/src/uimanager.c | 9 +++++---- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/sflphone-client-gnome/sflphone-client-gnome.schemas b/sflphone-client-gnome/sflphone-client-gnome.schemas index cd8fdfbd16..cda7c5e3a6 100644 --- a/sflphone-client-gnome/sflphone-client-gnome.schemas +++ b/sflphone-client-gnome/sflphone-client-gnome.schemas @@ -51,6 +51,19 @@ </locale> </schema> + <schema> + <key>/schemas/apps/sflphone-client-gnome/state/dialpad</key> + <applyto>/apps/sflphone-client-gnome/state/dialpad</applyto> + <owner>sflphone-client-gnome</owner> + <type>bool</type> + <default>true</default> + <locale name="C"> + <short>Display dialpad</short> + <long>Display dialpad.</long> + </locale> + </schema> + + </schemalist> </gconfschemafile> diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c index 58f96ad600..b6a939dbc0 100644 --- a/sflphone-client-gnome/src/mainwindow.c +++ b/sflphone-client-gnome/src/mainwindow.c @@ -249,7 +249,7 @@ create_main_window () gtk_widget_show_all (mic_control); } - if(SHOW_DIALPAD){ + if (eel_gconf_get_boolean (CONF_SHOW_DIALPAD)){ dialpad = create_dialpad(); gtk_box_pack_end (GTK_BOX (subvbox), dialpad, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/); gtk_widget_show_all (dialpad); diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index 78e1833b9d..93e021f74f 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -123,8 +123,6 @@ log4c_category_t* log4c_sfl_gtk_category; #define MINIMIZED TRUE /** Behaviour of the main window on incoming calls */ #define __POPUP_WINDOW ( dbus_popup_mode() ) -/** Show/Hide the dialpad */ -#define SHOW_DIALPAD ( dbus_get_dialpad() ) /** Show/Hide the alsa configuration panel */ #define SHOW_ALSA_CONF ( dbus_get_audio_manager() == ALSA ) /** Show/Hide the volume controls */ @@ -169,5 +167,7 @@ log4c_category_t* log4c_sfl_gtk_category; #define CONF_MAIN_WINDOW_HEIGHT CONF_PREFIX "/state/window_height" #define CONF_MAIN_WINDOW_POSITION_X CONF_PREFIX "/state/window_position_x" #define CONF_MAIN_WINDOW_POSITION_Y CONF_PREFIX "/state/window_position_y" +/** Show/Hide the dialpad */ +#define CONF_SHOW_DIALPAD CONF_PREFIX "/state/dialpad" #endif diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c index 1a4632c589..9a84bb90ac 100644 --- a/sflphone-client-gnome/src/uimanager.c +++ b/sflphone-client-gnome/src/uimanager.c @@ -297,11 +297,12 @@ static void volume_bar_cb (GtkToggleAction *togglemenuitem, gpointer user_data) static void dialpad_bar_cb (GtkToggleAction *togglemenuitem, gpointer user_data) { gboolean toggled = gtk_toggle_action_get_active (togglemenuitem); - if (toggled == SHOW_DIALPAD) + gboolean conf_dialpad = eel_gconf_get_boolean (CONF_SHOW_DIALPAD); + if (toggled == conf_dialpad) return; main_window_dialpad (toggled); - if (toggled || SHOW_DIALPAD) - dbus_set_dialpad(toggled); + if (toggled || conf_dialpad) + eel_gconf_set_boolean (CONF_SHOW_DIALPAD, toggled); //dbus_set_dialpad (toggled); } static void help_contents_cb (GtkAction *action) @@ -1318,7 +1319,7 @@ void create_menus (GtkUIManager *ui_manager, GtkWidget **widget) volumeToggle = gtk_ui_manager_get_action (ui_manager, "/MenuBar/ViewMenu/VolumeControls"); // Set the toggle buttons - gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (ui_manager, "/MenuBar/ViewMenu/Dialpad")), (gboolean) SHOW_DIALPAD); + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (ui_manager, "/MenuBar/ViewMenu/Dialpad")), eel_gconf_get_boolean (CONF_SHOW_DIALPAD)); gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (volumeToggle), (gboolean) SHOW_VOLUME); gtk_action_set_sensitive (GTK_ACTION (volumeToggle), SHOW_ALSA_CONF); -- GitLab From dbfd3dad374b2bf976aad764da7dd7a8e32dcc13 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 23 Apr 2010 12:15:10 -0400 Subject: [PATCH 005/197] [#1966] Instanciate audio processing (echo canceller) in pulseaudio --- sflphone-common/src/audio/mainbuffer.cpp | 2 -- sflphone-common/src/audio/pulseaudio/audiostream.cpp | 2 +- sflphone-common/src/audio/pulseaudio/pulselayer.cpp | 11 ++++++++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 0c85dd75c5..07f6bbf627 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -20,8 +20,6 @@ #include "mainbuffer.h" -#include "audioprocessing.h" - MainBuffer::MainBuffer() : _internalSamplingRate (0) { diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 6afd2010ee..801e7f52ef 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -204,7 +204,7 @@ AudioStream::createStream (pa_context* c) } else if (_streamType == CAPTURE_STREAM) { attributes->maxlength = (uint32_t) -1; - attributes->fragsize = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->fragsize = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &_sample_spec); pa_threaded_mainloop_lock(_mainloop); pa_stream_connect_record (s, NULL, attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE)); diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 26be82dd29..904bdd71ec 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -21,6 +21,7 @@ #include "pulselayer.h" #include "managerimpl.h" + int framesPerBuffer = 2048; static void playback_callback (pa_stream* s, size_t bytes, void* userdata) @@ -79,6 +80,9 @@ PulseLayer::PulseLayer (ManagerImpl* manager) _urgentRingBuffer.createReadPointer(); dcblocker = new DcBlocker(); is_started = false; + + AudioLayer::_echoCancel = new EchoCancel(); + AudioLayer::_audioProcessing = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); openLayer(); } @@ -94,8 +98,13 @@ PulseLayer::~PulseLayer (void) } delete dcblocker; - dcblocker = NULL; + + delete AudioLayer::_echoCancel; + AudioLayer::_echoCancel = NULL; + + delete AudioLayer::_audioProcessing; + AudioLayer::_audioProcessing = NULL; } void -- GitLab From ded5ecf68d4aa8382427f06391eb7bcb7aa3a57c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 23 Apr 2010 13:17:05 -0400 Subject: [PATCH 006/197] [#1966] Add nbbytes in audioprocessing's putdata method --- sflphone-common/src/audio/algorithm.h | 2 +- sflphone-common/src/audio/audioprocessing.cpp | 4 ++-- sflphone-common/src/audio/audioprocessing.h | 2 +- sflphone-common/src/audio/echocancel.cpp | 2 +- sflphone-common/src/audio/echocancel.h | 2 +- sflphone-common/src/audio/pulseaudio/pulselayer.cpp | 6 ++++++ 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/sflphone-common/src/audio/algorithm.h b/sflphone-common/src/audio/algorithm.h index 9e25cd5c29..795f27749c 100644 --- a/sflphone-common/src/audio/algorithm.h +++ b/sflphone-common/src/audio/algorithm.h @@ -34,7 +34,7 @@ class Algorithm { /** * Put data to be processed */ - virtual void putData(SFLDataFormat *inputData) = 0; + virtual void putData(SFLDataFormat *inputData, int nbBytes) = 0; /** * Class implementing this interface must define this function diff --git a/sflphone-common/src/audio/audioprocessing.cpp b/sflphone-common/src/audio/audioprocessing.cpp index a50afe84be..a7024e51a7 100644 --- a/sflphone-common/src/audio/audioprocessing.cpp +++ b/sflphone-common/src/audio/audioprocessing.cpp @@ -27,10 +27,10 @@ AudioProcessing::AudioProcessing(Algorithm *_algo) : _algorithm(_algo){} AudioProcessing::~AudioProcessing(void){} -void AudioProcessing::putData(SFLDataFormat *inputData) +void AudioProcessing::putData(SFLDataFormat *inputData, int nbBytes) { if(_algorithm) - _algorithm->putData(inputData); + _algorithm->putData(inputData, nbBytes); } void AudioProcessing::processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData) diff --git a/sflphone-common/src/audio/audioprocessing.h b/sflphone-common/src/audio/audioprocessing.h index 8f9494c7d9..b0b133ec9c 100644 --- a/sflphone-common/src/audio/audioprocessing.h +++ b/sflphone-common/src/audio/audioprocessing.h @@ -46,7 +46,7 @@ public: /** * Put data in internal buffer */ - void putData(SFLDataFormat *inputData); + void putData(SFLDataFormat *inputData, int nbBytes); /** * Process dome audio data diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 3cd0abb342..fb0697ee4d 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -34,7 +34,7 @@ EchoCancel::~EchoCancel() _echoState = NULL; } -void EchoCancel::putData(SFLDataFormat *inputData) +void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { speex_echo_playback(_echoState, inputData); } diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index f6035912ba..98ee7f4649 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -35,7 +35,7 @@ class EchoCancel : public Algorithm { * Add speaker data into internal buffer * \param inputData containing far-end voice data to be sent to speakers */ - virtual void putData(SFLDataFormat *inputData); + virtual void putData(SFLDataFormat *inputData, int nbBytes); /** * Perform echo cancellation using internal buffers diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 904bdd71ec..4a226ba4a5 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -536,6 +536,9 @@ void PulseLayer::writeToSpeaker (void) getMainBuffer()->getData (out, byteToGet, 100); + // Copy far-end signal in echo canceller to adapt filter coefficient + AudioLayer::_audioProcessing->putData(out, byteToGet); + // test if resampling is required if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) { @@ -617,6 +620,9 @@ void PulseLayer::readFromMic (void) // remove dc offset dcblocker->filter_signal (rsmpl_out, nbSample); + + // here should be some echo processing + getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); pa_xfree (rsmpl_out); -- GitLab From 3b852274482220df9e6cba7acdc72230487aa283 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 23 Apr 2010 14:11:04 -0400 Subject: [PATCH 007/197] [#1966] Instantiate ringbuffers in echocanceller, add nbbyte in process method --- sflphone-common/src/audio/algorithm.h | 4 +-- sflphone-common/src/audio/audioprocessing.cpp | 8 +++--- sflphone-common/src/audio/audioprocessing.h | 4 +-- sflphone-common/src/audio/echocancel.cpp | 28 +++++++++++++++---- sflphone-common/src/audio/echocancel.h | 9 ++++-- .../src/audio/pulseaudio/pulselayer.cpp | 1 + sflphone-common/src/audio/ringbuffer.h | 25 +++++++++++++++-- 7 files changed, 62 insertions(+), 17 deletions(-) diff --git a/sflphone-common/src/audio/algorithm.h b/sflphone-common/src/audio/algorithm.h index 795f27749c..26ff6c9e44 100644 --- a/sflphone-common/src/audio/algorithm.h +++ b/sflphone-common/src/audio/algorithm.h @@ -40,7 +40,7 @@ class Algorithm { * Class implementing this interface must define this function * for audio processing that require synchronization between spkrdata and */ - virtual void process(SFLDataFormat *inputData, SFLDataFormat *outputData) = 0; + virtual void process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) = 0; /** * Class implementing this interface must define this function @@ -49,7 +49,7 @@ class Algorithm { * \param spkrData * \param outputData */ - virtual void process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData) = 0; + virtual void process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes) = 0; }; diff --git a/sflphone-common/src/audio/audioprocessing.cpp b/sflphone-common/src/audio/audioprocessing.cpp index a7024e51a7..3fdb9845ce 100644 --- a/sflphone-common/src/audio/audioprocessing.cpp +++ b/sflphone-common/src/audio/audioprocessing.cpp @@ -33,14 +33,14 @@ void AudioProcessing::putData(SFLDataFormat *inputData, int nbBytes) _algorithm->putData(inputData, nbBytes); } -void AudioProcessing::processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData) +void AudioProcessing::processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { if(_algorithm) - _algorithm->process(inputData, outputData); + _algorithm->process(inputData, outputData, nbBytes); } -void AudioProcessing::processAudio(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData) { +void AudioProcessing::processAudio(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes) { if(_algorithm) - _algorithm->process(micData, spkrData, outputData); + _algorithm->process(micData, spkrData, outputData, nbBytes); } diff --git a/sflphone-common/src/audio/audioprocessing.h b/sflphone-common/src/audio/audioprocessing.h index b0b133ec9c..b28ac45eb7 100644 --- a/sflphone-common/src/audio/audioprocessing.h +++ b/sflphone-common/src/audio/audioprocessing.h @@ -51,12 +51,12 @@ public: /** * Process dome audio data */ - void processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData); + void processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes); /** * Process some audio data. */ - void processAudio(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData); + void processAudio(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes); private: diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index fb0697ee4d..a3984fc42d 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -19,33 +19,51 @@ #include "echocancel.h" +#include <iostream> + #define FRAME_SIZE 160 #define FILTER_LENGTH 2000 EchoCancel::EchoCancel() { + _debug("EchoCancel: Instantiate echo canceller"); + _echoState = speex_echo_state_init(FRAME_SIZE, FILTER_LENGTH); + + _micData = new RingBuffer(5000); + _spkrData = new RingBuffer(5000); } EchoCancel::~EchoCancel() { + _debug("EchoCancel: Delete echo canceller"); + speex_echo_state_destroy(_echoState); _echoState = NULL; + + delete _micData; + _micData = NULL; + + delete _spkrData; + _spkrData = NULL; } void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { - speex_echo_playback(_echoState, inputData); + std::cout << "putData " << nbBytes << std::endl; + + // speex_echo_playback(_echoState, inputData); } -void EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData) +void EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { - speex_echo_capture(_echoState, inputData, outputData); + std::cout << "process " << nbBytes << std::endl; + // speex_echo_capture(_echoState, inputData, outputData); } -void EchoCancel::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData){ +void EchoCancel::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes){ - speex_echo_cancellation(_echoState, micData, spkrData, outputData); + // speex_echo_cancellation(_echoState, micData, spkrData, outputData); } diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 98ee7f4649..90c77ddc97 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -23,6 +23,8 @@ #include "audioprocessing.h" #include <speex/speex_echo.h> +#include "ringbuffer.h" + class EchoCancel : public Algorithm { public: @@ -42,7 +44,7 @@ class EchoCancel : public Algorithm { * \param inputData containing mixed echo and voice data * \param outputData containing */ - virtual void process(SFLDataFormat *inputData, SFLDataFormat *outputData); + virtual void process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes); /** * Perform echo cancellation, application must provide its own buffer @@ -50,10 +52,13 @@ class EchoCancel : public Algorithm { * \param spkrData containing far-end voice data to be sent to speakers * \param outputData containing the processed data */ - virtual void process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData); + virtual void process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes); private: SpeexEchoState *_echoState; + + RingBuffer *_micData; + RingBuffer *_spkrData; }; #endif diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 4a226ba4a5..3e26c39960 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -622,6 +622,7 @@ void PulseLayer::readFromMic (void) // here should be some echo processing + _audioProcessing->processAudio(rsmpl_out, rsmpl_out, nbSample*sizeof(SFLDataFormat)); getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); diff --git a/sflphone-common/src/audio/ringbuffer.h b/sflphone-common/src/audio/ringbuffer.h index 96871f825d..c7b8d7b194 100644 --- a/sflphone-common/src/audio/ringbuffer.h +++ b/sflphone-common/src/audio/ringbuffer.h @@ -41,7 +41,7 @@ class RingBuffer { * Constructor * @param size Size of the buffer to create */ - RingBuffer(int size, CallID call_id); + RingBuffer(int size, CallID call_id = default_id); /** * Destructor @@ -51,24 +51,45 @@ class RingBuffer { CallID getBufferId(){ return buffer_id; } /** - * Reset the counters to 0 + * Reset the counters to 0 for this read pointer */ void flush (CallID call_id = default_id); void flushAll(); + /** + * Get read pointer coresponding to this call + */ int getReadPointer(CallID call_id = default_id); + /** + * Get the whole readpointer list for this ringbuffer + */ ReadPointer* getReadPointerList() { return &_readpointer; } + /** + * Return the smalest readpointer. Usefull to evaluate if ringbuffer is full + */ int getSmallestReadPointer(); + /** + * Move readpointer forward by pointer_value + */ void storeReadPointer(int pointer_value, CallID call_id = default_id); + /** + * Add a new readpointer for this ringbuffer + */ void createReadPointer(CallID call_id = default_id); + /** + * Remove a readpointer for this ringbuffer + */ void removeReadPointer(CallID call_id = default_id); + /** + * Test if readpointer coresponding to this call is still active + */ bool hasThisReadPointer(CallID call_id); int getNbReadPointer(); -- GitLab From 65ef4ea0c1303cd62d66d944ce583c0d4ad1a8fd Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 23 Apr 2010 17:26:56 -0400 Subject: [PATCH 008/197] [#1966] Synchronize speaker and microphone data in echo canceller --- sflphone-common/src/audio/echocancel.cpp | 44 +++++++++++++++++-- .../src/audio/pulseaudio/pulselayer.cpp | 6 +-- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index a3984fc42d..ea480442e3 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -22,7 +22,7 @@ #include <iostream> -#define FRAME_SIZE 160 +#define FRAME_SIZE 320 #define FILTER_LENGTH 2000 EchoCancel::EchoCancel() @@ -33,6 +33,9 @@ EchoCancel::EchoCancel() _micData = new RingBuffer(5000); _spkrData = new RingBuffer(5000); + + _micData->createReadPointer(); + _spkrData->createReadPointer(); } EchoCancel::~EchoCancel() @@ -51,14 +54,49 @@ EchoCancel::~EchoCancel() void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { - std::cout << "putData " << nbBytes << std::endl; + std::cout << "putData nbBytes: " << nbBytes << std::endl; + + // Put data in speaker ring buffer + _spkrData->Put(inputData, nbBytes); // speex_echo_playback(_echoState, inputData); } void EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { - std::cout << "process " << nbBytes << std::endl; + + SFLDataFormat tmpSpkr[5000]; + SFLDataFormat tmpMic[5000]; + + std::cout << "process nbBytes: " << nbBytes << std::endl; + + // Put data in microphone ring buffer + _micData->Put(inputData, nbBytes); + + int spkrAvail = _spkrData->AvailForGet(); + int micAvail = _micData->AvailForGet(); + + std::cout << "process spkrData AvailForGet: " << spkrAvail << std::endl; + std::cout << "process micData AvailForGet: " << micAvail << std::endl; + + // Number of frame processed + int nbFrame = 0; + + // Get data from mic and speaker + while((spkrAvail > 320) && (micAvail > 320)) { + + _spkrData->Get(&tmpSpkr, FRAME_SIZE); + _micData->Get(&tmpMic, FRAME_SIZE); + + speex_echo_cancellation(_echoState, (const spx_int16_t*)(&tmpMic), (const spx_int16_t*)&tmpSpkr, outputData); + + spkrAvail = _spkrData->AvailForGet(); + micAvail = _micData->AvailForGet(); + + ++nbFrame; + + } + // speex_echo_capture(_echoState, inputData, outputData); } diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 3e26c39960..fc86526231 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -593,6 +593,8 @@ void PulseLayer::readFromMic (void) const char* data = NULL; size_t r; + SFLDataFormat echoCancelledMic[5000]; + int readableSize = pa_stream_readable_size (record->pulseStream()); @@ -614,15 +616,13 @@ void PulseLayer::readFromMic (void) int nb_sample_up = nbSample; - nbSample = _converter->downsampleData ( (SFLDataFormat*) data, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_up); // remove dc offset dcblocker->filter_signal (rsmpl_out, nbSample); - // here should be some echo processing - _audioProcessing->processAudio(rsmpl_out, rsmpl_out, nbSample*sizeof(SFLDataFormat)); + _audioProcessing->processAudio(rsmpl_out, (SFLDataFormat*)(&echoCancelledMic), nbSample*sizeof(SFLDataFormat)); getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); -- GitLab From a516e1b54889542e2351fb8679a760d89ff397c1 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 23 Apr 2010 18:10:16 -0400 Subject: [PATCH 009/197] [#1966] First echo cancellation attempt --- sflphone-common/src/audio/algorithm.h | 2 +- sflphone-common/src/audio/audioprocessing.cpp | 6 ++-- sflphone-common/src/audio/audioprocessing.h | 2 +- sflphone-common/src/audio/echocancel.cpp | 32 +++++++++++++------ sflphone-common/src/audio/echocancel.h | 7 +++- .../src/audio/pulseaudio/pulselayer.cpp | 7 ++-- sflphone-common/src/audio/ringbuffer.cpp | 12 +++---- 7 files changed, 45 insertions(+), 23 deletions(-) diff --git a/sflphone-common/src/audio/algorithm.h b/sflphone-common/src/audio/algorithm.h index 26ff6c9e44..dbabce63f0 100644 --- a/sflphone-common/src/audio/algorithm.h +++ b/sflphone-common/src/audio/algorithm.h @@ -40,7 +40,7 @@ class Algorithm { * Class implementing this interface must define this function * for audio processing that require synchronization between spkrdata and */ - virtual void process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) = 0; + virtual int process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) = 0; /** * Class implementing this interface must define this function diff --git a/sflphone-common/src/audio/audioprocessing.cpp b/sflphone-common/src/audio/audioprocessing.cpp index 3fdb9845ce..d30ede1519 100644 --- a/sflphone-common/src/audio/audioprocessing.cpp +++ b/sflphone-common/src/audio/audioprocessing.cpp @@ -33,10 +33,12 @@ void AudioProcessing::putData(SFLDataFormat *inputData, int nbBytes) _algorithm->putData(inputData, nbBytes); } -void AudioProcessing::processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) +int AudioProcessing::processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { if(_algorithm) - _algorithm->process(inputData, outputData, nbBytes); + return _algorithm->process(inputData, outputData, nbBytes); + else + return 0; } diff --git a/sflphone-common/src/audio/audioprocessing.h b/sflphone-common/src/audio/audioprocessing.h index b28ac45eb7..440dacc7a4 100644 --- a/sflphone-common/src/audio/audioprocessing.h +++ b/sflphone-common/src/audio/audioprocessing.h @@ -51,7 +51,7 @@ public: /** * Process dome audio data */ - void processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes); + int processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes); /** * Process some audio data. diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index ea480442e3..d93f2b4e59 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -22,8 +22,8 @@ #include <iostream> -#define FRAME_SIZE 320 -#define FILTER_LENGTH 2000 +#define FRAME_SIZE 160 +#define FILTER_LENGTH 500 EchoCancel::EchoCancel() { @@ -31,11 +31,20 @@ EchoCancel::EchoCancel() _echoState = speex_echo_state_init(FRAME_SIZE, FILTER_LENGTH); + int sampleRate = 8000; + + _preState = speex_preprocess_state_init(FRAME_SIZE, sampleRate); + + speex_echo_ctl(_echoState, SPEEX_ECHO_SET_SAMPLING_RATE, &sampleRate); + + _micData = new RingBuffer(5000); _spkrData = new RingBuffer(5000); _micData->createReadPointer(); _spkrData->createReadPointer(); + + _spkrStoped = true; } EchoCancel::~EchoCancel() @@ -56,13 +65,18 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { std::cout << "putData nbBytes: " << nbBytes << std::endl; + if(_spkrStoped) { + _micData->flushAll(); + _spkrData->flushAll(); + _spkrStoped = false; + } + // Put data in speaker ring buffer _spkrData->Put(inputData, nbBytes); - // speex_echo_playback(_echoState, inputData); } -void EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) +int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { SFLDataFormat tmpSpkr[5000]; @@ -83,21 +97,21 @@ void EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, in int nbFrame = 0; // Get data from mic and speaker - while((spkrAvail > 320) && (micAvail > 320)) { + while((spkrAvail > (FRAME_SIZE*2)) && (micAvail > (FRAME_SIZE*2))) { - _spkrData->Get(&tmpSpkr, FRAME_SIZE); - _micData->Get(&tmpMic, FRAME_SIZE); + _spkrData->Get(&tmpSpkr, (FRAME_SIZE*2)); + _micData->Get(&tmpMic, (FRAME_SIZE*2)); speex_echo_cancellation(_echoState, (const spx_int16_t*)(&tmpMic), (const spx_int16_t*)&tmpSpkr, outputData); + speex_preprocess_run(_preState, (spx_int16_t*)(outputData)); spkrAvail = _spkrData->AvailForGet(); micAvail = _micData->AvailForGet(); ++nbFrame; - } - // speex_echo_capture(_echoState, inputData, outputData); + return nbFrame*(FRAME_SIZE); } void EchoCancel::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes){ diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 90c77ddc97..1bc098a93f 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -22,6 +22,7 @@ #include "audioprocessing.h" #include <speex/speex_echo.h> +#include "speex/speex_preprocess.h" #include "ringbuffer.h" @@ -44,7 +45,7 @@ class EchoCancel : public Algorithm { * \param inputData containing mixed echo and voice data * \param outputData containing */ - virtual void process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes); + virtual int process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes); /** * Perform echo cancellation, application must provide its own buffer @@ -57,8 +58,12 @@ class EchoCancel : public Algorithm { SpeexEchoState *_echoState; + SpeexPreprocessState *_preState; + RingBuffer *_micData; RingBuffer *_spkrData; + + bool _spkrStoped; }; #endif diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index fc86526231..9896cea32c 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -621,10 +621,11 @@ void PulseLayer::readFromMic (void) // remove dc offset dcblocker->filter_signal (rsmpl_out, nbSample); - // here should be some echo processing - _audioProcessing->processAudio(rsmpl_out, (SFLDataFormat*)(&echoCancelledMic), nbSample*sizeof(SFLDataFormat)); + // echo cancellation processing + int sampleready = _audioProcessing->processAudio(rsmpl_out, (SFLDataFormat*)(&echoCancelledMic), nbSample*sizeof(SFLDataFormat)); - getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); + // getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); + getMainBuffer()->putData ( (void*) rsmpl_out, sampleready*sizeof (SFLDataFormat), 100); pa_xfree (rsmpl_out); diff --git a/sflphone-common/src/audio/ringbuffer.cpp b/sflphone-common/src/audio/ringbuffer.cpp index 905377a4f1..69c1f5e722 100644 --- a/sflphone-common/src/audio/ringbuffer.cpp +++ b/sflphone-common/src/audio/ringbuffer.cpp @@ -97,6 +97,8 @@ RingBuffer::getLen (CallID call_id) int mStart = getReadPointer (call_id); int length = (mEnd + mBufferSize - mStart) % mBufferSize; + + // _debug(" *RingBuffer::getLen: buffer_id %s, call_id %s, mStart %i, mEnd %i, length %i, buffersie %i", buffer_id.c_str(), call_id.c_str(), mStart, mEnd, length, mBufferSize); return length; @@ -209,7 +211,7 @@ RingBuffer::AvailForPut() { // Always keep 4 bytes safe (?) - return (mBufferSize-4) - putLen(); + return mBufferSize - putLen(); } // This one puts some data inside the ring buffer. @@ -225,8 +227,8 @@ RingBuffer::Put (void* buffer, int toCopy, unsigned short volume) int len = putLen(); - if (toCopy > (mBufferSize-4) - len) - toCopy = (mBufferSize-4) - len; + if (toCopy > mBufferSize - len) + toCopy = mBufferSize - len; src = (samplePtr) buffer; @@ -239,7 +241,6 @@ RingBuffer::Put (void* buffer, int toCopy, unsigned short volume) block = toCopy; // Wrap block around ring ? - if (block > (mBufferSize - pos)) { // Fill in to the end of the buffer block = mBufferSize - pos; @@ -283,7 +284,7 @@ RingBuffer::AvailForGet (CallID call_id) { // Used space - return getLen (call_id); + return getLen(call_id); } // Get will move 'toCopy' bytes from the internal FIFO to 'buffer' @@ -303,7 +304,6 @@ RingBuffer::Get (void *buffer, int toCopy, unsigned short volume, CallID call_id int copied; - int len = getLen (call_id); -- GitLab From 62900ad9f213c677654cc97553c035f72f2a8879 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 26 Apr 2010 15:30:39 -0400 Subject: [PATCH 010/197] [#1966] Fix audio stream sync issue in echo canceller --- sflphone-common/src/audio/echocancel.cpp | 53 ++++++++++--------- sflphone-common/src/audio/echocancel.h | 4 ++ .../src/audio/pulseaudio/pulselayer.cpp | 5 +- 3 files changed, 36 insertions(+), 26 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index d93f2b4e59..72fd1ba679 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -20,23 +20,20 @@ #include "echocancel.h" #include <iostream> +#include <stdlib.h> - +// number of samples (20 ms) #define FRAME_SIZE 160 -#define FILTER_LENGTH 500 +// number of sample to process, (800 à 4000 samples, 100 to 500 ms +#define FILTER_LENGTH 4000 + EchoCancel::EchoCancel() { _debug("EchoCancel: Instantiate echo canceller"); _echoState = speex_echo_state_init(FRAME_SIZE, FILTER_LENGTH); - - int sampleRate = 8000; - - _preState = speex_preprocess_state_init(FRAME_SIZE, sampleRate); - - speex_echo_ctl(_echoState, SPEEX_ECHO_SET_SAMPLING_RATE, &sampleRate); - + // _preState = speex_preprocess_state_init(NN, 8000); _micData = new RingBuffer(5000); _spkrData = new RingBuffer(5000); @@ -63,7 +60,7 @@ EchoCancel::~EchoCancel() void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { - std::cout << "putData nbBytes: " << nbBytes << std::endl; + // std::cout << "putData nbBytes: " << nbBytes << std::endl; if(_spkrStoped) { _micData->flushAll(); @@ -79,39 +76,47 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { - SFLDataFormat tmpSpkr[5000]; - SFLDataFormat tmpMic[5000]; + if(_spkrStoped) { + return 0; + } + + int byteSize = FRAME_SIZE*2; - std::cout << "process nbBytes: " << nbBytes << std::endl; + // init temporary buffers + memset(_tmpSpkr, 0, 5000); + memset(_tmpMic, 0, 5000); + memset(_tmpOut, 0, 5000); - // Put data in microphone ring buffer + // Put mic data in ringbuffer _micData->Put(inputData, nbBytes); + // Store data for synchronization int spkrAvail = _spkrData->AvailForGet(); int micAvail = _micData->AvailForGet(); - std::cout << "process spkrData AvailForGet: " << spkrAvail << std::endl; - std::cout << "process micData AvailForGet: " << micAvail << std::endl; - - // Number of frame processed + // Init number of frame processed int nbFrame = 0; // Get data from mic and speaker - while((spkrAvail > (FRAME_SIZE*2)) && (micAvail > (FRAME_SIZE*2))) { + while((spkrAvail > byteSize) && (micAvail > byteSize)) { - _spkrData->Get(&tmpSpkr, (FRAME_SIZE*2)); - _micData->Get(&tmpMic, (FRAME_SIZE*2)); + // get synchronized data + _spkrData->Get(_tmpSpkr, byteSize); + _micData->Get(_tmpMic, byteSize); - speex_echo_cancellation(_echoState, (const spx_int16_t*)(&tmpMic), (const spx_int16_t*)&tmpSpkr, outputData); - speex_preprocess_run(_preState, (spx_int16_t*)(outputData)); + // Processed echo cancellation + speex_echo_cancellation(_echoState, _tmpMic, _tmpSpkr, _tmpOut); + + bcopy(_tmpOut, outputData+(nbFrame*FRAME_SIZE), FRAME_SIZE*2); spkrAvail = _spkrData->AvailForGet(); micAvail = _micData->AvailForGet(); + // increment nb of frame processed ++nbFrame; } - return nbFrame*(FRAME_SIZE); + return nbFrame * FRAME_SIZE; } void EchoCancel::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes){ diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 1bc098a93f..144599070f 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -64,6 +64,10 @@ class EchoCancel : public Algorithm { RingBuffer *_spkrData; bool _spkrStoped; + + SFLDataFormat _tmpSpkr[5000]; + SFLDataFormat _tmpMic[5000]; + SFLDataFormat _tmpOut[5000]; }; #endif diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 9896cea32c..6933b5af12 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -594,6 +594,7 @@ void PulseLayer::readFromMic (void) size_t r; SFLDataFormat echoCancelledMic[5000]; + memset(echoCancelledMic, 0, 5000); int readableSize = pa_stream_readable_size (record->pulseStream()); @@ -622,10 +623,10 @@ void PulseLayer::readFromMic (void) dcblocker->filter_signal (rsmpl_out, nbSample); // echo cancellation processing - int sampleready = _audioProcessing->processAudio(rsmpl_out, (SFLDataFormat*)(&echoCancelledMic), nbSample*sizeof(SFLDataFormat)); + int sampleready = _audioProcessing->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); // getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); - getMainBuffer()->putData ( (void*) rsmpl_out, sampleready*sizeof (SFLDataFormat), 100); + getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); pa_xfree (rsmpl_out); -- GitLab From c2cfbf687880603151a015d99764e8c8c67756ba Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 26 Apr 2010 18:03:46 -0400 Subject: [PATCH 011/197] [#1966] Add speex preprocessing for echo cancelation Use 2000 samle (250) as filter length for echo canceller (probably need some fine tuning) --- sflphone-common/src/audio/echocancel.cpp | 38 ++++++++++++++++++++---- sflphone-common/src/audio/echocancel.h | 3 ++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 72fd1ba679..bd15bbf460 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -19,21 +19,28 @@ #include "echocancel.h" -#include <iostream> -#include <stdlib.h> +#include <fstream> // number of samples (20 ms) #define FRAME_SIZE 160 -// number of sample to process, (800 à 4000 samples, 100 to 500 ms -#define FILTER_LENGTH 4000 +// number of sample to process, (800 à 4000 samples, 100 to 500 ms) +#define FILTER_LENGTH 2000 EchoCancel::EchoCancel() { _debug("EchoCancel: Instantiate echo canceller"); + int samplingRate = 8000; + _echoState = speex_echo_state_init(FRAME_SIZE, FILTER_LENGTH); - // _preState = speex_preprocess_state_init(NN, 8000); + _preState = speex_preprocess_state_init(FRAME_SIZE, samplingRate); + + speex_echo_ctl(_echoState, SPEEX_ECHO_SET_SAMPLING_RATE, &samplingRate); + speex_preprocess_ctl(_preState, SPEEX_PREPROCESS_SET_ECHO_STATE, _echoState); + + micFile = new ofstream("micData", ofstream::binary); + echoFile = new ofstream("echoData", ofstream::binary); _micData = new RingBuffer(5000); _spkrData = new RingBuffer(5000); @@ -51,11 +58,20 @@ EchoCancel::~EchoCancel() speex_echo_state_destroy(_echoState); _echoState = NULL; + speex_preprocess_state_destroy(_preState); + _preState = NULL; + delete _micData; _micData = NULL; delete _spkrData; _spkrData = NULL; + + micFile->close(); + echoFile->close(); + + delete micFile; + delete echoFile; } void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) @@ -70,6 +86,9 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) // Put data in speaker ring buffer _spkrData->Put(inputData, nbBytes); + + // In case we use libspeex internal buffer + // (require capture and playback stream to be synchronized) // speex_echo_playback(_echoState, inputData); } @@ -107,7 +126,13 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int // Processed echo cancellation speex_echo_cancellation(_echoState, _tmpMic, _tmpSpkr, _tmpOut); - bcopy(_tmpOut, outputData+(nbFrame*FRAME_SIZE), FRAME_SIZE*2); + speex_preprocess_run(_preState, _tmpOut); + + bcopy(_tmpOut, outputData+(nbFrame*FRAME_SIZE), byteSize); + + micFile->write ((const char *)_tmpMic, byteSize); + echoFile->write ((const char *)_tmpOut, byteSize); + spkrAvail = _spkrData->AvailForGet(); micAvail = _micData->AvailForGet(); @@ -121,6 +146,7 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int void EchoCancel::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes){ + // speex_echo_cancellation(_echoState, micData, spkrData, outputData); } diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 144599070f..f8fd3089d8 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -68,6 +68,9 @@ class EchoCancel : public Algorithm { SFLDataFormat _tmpSpkr[5000]; SFLDataFormat _tmpMic[5000]; SFLDataFormat _tmpOut[5000]; + + ofstream *micFile; + ofstream *echoFile; }; #endif -- GitLab From e04a178c9df6635e128e59544fe5e58d264feb08 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 26 Apr 2010 18:09:05 -0400 Subject: [PATCH 012/197] [#1966] Instantiate echocanceller in ALSA layer --- sflphone-common/src/audio/alsa/alsalayer.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index caa4d7f46c..eb772f53dd 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -48,6 +48,9 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) _urgentRingBuffer.createReadPointer(); dcblocker = new DcBlocker(); + + AudioLayer::_echoCancel = new EchoCancel(); + AudioLayer::_audioProcessing = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); } // Destructor @@ -65,6 +68,12 @@ AlsaLayer::~AlsaLayer (void) delete dcblocker; dcblocker = NULL; } + + delete AudioLayer::_echoCancel; + AudioLayer::_echoCancel = NULL; + + delete AudioLayer::_audioProcessing; + AudioLayer::_audioProcessing = NULL; } bool -- GitLab From 6b46224dd33b3c83783e5a283f929c0c162707fe Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 26 Apr 2010 18:27:26 -0400 Subject: [PATCH 013/197] [#3323] Code cleanup --- sflphone-common/src/audio/alsa/alsalayer.cpp | 110 +++++++++--------- .../src/audio/pulseaudio/pulselayer.cpp | 6 +- 2 files changed, 57 insertions(+), 59 deletions(-) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index eb772f53dd..6cc27c7412 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -41,7 +41,7 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) , _audioThread (NULL) { - _debug (" Constructor of AlsaLayer called"); + _debug ("Audio: Build ALSA layer"); /* Instanciate the audio thread */ // _audioThread = new AudioThread (this); // _audioThread = NULL; @@ -56,7 +56,7 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) // Destructor AlsaLayer::~AlsaLayer (void) { - _debug ("Destructor of AlsaLayer called"); + _debug ("Audio: Destroy of ALSA layer"); closeLayer(); if (_converter) { @@ -79,17 +79,17 @@ AlsaLayer::~AlsaLayer (void) bool AlsaLayer::closeLayer() { - _debugAlsa ("Close ALSA streams"); + _debugAlsa ("Audio: Close ALSA streams"); try { /* Stop the audio thread first */ if (_audioThread) { - _debug ("Stop Audio Thread"); + _debug ("Audio: Stop Audio Thread"); delete _audioThread; _audioThread=NULL; } } catch (...) { - _debugException ("! ARTP Exception: when stopping audiortp"); + _debugException ("Audio: Exception: when stopping audiortp"); throw; } @@ -128,13 +128,13 @@ AlsaLayer::openDevice (int indexIn, int indexOut, int sampleRate, int frameSize, _audioPlugin = std::string (plugin); - _debugAlsa (" Setting AlsaLayer: device in=%2d, out=%2d", _indexIn, _indexOut); + _debugAlsa ("Audio: AlsaLayer: device in=%2d, out=%2d", _indexIn, _indexOut); - _debugAlsa (" : alsa plugin=%s", _audioPlugin.c_str()); + _debugAlsa (" : alsa plugin=%s", _audioPlugin.c_str()); - _debugAlsa (" : nb channel in=%2d, out=%2d", _inChannel, _outChannel); + _debugAlsa (" : nb channel in=%2d, out=%2d", _inChannel, _outChannel); - _debugAlsa (" : sample rate=%5d, format=%s", _audioSampleRate, SFLDataFormatString); + _debugAlsa (" : sample rate=%5d, format=%s", _audioSampleRate, SFLDataFormatString); _audioThread = NULL; @@ -154,7 +154,7 @@ AlsaLayer::openDevice (int indexIn, int indexOut, int sampleRate, int frameSize, void AlsaLayer::startStream (void) { - _debug ("AlsaLayer:: startStream"); + _debug ("Audio: Start stream"); std::string pcmp = buildDeviceTopo (_audioPlugin, _indexOut, 0); std::string pcmc = buildDeviceTopo (_audioPlugin, _indexIn, 0); @@ -181,7 +181,7 @@ AlsaLayer::startStream (void) if (_audioThread == NULL) { try { - _debug ("Start Audio Thread"); + _debug ("Audio: Start Audio Thread"); _audioThread = new AudioThread (this); _audioThread->start(); } catch (...) { @@ -194,17 +194,17 @@ AlsaLayer::startStream (void) void AlsaLayer::stopStream (void) { - _debug ("AlsaLayer:: stopStream"); + _debug ("Audio: Stop stream"); try { /* Stop the audio thread first */ if (_audioThread) { - _debug ("Stop Audio Thread"); + _debug ("Audio: Stop audio thread"); delete _audioThread; _audioThread=NULL; } } catch (...) { - _debugException ("! ARTP Exception: when stopping audiortp"); + _debugException ("Audio: Exception: when stopping audiortp"); throw; } @@ -238,10 +238,10 @@ void AlsaLayer::stopCaptureStream (void) int err; if (_CaptureHandle) { - _debug ("AlsaLayer:: stop Alsa capture"); + _debug ("Audio: Stop ALSA capture"); if ( (err = snd_pcm_drop (_CaptureHandle)) < 0) - _debug ("AlsaLayer:: Error stopping ALSA capture: %s", snd_strerror (err)); + _debug ("Audio: Error: stopping ALSA capture: %s", snd_strerror (err)); else stop_capture (); @@ -256,10 +256,10 @@ void AlsaLayer::closeCaptureStream (void) stopCaptureStream (); if (is_capture_open()) { - _debug ("AlsaLayer:: close ALSA capture"); + _debug ("Audio: Close ALSA capture"); if ( (err = snd_pcm_close (_CaptureHandle)) < 0) - _debug ("Error closing ALSA capture: %s", snd_strerror (err)); + _debug ("Audio: Error: Closing ALSA capture: %s", snd_strerror (err)); else close_capture (); } @@ -270,7 +270,7 @@ void AlsaLayer::startCaptureStream (void) int err; if (_CaptureHandle && !is_capture_running()) { - _debug ("AlsaLayer:: start ALSA capture"); + _debug ("Audio: Start ALSA capture"); if ( (err = snd_pcm_start (_CaptureHandle)) < 0) _debug ("Error starting ALSA capture: %s", snd_strerror (err)); @@ -284,10 +284,10 @@ void AlsaLayer::prepareCaptureStream (void) int err; if (is_capture_open() && !is_capture_prepared()) { - _debug ("AlsaLayer:: prepare ALSA capture"); + _debug ("Audio: Prepare ALSA capture"); if ( (err = snd_pcm_prepare (_CaptureHandle)) < 0) - _debug ("Error preparing ALSA capture: %s", snd_strerror (err)); + _debug ("Audio: Error: preparing ALSA capture: %s", snd_strerror (err)); else prepare_capture (); } @@ -298,10 +298,10 @@ void AlsaLayer::stopPlaybackStream (void) int err; if (_PlaybackHandle && is_playback_running()) { - _debug ("AlsaLayer:: stop ALSA playback"); + _debug ("Audio: Stop ALSA playback"); if ( (err = snd_pcm_drop (_PlaybackHandle)) < 0) - _debug ("Error stopping ALSA playback: %s", snd_strerror (err)); + _debug ("Audio: Error: Stopping ALSA playback: %s", snd_strerror (err)); else stop_playback (); } @@ -316,10 +316,10 @@ void AlsaLayer::closePlaybackStream (void) stopPlaybackStream (); if (is_playback_open()) { - _debug ("AlsaLayer:: close ALSA playback"); + _debug ("Audio: Close ALSA playback"); if ( (err = snd_pcm_close (_PlaybackHandle)) < 0) - _debug ("Error closing ALSA playback: %s", snd_strerror (err)); + _debug ("Audio: Error: Closing ALSA playback: %s", snd_strerror (err)); else close_playback (); } @@ -330,10 +330,10 @@ void AlsaLayer::startPlaybackStream (void) int err; if (_PlaybackHandle && !is_playback_running()) { - _debug ("AlsaLayer:: start ALSA playback"); + _debug ("Audio: Start ALSA playback"); if ( (err = snd_pcm_start (_PlaybackHandle)) < 0) - _debug ("Error starting ALSA playback: %s", snd_strerror (err)); + _debug ("Audio: Error: Starting ALSA playback: %s", snd_strerror (err)); else start_playback(); } @@ -344,10 +344,10 @@ void AlsaLayer::preparePlaybackStream (void) int err; if (is_playback_open() && !is_playback_prepared()) { - _debug ("AlsaLayer:: prepare playback stream"); + _debug ("Audio: Prepare playback stream"); if ( (err = snd_pcm_prepare (_PlaybackHandle)) < 0) - _debug ("Error preparing the device: %s", snd_strerror (err)); + _debug ("Audio: Preparing the device: %s", snd_strerror (err)); else prepare_playback (); } @@ -402,12 +402,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) /* Full configuration space */ if ( (err = snd_pcm_hw_params_any (pcm_handle, hwparams)) < 0) { - _debugAlsa (" Cannot initialize hardware parameter structure (%s)", snd_strerror (err)); + _debugAlsa ("Audio: Error: Cannot initialize hardware parameter structure (%s)", snd_strerror (err)); return false; } if ( (err = snd_pcm_hw_params_set_access (pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) { - _debugAlsa (" Cannot set access type (%s)", snd_strerror (err)); + _debugAlsa ("Audio: Error: Cannot set access type (%s)", snd_strerror (err)); return false; } @@ -415,7 +415,7 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) format = SND_PCM_FORMAT_S16_LE; if ( (err = snd_pcm_hw_params_set_format (pcm_handle, hwparams, (snd_pcm_format_t) format)) < 0) { - _debugAlsa (" Cannot set sample format (%s)", snd_strerror (err)); + _debugAlsa ("Audio: Error: Cannot set sample format (%s)", snd_strerror (err)); return false; } @@ -427,17 +427,17 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) exact_ivalue = rate; if ( (err = snd_pcm_hw_params_set_rate_near (pcm_handle, hwparams, &exact_ivalue, &dir) < 0)) { - _debugAlsa (" Cannot set sample rate (%s)", snd_strerror (err)); + _debugAlsa ("Audio: Error: Cannot set sample rate (%s)", snd_strerror (err)); return false; } if (dir!= 0) { - _debugAlsa (" (%i) The choosen rate %d Hz is not supported by your hardware.Using %d Hz instead. ",type ,rate, exact_ivalue); + _debugAlsa ("Audio: Error: (%i) The choosen rate %d Hz is not supported by your hardware.Using %d Hz instead. ",type ,rate, exact_ivalue); } /* Set the number of channels */ if ( (err = snd_pcm_hw_params_set_channels (pcm_handle, hwparams, 1)) < 0) { - _debugAlsa (" Cannot set channel count (%s)", snd_strerror (err)); + _debugAlsa ("Audio: Error: Cannot set channel count (%s)", snd_strerror (err)); return false; } @@ -447,12 +447,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) dir=0; if ( (err = snd_pcm_hw_params_set_period_size_near (pcm_handle, hwparams, &exact_lvalue , &dir)) < 0) { - _debugAlsa (" Cannot set period time (%s)", snd_strerror (err)); + _debugAlsa ("Audio: Error: Cannot set period time (%s)", snd_strerror (err)); return false; } if (dir!=0) { - _debugAlsa ("(%i) The choosen period size %d bytes is not supported by your hardware.Using %d instead. ", type, (int) periodsize, (int) exact_lvalue); + _debugAlsa ("Audio: Warning: (%i) The choosen period size %d bytes is not supported by your hardware.Using %d instead. ", type, (int) periodsize, (int) exact_lvalue); } periodsize = exact_lvalue; @@ -463,12 +463,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) dir=0; if ( (err = snd_pcm_hw_params_set_periods_near (pcm_handle, hwparams, &exact_ivalue, &dir)) < 0) { - _debugAlsa (" Cannot set periods number (%s)", snd_strerror (err)); + _debugAlsa ("Audio: Error: Cannot set periods number (%s)", snd_strerror (err)); return false; } if (dir!=0) { - _debugAlsa (" The choosen period number %i bytes is not supported by your hardware.Using %i instead. ", periods, exact_ivalue); + _debugAlsa ("Audio: Warning: The choosen period number %i bytes is not supported by your hardware.Using %i instead. ", periods, exact_ivalue); } periods=exact_ivalue; @@ -476,7 +476,7 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) /* Set the hw parameters */ if ( (err = snd_pcm_hw_params (pcm_handle, hwparams)) < 0) { - _debugAlsa (" Cannot set hw parameters (%s)", snd_strerror (err)); + _debugAlsa ("Audio: Error: Cannot set hw parameters (%s)", snd_strerror (err)); return false; } @@ -489,12 +489,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) /* Set the start threshold */ if ( (err = snd_pcm_sw_params_set_start_threshold (pcm_handle, swparams, 2700 /*periodsize*2*/)) < 0) { - _debugAlsa (" Cannot set start threshold (%s)", snd_strerror (err)); + _debugAlsa ("Audio: Error: Cannot set start threshold (%s)", snd_strerror (err)); return false; } if ( (err = snd_pcm_sw_params (pcm_handle, swparams)) < 0) { - _debugAlsa (" Cannot set sw parameters (%s)", snd_strerror (err)); + _debugAlsa ("Audio: Error: Cannot set sw parameters (%s)", snd_strerror (err)); return false; } @@ -513,11 +513,11 @@ AlsaLayer::open_device (std::string pcm_p, std::string pcm_c, int flag) if (flag == SFL_PCM_BOTH || flag == SFL_PCM_PLAYBACK) { - _debug ("AlsaLayer:: open playback device"); + _debug ("Audio: Open playback device"); // if((err = snd_pcm_open(&_PlaybackHandle, pcm_p.c_str(), SND_PCM_STREAM_PLAYBACK, 0 )) < 0){ if ( (err = snd_pcm_open (&_PlaybackHandle, pcm_p.c_str(), SND_PCM_STREAM_PLAYBACK, 0)) < 0) { - _debugAlsa ("Error while opening playback device %s", pcm_p.c_str()); + _debugAlsa ("Audio: Error: Opening playback device %s", pcm_p.c_str()); setErrorMessage (ALSA_PLAYBACK_DEVICE); close_playback (); return false; @@ -535,17 +535,17 @@ AlsaLayer::open_device (std::string pcm_p, std::string pcm_c, int flag) if (flag == SFL_PCM_BOTH || flag == SFL_PCM_CAPTURE) { - _debug ("AlsaLayer:: open capture device"); + _debug ("Audio: Open capture device"); if ( (err = snd_pcm_open (&_CaptureHandle, pcm_c.c_str(), SND_PCM_STREAM_CAPTURE, 0)) < 0) { - _debugAlsa ("Error while opening capture device %s", pcm_c.c_str()); + _debugAlsa ("Audio: Error: Opening capture device %s", pcm_c.c_str()); setErrorMessage (ALSA_CAPTURE_DEVICE); close_capture (); return false; } if (!alsa_set_params (_CaptureHandle, 0, 8000)) { - _debug ("capture failed"); + _debug ("Audio: Capture failed"); snd_pcm_close (_CaptureHandle); close_capture (); return false; @@ -593,14 +593,14 @@ AlsaLayer::write (void* buffer, int length) handle_xrun_playback(); if (snd_pcm_writei (_PlaybackHandle , buffer , frames) <0) - _debugAlsa ("XRUN handling failed"); + _debugAlsa ("Audio: XRUN handling failed"); _trigger_request = true; break; default: - _debugAlsa ("Write error unknown - dropping frames **********************************: %s", snd_strerror (err)); + _debugAlsa ("Audio: Write error unknown - dropping frames: %s", snd_strerror (err)); stopPlaybackStream (); @@ -633,14 +633,14 @@ AlsaLayer::read (void* buffer, int toCopy) case -ESTRPIPE: case -EIO: - _debugAlsa (" XRUN capture ignored (%s)", snd_strerror (samples)); + _debugAlsa ("Audio: XRUN capture ignored (%s)", snd_strerror (samples)); handle_xrun_capture(); //samples = snd_pcm_readi( _CaptureHandle, buffer, frames); //if (samples<0) samples=0; break; case EPERM: - _debugAlsa (" Capture EPERM (%s)", snd_strerror (samples)); + _debugAlsa ("Audio: Capture EPERM (%s)", snd_strerror (samples)); prepareCaptureStream (); startCaptureStream (); break; @@ -660,7 +660,6 @@ AlsaLayer::read (void* buffer, int toCopy) void AlsaLayer::handle_xrun_capture (void) { - _debugAlsa ("handle_xrun_capture"); snd_pcm_status_t* status; snd_pcm_status_alloca (&status); @@ -680,13 +679,12 @@ AlsaLayer::handle_xrun_capture (void) void AlsaLayer::handle_xrun_playback (void) { - _debugAlsa ("AlsaLayer:: handle_xrun_playback"); - + int state; snd_pcm_status_t* status; snd_pcm_status_alloca (&status); - if ( (state = snd_pcm_status (_PlaybackHandle, status)) < 0) _debugAlsa (" Error: Cannot get playback handle status (%s)" , snd_strerror (state)); + if ( (state = snd_pcm_status (_PlaybackHandle, status)) < 0) _debugAlsa ("Audio: Error: Cannot get playback handle status (%s)" , snd_strerror (state)); else { state = snd_pcm_status_get_state (status); @@ -1020,7 +1018,7 @@ void AlsaLayer::audioCallback (void) in=0; } else if (micAvailBytes < 0) { - _debug ("AlsaLayer::audioCallback (mic): error: %s", snd_strerror (micAvailBytes)); + _debug ("Audio: Mic error: %s", snd_strerror (micAvailBytes)); } } diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 6933b5af12..9663cfd4ce 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -112,7 +112,7 @@ PulseLayer::openLayer (void) { if (!is_started) { - _info("Audio: Open layer"); + _info("Audio: Open Pulseaudio layer"); if (!m) { @@ -152,7 +152,7 @@ PulseLayer::openLayer (void) bool PulseLayer::closeLayer (void) { - _info("Audio: Destroy pulselayer"); + _info("Audio: Close Pulseaudio layer"); disconnectAudioStream(); @@ -178,7 +178,7 @@ PulseLayer::closeLayer (void) void PulseLayer::connectPulseAudioServer (void) { - _info("Audio: connect to pulseaudio server"); + _info("Audio: Connect to Pulseaudio server"); setenv ("PULSE_PROP_media.role", "phone", 1); -- GitLab From ea1cb8f29a0f3927d2b8f0517312e279198cffc3 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 26 Apr 2010 18:44:19 -0400 Subject: [PATCH 014/197] [#1966] Perform echocancellation in ALSA --- sflphone-common/src/audio/alsa/alsalayer.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index 6cc27c7412..3d7e4aab73 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -917,6 +917,9 @@ void AlsaLayer::audioCallback (void) getMainBuffer()->getData (out, toGet, spkrVolume); + // Copy far-end signal in echo canceller to adapt filter coefficient + AudioLayer::_audioProcessing->putData(out, toGet); + if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) { @@ -964,12 +967,12 @@ void AlsaLayer::audioCallback (void) // Additionally handle the mic's audio stream int micAvailBytes; - int micAvailPut; - int toPut; SFLDataFormat* in; + SFLDataFormat echoCancelledMic[5000]; + memset(echoCancelledMic, 0, 5000); // snd_pcm_sframes_t micAvailAlsa; @@ -1003,7 +1006,11 @@ void AlsaLayer::audioCallback (void) dcblocker->filter_signal (rsmpl_out, nbSample); - getMainBuffer()->putData (rsmpl_out, nbSample * sizeof (SFLDataFormat), 100); + // echo cancellation processing + int sampleready = _audioProcessing->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); + + // getMainBuffer()->putData (rsmpl_out, nbSample * sizeof (SFLDataFormat), 100); + getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); free (rsmpl_out); rsmpl_out = 0; -- GitLab From 6affbe432129c039c0dde1ca2272528d724fa291 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 29 Apr 2010 14:52:46 -0400 Subject: [PATCH 015/197] [#3341] Make DcBlocker filter compatible with abstract class Algorithm to be used as an AudioProcessing --- sflphone-common/src/audio/algorithm.h | 6 +++ sflphone-common/src/audio/alsa/alsalayer.cpp | 19 +++------- sflphone-common/src/audio/alsa/alsalayer.h | 4 -- sflphone-common/src/audio/audiolayer.h | 6 ++- sflphone-common/src/audio/audioprocessing.cpp | 6 +++ sflphone-common/src/audio/audioprocessing.h | 7 +++- sflphone-common/src/audio/dcblocker.cpp | 38 ++++++++----------- sflphone-common/src/audio/dcblocker.h | 30 +++++++++++++-- sflphone-common/src/audio/echocancel.cpp | 2 + sflphone-common/src/audio/echocancel.h | 6 +++ .../src/audio/pulseaudio/pulselayer.cpp | 27 ++++++++----- .../src/audio/pulseaudio/pulselayer.h | 2 - 12 files changed, 95 insertions(+), 58 deletions(-) diff --git a/sflphone-common/src/audio/algorithm.h b/sflphone-common/src/audio/algorithm.h index dbabce63f0..b55712e4d6 100644 --- a/sflphone-common/src/audio/algorithm.h +++ b/sflphone-common/src/audio/algorithm.h @@ -36,6 +36,12 @@ class Algorithm { */ virtual void putData(SFLDataFormat *inputData, int nbBytes) = 0; + /** + * Class implementing this interface must define this function + * for audio processing that require synchronization between spkrdata and + */ + virtual void process(SFLDataFormat *inputData, int nbBytes) = 0; + /** * Class implementing this interface must define this function * for audio processing that require synchronization between spkrdata and diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index 3d7e4aab73..ff63ae7bf2 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -47,10 +47,8 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) // _audioThread = NULL; _urgentRingBuffer.createReadPointer(); - dcblocker = new DcBlocker(); - AudioLayer::_echoCancel = new EchoCancel(); - AudioLayer::_audioProcessing = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); + AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); } // Destructor @@ -64,16 +62,11 @@ AlsaLayer::~AlsaLayer (void) _converter = NULL; } - if (dcblocker) { - delete dcblocker; - dcblocker = NULL; - } - delete AudioLayer::_echoCancel; AudioLayer::_echoCancel = NULL; - delete AudioLayer::_audioProcessing; - AudioLayer::_audioProcessing = NULL; + delete AudioLayer::_echoCanceller; + AudioLayer::_echoCanceller = NULL; } bool @@ -918,7 +911,7 @@ void AlsaLayer::audioCallback (void) getMainBuffer()->getData (out, toGet, spkrVolume); // Copy far-end signal in echo canceller to adapt filter coefficient - AudioLayer::_audioProcessing->putData(out, toGet); + AudioLayer::_echoCanceller->putData(out, toGet); if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) { @@ -1004,10 +997,10 @@ void AlsaLayer::audioCallback (void) // _debug("nb_sample_up %i", nb_sample_up); nbSample = _converter->downsampleData ( (SFLDataFormat*) in, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_up); - dcblocker->filter_signal (rsmpl_out, nbSample); + _audiofilter->processAudio (rsmpl_out, nbSample*sizeof(SFLDataFormat)); // echo cancellation processing - int sampleready = _audioProcessing->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); + int sampleready = _echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); // getMainBuffer()->putData (rsmpl_out, nbSample * sizeof (SFLDataFormat), 100); getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); diff --git a/sflphone-common/src/audio/alsa/alsalayer.h b/sflphone-common/src/audio/alsa/alsalayer.h index 1f5167ede2..49efefeb02 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.h +++ b/sflphone-common/src/audio/alsa/alsalayer.h @@ -22,7 +22,6 @@ #include "audio/audiolayer.h" #include "audio/samplerateconverter.h" -#include "audio/dcblocker.h" #include "eventthread.h" #include <alsa/asoundlib.h> @@ -270,9 +269,6 @@ class AlsaLayer : public AudioLayer { /** Sample rate converter object */ SamplerateConverter* _converter; - // Allpass filter to remove DC offset - DcBlocker* dcblocker; - }; #endif // _ALSA_LAYER_H_ diff --git a/sflphone-common/src/audio/audiolayer.h b/sflphone-common/src/audio/audiolayer.h index a1e846ea37..735df93139 100644 --- a/sflphone-common/src/audio/audiolayer.h +++ b/sflphone-common/src/audio/audiolayer.h @@ -29,8 +29,8 @@ #include <cc++/thread.h> // for ost::Mutex +#include "dcblocker.h" #include "echocancel.h" -#include "algorithm.h" #define FRAME_PER_BUFFER 160 @@ -300,8 +300,10 @@ class AudioLayer { ost::Mutex _mutex; EchoCancel *_echoCancel; + AudioProcessing *_echoCanceller; - AudioProcessing *_audioProcessing; + DcBlocker *_dcblocker; + AudioProcessing *_audiofilter; }; diff --git a/sflphone-common/src/audio/audioprocessing.cpp b/sflphone-common/src/audio/audioprocessing.cpp index d30ede1519..17b5010566 100644 --- a/sflphone-common/src/audio/audioprocessing.cpp +++ b/sflphone-common/src/audio/audioprocessing.cpp @@ -33,6 +33,12 @@ void AudioProcessing::putData(SFLDataFormat *inputData, int nbBytes) _algorithm->putData(inputData, nbBytes); } +void AudioProcessing::processAudio(SFLDataFormat *inputData, int nbBytes) +{ + if(_algorithm) + _algorithm->process(inputData, nbBytes); +} + int AudioProcessing::processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { if(_algorithm) diff --git a/sflphone-common/src/audio/audioprocessing.h b/sflphone-common/src/audio/audioprocessing.h index 440dacc7a4..e6b28985e7 100644 --- a/sflphone-common/src/audio/audioprocessing.h +++ b/sflphone-common/src/audio/audioprocessing.h @@ -49,7 +49,12 @@ public: void putData(SFLDataFormat *inputData, int nbBytes); /** - * Process dome audio data + * Process some audio data + */ + void processAudio(SFLDataFormat *inputData, int nbBytes); + + /** + * Process some audio data */ int processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes); diff --git a/sflphone-common/src/audio/dcblocker.cpp b/sflphone-common/src/audio/dcblocker.cpp index a2122fe424..dc8af84262 100644 --- a/sflphone-common/src/audio/dcblocker.cpp +++ b/sflphone-common/src/audio/dcblocker.cpp @@ -17,40 +17,32 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - - #include "dcblocker.h" -DcBlocker::DcBlocker() -{ - - y = 0; - x = 0; - xm1 = 0; - ym1 = 0; - -} - -DcBlocker::~DcBlocker() -{ +DcBlocker::DcBlocker() : _y(0), _x(0), _xm1(0), _ym1(0) {} +DcBlocker::~DcBlocker() {} -} +void DcBlocker::putData(SFLDataFormat *inputData, int nbBytes) {} -void DcBlocker::filter_signal (SFLDataFormat* audio_data, int length) +void DcBlocker::process (SFLDataFormat *data, int nbBytes) { // y(n) = x(n) - x(n-1) + R y(n-1) , R = 0.9999 - for (int i = 0; i < length; i++) { + int nbSamples = nbBytes / sizeof(SFLDataFormat); + for (int i = 0; i < nbSamples; i++) { - x = audio_data[i]; + _x = data[i]; - y = (SFLDataFormat) ( (float) x - (float) xm1 + 0.9999 * (float) ym1); - xm1 = x; - ym1 = y; + _y = (SFLDataFormat) ( (float) _x - (float) _xm1 + 0.9999 * (float) _ym1); + _xm1 = _x; + _ym1 = _y; - audio_data[i] = y; + data[i] = _y; } - } + +int DcBlocker::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { return 0;} + +void DcBlocker::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes) {} diff --git a/sflphone-common/src/audio/dcblocker.h b/sflphone-common/src/audio/dcblocker.h index 0fab731678..17090a04d8 100644 --- a/sflphone-common/src/audio/dcblocker.h +++ b/sflphone-common/src/audio/dcblocker.h @@ -20,9 +20,10 @@ #ifndef DCBLOCKER_H #define DCBLOCKER_H +#include "algorithm.h" #include "global.h" -class DcBlocker { +class DcBlocker : public Algorithm { public: @@ -30,11 +31,34 @@ public: ~DcBlocker(); - void filter_signal(SFLDataFormat* audio_data, int length); + /** + * Unused + */ + virtual void putData(SFLDataFormat *inputData, int nbBytes); + + /** + * Perform dc blocking given the input data + */ + virtual void process(SFLDataFormat *data, int nbBytes); + + /** + * Perform echo cancellation using internal buffers + * \param inputData containing mixed echo and voice data + * \param outputData containing + */ + virtual int process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes); + + /** + * Perform echo cancellation, application must provide its own buffer + * \param micData containing mixed echo and voice data + * \param spkrData containing far-end voice data to be sent to speakers + * \param outputData containing the processed data + */ + virtual void process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes); private: - SFLDataFormat y, x, xm1, ym1; + SFLDataFormat _y, _x, _xm1, _ym1; }; #endif diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index bd15bbf460..80f400bce6 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -92,6 +92,8 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) // speex_echo_playback(_echoState, inputData); } +void EchoCancel::process(SFLDataFormat *data, int nbBytes) {} + int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index f8fd3089d8..7493cf19ea 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -40,6 +40,11 @@ class EchoCancel : public Algorithm { */ virtual void putData(SFLDataFormat *inputData, int nbBytes); + /** + * Unused + */ + virtual void process(SFLDataFormat *data, int nbBytes); + /** * Perform echo cancellation using internal buffers * \param inputData containing mixed echo and voice data @@ -54,6 +59,7 @@ class EchoCancel : public Algorithm { * \param outputData containing the processed data */ virtual void process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes); + private: SpeexEchoState *_echoState; diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 9663cfd4ce..d896e74ab7 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -78,11 +78,15 @@ PulseLayer::PulseLayer (ManagerImpl* manager) , record() { _urgentRingBuffer.createReadPointer(); - dcblocker = new DcBlocker(); + is_started = false; + // Instantiate the algorithm AudioLayer::_echoCancel = new EchoCancel(); - AudioLayer::_audioProcessing = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); + AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); + + AudioLayer::_dcblocker = new DcBlocker(); + AudioLayer::_audiofilter = new AudioProcessing(static_cast<Algorithm *>(_dcblocker)); openLayer(); } @@ -97,14 +101,17 @@ PulseLayer::~PulseLayer (void) _converter = NULL; } - delete dcblocker; - dcblocker = NULL; - delete AudioLayer::_echoCancel; AudioLayer::_echoCancel = NULL; - delete AudioLayer::_audioProcessing; - AudioLayer::_audioProcessing = NULL; + delete AudioLayer::_echoCanceller; + AudioLayer::_echoCanceller = NULL; + + delete AudioLayer::_dcblocker; + AudioLayer::_dcblocker = NULL; + + delete AudioLayer::_audiofilter; + AudioLayer::_audiofilter = NULL; } void @@ -537,7 +544,7 @@ void PulseLayer::writeToSpeaker (void) getMainBuffer()->getData (out, byteToGet, 100); // Copy far-end signal in echo canceller to adapt filter coefficient - AudioLayer::_audioProcessing->putData(out, byteToGet); + AudioLayer::_echoCanceller->putData(out, byteToGet); // test if resampling is required if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) { @@ -620,10 +627,10 @@ void PulseLayer::readFromMic (void) nbSample = _converter->downsampleData ( (SFLDataFormat*) data, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_up); // remove dc offset - dcblocker->filter_signal (rsmpl_out, nbSample); + _audiofilter->processAudio(rsmpl_out, nbSample*sizeof(SFLDataFormat)); // echo cancellation processing - int sampleready = _audioProcessing->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); + int sampleready = _echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); // getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.h b/sflphone-common/src/audio/pulseaudio/pulselayer.h index a8248b56be..25b7b618ce 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.h +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.h @@ -208,8 +208,6 @@ class PulseLayer : public AudioLayer { int spkrVolume; int micVolume; - DcBlocker* dcblocker; - // private: public: -- GitLab From 79813093fa5132f9470223276bd97d040d0b4692 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 29 Apr 2010 17:56:11 -0400 Subject: [PATCH 016/197] [#3341] Implement FIR filter --- sflphone-common/src/audio/dcblocker.cpp | 25 +++++++++++++ sflphone-common/src/audio/dcblocker.h | 48 +++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/sflphone-common/src/audio/dcblocker.cpp b/sflphone-common/src/audio/dcblocker.cpp index dc8af84262..6cac799c2c 100644 --- a/sflphone-common/src/audio/dcblocker.cpp +++ b/sflphone-common/src/audio/dcblocker.cpp @@ -19,6 +19,31 @@ #include "dcblocker.h" +FirFilter::FirFilter(std::vector<double> ir) : _impulseResponse(ir), + _length(ir.size()), + _count(0) +{} + +FirFilter::~FirFilter() {} + +int FirFilter::getOutputSample(int inputSample) +{ + _delayLine[_count] = (double)inputSample; + double result = 0.0; + int index = _count; + for(int i = 0; i < _length; i++) { + result = result + _impulseResponse[i] * _delayLine[index--]; + if(index < 0) + index = _length-1; + } + _count++; + if(_count >= _length) + _count = 0; + + return (int)result; +} + + DcBlocker::DcBlocker() : _y(0), _x(0), _xm1(0), _ym1(0) {} DcBlocker::~DcBlocker() {} diff --git a/sflphone-common/src/audio/dcblocker.h b/sflphone-common/src/audio/dcblocker.h index 17090a04d8..fb304a1788 100644 --- a/sflphone-common/src/audio/dcblocker.h +++ b/sflphone-common/src/audio/dcblocker.h @@ -23,6 +23,54 @@ #include "algorithm.h" #include "global.h" +#include <vector> + +#define MAXFILTERSIZE 100 + +class FirFilter { + + public: + + /** + * Constructor for this class + */ + FirFilter(std::vector<double> ir); + + /** + * SDestructor for this class + */ + ~FirFilter(); + + + private: + + /** + * Length of the filter + */ + int _length; + + /** + * Coefficient of the filter + */ + std::vector<double> _impulseResponse; + + /** + * Circular buffer + */ + double _delayLine[MAXFILTERSIZE]; + + /** + * Counter + */ + int _count; + + /** + * Perform filtering on one sample + */ + int getOutputSample(int inputSample); + +}; + class DcBlocker : public Algorithm { public: -- GitLab From 2528be31a8c181554191975116ca28d868632a44 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 30 Apr 2010 15:54:37 -0400 Subject: [PATCH 017/197] [#1966] Rename EchoCancel as SpeexEchoCancel --- sflphone-common/src/audio/Makefile.am | 4 +-- sflphone-common/src/audio/alsa/alsalayer.cpp | 2 +- sflphone-common/src/audio/audiolayer.h | 4 +-- .../src/audio/pulseaudio/pulselayer.cpp | 20 ++++++++++++- .../src/audio/pulseaudio/pulselayer.h | 6 ++++ .../{echocancel.cpp => speexechocancel.cpp} | 29 +++++++++++-------- .../audio/{echocancel.h => speexechocancel.h} | 7 +++-- 7 files changed, 51 insertions(+), 21 deletions(-) rename sflphone-common/src/audio/{echocancel.cpp => speexechocancel.cpp} (83%) rename sflphone-common/src/audio/{echocancel.h => speexechocancel.h} (95%) diff --git a/sflphone-common/src/audio/Makefile.am b/sflphone-common/src/audio/Makefile.am index d6ad9388a8..f4ec844f3c 100644 --- a/sflphone-common/src/audio/Makefile.am +++ b/sflphone-common/src/audio/Makefile.am @@ -12,7 +12,7 @@ libaudio_la_SOURCES = \ audiolayer.cpp \ audiodevice.cpp \ samplerateconverter.cpp \ - echocancel.cpp \ + speexechocancel.cpp \ audioprocessing.cpp \ dcblocker.cpp \ $(SPEEX_SOURCES_CPP) @@ -26,7 +26,7 @@ noinst_HEADERS = \ mainbuffer.h \ recordable.h \ algorithm.h \ - echocancel.h \ + speexechocancel.h \ audioprocessing.h \ dcblocker.h \ samplerateconverter.h diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index ff63ae7bf2..fcf78867be 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -47,7 +47,7 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) // _audioThread = NULL; _urgentRingBuffer.createReadPointer(); - AudioLayer::_echoCancel = new EchoCancel(); + AudioLayer::_echoCancel = new SpeexEchoCancel(); AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); } diff --git a/sflphone-common/src/audio/audiolayer.h b/sflphone-common/src/audio/audiolayer.h index 735df93139..1dba0c8740 100644 --- a/sflphone-common/src/audio/audiolayer.h +++ b/sflphone-common/src/audio/audiolayer.h @@ -30,7 +30,7 @@ #include <cc++/thread.h> // for ost::Mutex #include "dcblocker.h" -#include "echocancel.h" +#include "speexechocancel.h" #define FRAME_PER_BUFFER 160 @@ -299,7 +299,7 @@ class AudioLayer { */ ost::Mutex _mutex; - EchoCancel *_echoCancel; + SpeexEchoCancel *_echoCancel; AudioProcessing *_echoCanceller; DcBlocker *_dcblocker; diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index d896e74ab7..72031588ea 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -82,11 +82,15 @@ PulseLayer::PulseLayer (ManagerImpl* manager) is_started = false; // Instantiate the algorithm - AudioLayer::_echoCancel = new EchoCancel(); + AudioLayer::_echoCancel = new SpeexEchoCancel(); AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); AudioLayer::_dcblocker = new DcBlocker(); AudioLayer::_audiofilter = new AudioProcessing(static_cast<Algorithm *>(_dcblocker)); + + captureFile = new ofstream("captureFile", ofstream::binary); + captureRsmplFile = new ofstream("captureRsmplFile", ofstream::binary); + captureFilterFile = new ofstream("captureFilterFile", ofstream::binary); openLayer(); } @@ -112,6 +116,14 @@ PulseLayer::~PulseLayer (void) delete AudioLayer::_audiofilter; AudioLayer::_audiofilter = NULL; + + captureFile->close(); + captureRsmplFile->close(); + captureFilterFile->close(); + + delete captureFile; + delete captureRsmplFile; + delete captureFilterFile; } void @@ -624,11 +636,17 @@ void PulseLayer::readFromMic (void) int nb_sample_up = nbSample; + captureFile->write ((const char *)data, nbSample*sizeof(SFLDataFormat)); + nbSample = _converter->downsampleData ( (SFLDataFormat*) data, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_up); + captureRsmplFile->write ((const char *)rsmpl_out, nbSample*sizeof(SFLDataFormat)); + // remove dc offset _audiofilter->processAudio(rsmpl_out, nbSample*sizeof(SFLDataFormat)); + captureFilterFile->write ((const char *)rsmpl_out, nbSample*sizeof(SFLDataFormat)); + // echo cancellation processing int sampleready = _echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.h b/sflphone-common/src/audio/pulseaudio/pulselayer.h index 25b7b618ce..d7d598b841 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.h +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.h @@ -31,6 +31,8 @@ #include <stdlib.h> +#include <fstream> + #define PLAYBACK_STREAM_NAME "SFLphone out" #define CAPTURE_STREAM_NAME "SFLphone in" @@ -208,6 +210,10 @@ class PulseLayer : public AudioLayer { int spkrVolume; int micVolume; + ofstream *captureFile; + ofstream *captureRsmplFile; + ofstream *captureFilterFile; + // private: public: diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/speexechocancel.cpp similarity index 83% rename from sflphone-common/src/audio/echocancel.cpp rename to sflphone-common/src/audio/speexechocancel.cpp index 80f400bce6..fc4c492109 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/speexechocancel.cpp @@ -17,17 +17,17 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "echocancel.h" +#include "speexechocancel.h" #include <fstream> // number of samples (20 ms) #define FRAME_SIZE 160 // number of sample to process, (800 à 4000 samples, 100 to 500 ms) -#define FILTER_LENGTH 2000 +#define FILTER_LENGTH 800 -EchoCancel::EchoCancel() +SpeexEchoCancel::SpeexEchoCancel() { _debug("EchoCancel: Instantiate echo canceller"); @@ -41,9 +41,10 @@ EchoCancel::EchoCancel() micFile = new ofstream("micData", ofstream::binary); echoFile = new ofstream("echoData", ofstream::binary); + spkrFile = new ofstream("spkrData", ofstream::binary); - _micData = new RingBuffer(5000); - _spkrData = new RingBuffer(5000); + _micData = new RingBuffer(10000); + _spkrData = new RingBuffer(10000); _micData->createReadPointer(); _spkrData->createReadPointer(); @@ -51,7 +52,7 @@ EchoCancel::EchoCancel() _spkrStoped = true; } -EchoCancel::~EchoCancel() +SpeexEchoCancel::~SpeexEchoCancel() { _debug("EchoCancel: Delete echo canceller"); @@ -68,13 +69,15 @@ EchoCancel::~EchoCancel() _spkrData = NULL; micFile->close(); + spkrFile->close(); echoFile->close(); delete micFile; + delete spkrFile; delete echoFile; } -void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) +void SpeexEchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { // std::cout << "putData nbBytes: " << nbBytes << std::endl; @@ -92,9 +95,9 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) // speex_echo_playback(_echoState, inputData); } -void EchoCancel::process(SFLDataFormat *data, int nbBytes) {} +void SpeexEchoCancel::process(SFLDataFormat *data, int nbBytes) {} -int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) +int SpeexEchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { if(_spkrStoped) { @@ -124,7 +127,10 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int // get synchronized data _spkrData->Get(_tmpSpkr, byteSize); _micData->Get(_tmpMic, byteSize); - + + micFile->write ((const char *)_tmpMic, byteSize); + spkrFile->write ((const char *)_tmpSpkr, byteSize); + // Processed echo cancellation speex_echo_cancellation(_echoState, _tmpMic, _tmpSpkr, _tmpOut); @@ -132,7 +138,6 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int bcopy(_tmpOut, outputData+(nbFrame*FRAME_SIZE), byteSize); - micFile->write ((const char *)_tmpMic, byteSize); echoFile->write ((const char *)_tmpOut, byteSize); @@ -146,7 +151,7 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int return nbFrame * FRAME_SIZE; } -void EchoCancel::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes){ +void SpeexEchoCancel::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes){ // speex_echo_cancellation(_echoState, micData, spkrData, outputData); diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/speexechocancel.h similarity index 95% rename from sflphone-common/src/audio/echocancel.h rename to sflphone-common/src/audio/speexechocancel.h index 7493cf19ea..ce291da919 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/speexechocancel.h @@ -26,13 +26,13 @@ #include "ringbuffer.h" -class EchoCancel : public Algorithm { +class SpeexEchoCancel : public Algorithm { public: - EchoCancel(); + SpeexEchoCancel(); - ~EchoCancel(); + ~SpeexEchoCancel(); /** * Add speaker data into internal buffer @@ -76,6 +76,7 @@ class EchoCancel : public Algorithm { SFLDataFormat _tmpOut[5000]; ofstream *micFile; + ofstream *spkrFile; ofstream *echoFile; }; -- GitLab From 59f7bdf56e79d5b900fc732b9bffac2a8df98c14 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 30 Apr 2010 16:33:38 -0400 Subject: [PATCH 018/197] [#1966] Fix ALSA DC blocking --- sflphone-common/src/audio/alsa/alsalayer.cpp | 5 ++++- sflphone-common/src/audio/audioprocessing.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index fcf78867be..34513bf78c 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -49,6 +49,9 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) AudioLayer::_echoCancel = new SpeexEchoCancel(); AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); + + AudioLayer::_dcblocker = new DcBlocker(); + AudioLayer::_audiofilter = new AudioProcessing(static_cast<Algorithm *>(_dcblocker)); } // Destructor @@ -1000,7 +1003,7 @@ void AlsaLayer::audioCallback (void) _audiofilter->processAudio (rsmpl_out, nbSample*sizeof(SFLDataFormat)); // echo cancellation processing - int sampleready = _echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); + int sampleready = AudioLayer::_echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); // getMainBuffer()->putData (rsmpl_out, nbSample * sizeof (SFLDataFormat), 100); getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); diff --git a/sflphone-common/src/audio/audioprocessing.cpp b/sflphone-common/src/audio/audioprocessing.cpp index 17b5010566..6fbc7d8446 100644 --- a/sflphone-common/src/audio/audioprocessing.cpp +++ b/sflphone-common/src/audio/audioprocessing.cpp @@ -22,7 +22,7 @@ -AudioProcessing::AudioProcessing(Algorithm *_algo) : _algorithm(_algo){} +AudioProcessing::AudioProcessing(Algorithm *_algo) : _algorithm(_algo) {} AudioProcessing::~AudioProcessing(void){} -- GitLab From 34d921b8ebc03cd9bba05d4a75347fda1cc6ac01 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 6 May 2010 09:15:23 -0400 Subject: [PATCH 019/197] [#1966] Added our own echo cancellation implementation --- sflphone-common/src/audio/Makefile.am | 2 + sflphone-common/src/audio/alsa/alsalayer.cpp | 2 +- sflphone-common/src/audio/audiolayer.h | 3 +- sflphone-common/src/audio/echocancel.cpp | 267 ++++++++++++++++++ sflphone-common/src/audio/echocancel.h | 144 ++++++++++ .../src/audio/pulseaudio/pulselayer.cpp | 2 +- sflphone-common/src/audio/speexechocancel.cpp | 4 +- sflphone-common/src/audio/speexechocancel.h | 4 +- 8 files changed, 422 insertions(+), 6 deletions(-) create mode 100644 sflphone-common/src/audio/echocancel.cpp create mode 100644 sflphone-common/src/audio/echocancel.h diff --git a/sflphone-common/src/audio/Makefile.am b/sflphone-common/src/audio/Makefile.am index f4ec844f3c..cb0a65e3e4 100644 --- a/sflphone-common/src/audio/Makefile.am +++ b/sflphone-common/src/audio/Makefile.am @@ -12,6 +12,7 @@ libaudio_la_SOURCES = \ audiolayer.cpp \ audiodevice.cpp \ samplerateconverter.cpp \ + echocancel.cpp \ speexechocancel.cpp \ audioprocessing.cpp \ dcblocker.cpp \ @@ -26,6 +27,7 @@ noinst_HEADERS = \ mainbuffer.h \ recordable.h \ algorithm.h \ + echocancel.h speexechocancel.h \ audioprocessing.h \ dcblocker.h \ diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index 34513bf78c..157cc57387 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -47,7 +47,7 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) // _audioThread = NULL; _urgentRingBuffer.createReadPointer(); - AudioLayer::_echoCancel = new SpeexEchoCancel(); + AudioLayer::_echoCancel = new EchoCancel(); AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); AudioLayer::_dcblocker = new DcBlocker(); diff --git a/sflphone-common/src/audio/audiolayer.h b/sflphone-common/src/audio/audiolayer.h index 1dba0c8740..c7c6db5bef 100644 --- a/sflphone-common/src/audio/audiolayer.h +++ b/sflphone-common/src/audio/audiolayer.h @@ -31,6 +31,7 @@ #include "dcblocker.h" #include "speexechocancel.h" +#include "echocancel.h" #define FRAME_PER_BUFFER 160 @@ -299,7 +300,7 @@ class AudioLayer { */ ost::Mutex _mutex; - SpeexEchoCancel *_echoCancel; + EchoCancel *_echoCancel; AudioProcessing *_echoCanceller; DcBlocker *_dcblocker; diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp new file mode 100644 index 0000000000..383f0873d6 --- /dev/null +++ b/sflphone-common/src/audio/echocancel.cpp @@ -0,0 +1,267 @@ +/* + * Copyright (C) 2008 2009 Savoir-Faire Linux inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "echocancel.h" + +#include <fstream> + +// number of samples (20 ms) +#define FRAME_SIZE 160 +// number of sample to process, (800 à 4000 samples, 100 to 500 ms) +#define FILTER_LENGTH 800 + + +EchoCancel::EchoCancel() : _samplingRate(8000), + _smplPerFrame(160), + _smplPerSeg(0), + _historyLength(0), + _spkrLevel(0), + _micLevel(0), + _spkrHistCnt(0), + _micHistCnt(0), + _amplFactor(0.0), + _amplify(0.0), + _factorCnt(0) +{ + _debug("EchoCancel: Instantiate echo canceller"); + + micFile = new ofstream("micData", ofstream::binary); + echoFile = new ofstream("echoData", ofstream::binary); + spkrFile = new ofstream("spkrData", ofstream::binary); + + _micData = new RingBuffer(10000); + _spkrData = new RingBuffer(10000); + + _micData->createReadPointer(); + _spkrData->createReadPointer(); + + _spkrStoped = true; + + _smplPerSeg = (_samplingRate * SEGMENT_LENGTH) / MS_PER_SEC; + _historyLength = ECHO_LENGTH / SEGMENT_LENGTH; + + memset(_avgSpkrLevelHist, 0, 5000*sizeof(int)); + memset(_avgMicLevelHist, 0, 5000*sizeof(int)); + memset(_factorFilter, 0, 10*sizeof(float)); + +} + +EchoCancel::~EchoCancel() +{ + _debug("EchoCancel: Delete echo canceller"); + + delete _micData; + _micData = NULL; + + delete _spkrData; + _spkrData = NULL; + + micFile->close(); + spkrFile->close(); + echoFile->close(); + + delete micFile; + delete spkrFile; + delete echoFile; +} + +void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) +{ + // std::cout << "putData nbBytes: " << nbBytes << std::endl; + + if(_spkrStoped) { + _micData->flushAll(); + _spkrData->flushAll(); + _spkrStoped = false; + } + + // Put data in speaker ring buffer + _spkrData->Put(inputData, nbBytes); + + // In case we use libspeex internal buffer + // (require capture and playback stream to be synchronized) + // speex_echo_playback(_echoState, inputData); +} + +void EchoCancel::process(SFLDataFormat *data, int nbBytes) {} + +int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) +{ + + if(_spkrStoped) { + return 0; + } + + int byteSize = FRAME_SIZE*2; + + // init temporary buffers + memset(_tmpSpkr, 0, 5000); + memset(_tmpMic, 0, 5000); + memset(_tmpOut, 0, 5000); + + // Put mic data in ringbuffer + _micData->Put(inputData, nbBytes); + + // Store data for synchronization + int spkrAvail = _spkrData->AvailForGet(); + int micAvail = _micData->AvailForGet(); + + // Init number of frame processed + int nbFrame = 0; + + // Get data from mic and speaker + while((spkrAvail > byteSize) && (micAvail > byteSize)) { + + // get synchronized data + _spkrData->Get(_tmpSpkr, byteSize); + _micData->Get(_tmpMic, byteSize); + + micFile->write ((const char *)_tmpMic, byteSize); + spkrFile->write ((const char *)_tmpSpkr, byteSize); + + // Processed echo cancellation + performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); + + // speex_preprocess_run(_preState, _tmpOut); + + bcopy(_tmpOut, outputData+(nbFrame*FRAME_SIZE), byteSize); + + echoFile->write ((const char *)_tmpOut, byteSize); + + spkrAvail = _spkrData->AvailForGet(); + micAvail = _micData->AvailForGet(); + + // increment nb of frame processed + ++nbFrame; + } + + return nbFrame * FRAME_SIZE; +} + +void EchoCancel::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes){ + +} + + +void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData) { + + for(int k = 0; k < 2; k++) { + + updateEchoCancel(micData+(k*_smplPerSeg), spkrData+(k*_smplPerSeg)); + + _spkrLevel = getMaxAmplitude(_avgSpkrLevelHist); + _micLevel = getMaxAmplitude(_avgMicLevelHist); + + if(_micLevel > MIN_MIC_LEVEL) { + if(_spkrLevel < MIN_SPKR_LEVEL) { + // near-end is talking, far-end silent + _amplFactor = 1.0; + } + else { + // near-end is talking, far-end too + _amplFactor = 0.8; + } + } + else { + if(_spkrLevel < MIN_SPKR_LEVEL) { + // nobody's talking + _amplFactor = 0.0; + } + else { + // far-end is talking, REDUCE ECHO + _amplFactor = 1.0; + } + } + + _factorFilter[_factorCnt++] = _amplFactor; + if(_factorCnt >= 10) { + _factorCnt = 0; + } + + + _amplify = 0.0; + for(int m = 0; m < 10; m++) { + _amplify = _factorFilter[m]; + } + _amplify = _amplify / 10.0; + + std::cout << "Amplitude: " << _amplify << ", spkrLevel: " << _spkrLevel << ", micLevel: " << _micLevel << std::endl; + + amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg)); + + } + +} + + +void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData) { + + int micLvl = computeAmplitudeLevel(micData); + int spkrLvl = computeAmplitudeLevel(spkrData); + + // Add 1 to make sure we are not dividing by 0 + _avgMicLevelHist[_micHistCnt++] = micLvl+1; + _avgSpkrLevelHist[_spkrHistCnt++] = spkrLvl+1; + + if(_micHistCnt >= _historyLength) + _micHistCnt = 0; + + if(_spkrHistCnt >= _historyLength) + _spkrHistCnt = 0; + +} + + +int EchoCancel::computeAmplitudeLevel(SFLDataFormat *data) { + + int level = 0; + + for(int i = 0; i < _smplPerSeg; i++) { + if(data[i] >= 0.0) + level += (int)data[i]; + else + level -= (int)data[i]; + } + + level = level / _smplPerFrame; + + return level; +} + + +int EchoCancel::getMaxAmplitude(int *data) { + + SFLDataFormat level = 0.0; + + for(int i = 0; i < _historyLength; i++) { + if(data[i] >= level) + level = data[i]; + } + + return (int)level; +} + + +void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData) { + + for(int i = 0; i < _smplPerSeg; i++) { + outputData[i] = (SFLDataFormat)(((float)micData[i])*_amplify); + // std::cout << "input: " << micData[i] << ", output: " << outputData[i] << std::endl; + } +} diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h new file mode 100644 index 0000000000..1428c8b958 --- /dev/null +++ b/sflphone-common/src/audio/echocancel.h @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2008 2009 Savoir-Faire Linux inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef ECHOCANCEL_H +#define ECHOCANCEL_H + +#include "audioprocessing.h" + +#include "ringbuffer.h" + +// length of audio segment in ms +#define SEGMENT_LENGTH 10 + +// number of ms in sec +#define MS_PER_SEC 1000 + +// Length of the echo tail in ms +#define ECHO_LENGTH 150 + +// Voice Threashold +#define MIN_MIC_LEVEL 1000 +#define MIN_SPKR_LEVEL 1000 + +// Smoothing factor +#define FACTOR_LENGTH = 5 + +class EchoCancel : public Algorithm { + + public: + + EchoCancel(); + + ~EchoCancel(); + + /** + * Add speaker data into internal buffer + * \param inputData containing far-end voice data to be sent to speakers + */ + virtual void putData(SFLDataFormat *inputData, int nbBytes); + + /** + * Unused + */ + virtual void process(SFLDataFormat *data, int nbBytes); + + /** + * Perform echo cancellation using internal buffers + * \param inputData containing mixed echo and voice data + * \param outputData containing + */ + virtual int process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes); + + /** + * Perform echo cancellation, application must provide its own buffer + * \param micData containing mixed echo and voice data + * \param spkrData containing far-end voice data to be sent to speakers + * \param outputData containing the processed data + */ + virtual void process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes); + + private: + + /** + * Actual method calld to supress echo from mic, micData and spkrData must be synchronized + */ + void performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData); + + /** + * Update speaker level array for both micData and spkrData + */ + void updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData); + + int computeAmplitudeLevel(SFLDataFormat *data); + + + int getMaxAmplitude(int *data); + + void amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData); + + /** + * Internal buffer for mic data synchronization + */ + RingBuffer *_micData; + + /** + * Internal buffer for speaker data synchronization + */ + RingBuffer *_spkrData; + + /** + * Boolean value + */ + bool _spkrStoped; + + /** + * Temp buffer + */ + SFLDataFormat _tmpSpkr[5000]; + SFLDataFormat _tmpMic[5000]; + SFLDataFormat _tmpOut[5000]; + + + int _samplingRate; + int _smplPerFrame; + int _smplPerSeg; + int _historyLength; + + int _spkrLevel; + int _micLevel; + + int _spkrHistCnt; + int _micHistCnt; + + int _avgSpkrLevelHist[5000]; + int _avgMicLevelHist[5000]; + + float _amplFactor; + float _amplify; + float _factorFilter[10]; + int _factorCnt; + + ofstream *micFile; + ofstream *spkrFile; + ofstream *echoFile; + +}; + +#endif diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 72031588ea..c1cdd4ab26 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -82,7 +82,7 @@ PulseLayer::PulseLayer (ManagerImpl* manager) is_started = false; // Instantiate the algorithm - AudioLayer::_echoCancel = new SpeexEchoCancel(); + AudioLayer::_echoCancel = new EchoCancel(); AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); AudioLayer::_dcblocker = new DcBlocker(); diff --git a/sflphone-common/src/audio/speexechocancel.cpp b/sflphone-common/src/audio/speexechocancel.cpp index fc4c492109..c3929c8e69 100644 --- a/sflphone-common/src/audio/speexechocancel.cpp +++ b/sflphone-common/src/audio/speexechocancel.cpp @@ -128,13 +128,15 @@ int SpeexEchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData _spkrData->Get(_tmpSpkr, byteSize); _micData->Get(_tmpMic, byteSize); + speex_preprocess_run(_preState, _tmpMic); + micFile->write ((const char *)_tmpMic, byteSize); spkrFile->write ((const char *)_tmpSpkr, byteSize); // Processed echo cancellation speex_echo_cancellation(_echoState, _tmpMic, _tmpSpkr, _tmpOut); - speex_preprocess_run(_preState, _tmpOut); + // speex_preprocess_run(_preState, _tmpOut); bcopy(_tmpOut, outputData+(nbFrame*FRAME_SIZE), byteSize); diff --git a/sflphone-common/src/audio/speexechocancel.h b/sflphone-common/src/audio/speexechocancel.h index ce291da919..b38cba036b 100644 --- a/sflphone-common/src/audio/speexechocancel.h +++ b/sflphone-common/src/audio/speexechocancel.h @@ -17,8 +17,8 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef ECHOCANCEL_H -#define ECHOCANCEL_H +#ifndef SPEEXECHOCANCEL_H +#define SPEEXECHOCANCEL_H #include "audioprocessing.h" #include <speex/speex_echo.h> -- GitLab From ef989b6090d0aa47456ee16fa1b0a1e500b9c8dc Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 6 May 2010 16:15:55 -0400 Subject: [PATCH 020/197] [#1966] Change min amplitude levels for echo canceller --- sflphone-common/src/audio/echocancel.cpp | 18 ++++++++---------- sflphone-common/src/audio/echocancel.h | 6 +++--- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 383f0873d6..9bdfb78d15 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -168,23 +168,21 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa _spkrLevel = getMaxAmplitude(_avgSpkrLevelHist); _micLevel = getMaxAmplitude(_avgMicLevelHist); - if(_micLevel > MIN_MIC_LEVEL) { - if(_spkrLevel < MIN_SPKR_LEVEL) { - // near-end is talking, far-end silent - _amplFactor = 1.0; + if(_spkrLevel > MIN_SPKR_LEVEL) { + if(_micLevel < MIN_MIC_LEVEL) { + // far-end is talking, near-end silent reduce echo + _amplFactor = 0.0; } else { // near-end is talking, far-end too - _amplFactor = 0.8; + _amplFactor = 0.5; } } else { - if(_spkrLevel < MIN_SPKR_LEVEL) { - // nobody's talking - _amplFactor = 0.0; + if(_micLevel < MIN_MIC_LEVEL) { + _amplFactor = 1.0; } else { - // far-end is talking, REDUCE ECHO _amplFactor = 1.0; } } @@ -197,7 +195,7 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa _amplify = 0.0; for(int m = 0; m < 10; m++) { - _amplify = _factorFilter[m]; + _amplify += _factorFilter[m]; } _amplify = _amplify / 10.0; diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 1428c8b958..61b0561cab 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -31,11 +31,11 @@ #define MS_PER_SEC 1000 // Length of the echo tail in ms -#define ECHO_LENGTH 150 +#define ECHO_LENGTH 100 // Voice Threashold -#define MIN_MIC_LEVEL 1000 -#define MIN_SPKR_LEVEL 1000 +#define MIN_MIC_LEVEL 300 +#define MIN_SPKR_LEVEL 500 // Smoothing factor #define FACTOR_LENGTH = 5 -- GitLab From 7bd4a9e22e32d5d99be32f4d3f9bf7ad321a46bb Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 11 May 2010 09:40:48 -0400 Subject: [PATCH 021/197] [#1966] Use only one MIN_SIGNAL_LEVEL threshohd for both mix and speaker --- sflphone-common/src/audio/echocancel.cpp | 24 ++++++++++++++++-------- sflphone-common/src/audio/echocancel.h | 3 ++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 9bdfb78d15..600a6bc274 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -168,22 +168,30 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa _spkrLevel = getMaxAmplitude(_avgSpkrLevelHist); _micLevel = getMaxAmplitude(_avgMicLevelHist); - if(_spkrLevel > MIN_SPKR_LEVEL) { - if(_micLevel < MIN_MIC_LEVEL) { + if(_micLevel >= MIN_SIG_LEVEL) { + if(_spkrLevel < MIN_SIG_LEVEL) { + // std::cout << "micLevel >= MIN_SIG_LEVEL && spkrLevel < MIN_SIG_LEVEL" << std::endl; // far-end is talking, near-end silent reduce echo - _amplFactor = 0.0; + _amplFactor = 1.0; + } + else if(_micLevel > _spkrLevel) { + // std::cout << "micLevel >= MIN_SIG_LEVEL && micLevel > spkrLevel" << std::endl; + _amplFactor = 1.0; } else { + // std::cout << "micLevel >= MIN_SIG_LEVEL && (micLevel > spkrLevel < MIN_SIG_LEVEL)" << std::endl; // near-end is talking, far-end too - _amplFactor = 0.5; + _amplFactor = 0.0; } } else { - if(_micLevel < MIN_MIC_LEVEL) { - _amplFactor = 1.0; + if(_spkrLevel < MIN_SIG_LEVEL) { + // std::cout << "micLevel < MIN_SIG_LEVEL && spkrLevel < MIN_SIG_LEVEL" << std::endl; + _amplFactor = 0.5; } else { - _amplFactor = 1.0; + // std::cout << "micLevel < MIN_SIG_LEVEL && spkrLevel > MIN_SIG_LEVEL" << std::endl; + _amplFactor = 0.0; } } @@ -199,7 +207,7 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa } _amplify = _amplify / 10.0; - std::cout << "Amplitude: " << _amplify << ", spkrLevel: " << _spkrLevel << ", micLevel: " << _micLevel << std::endl; + // std::cout << "Amplitude: " << _amplify << ", spkrLevel: " << _spkrLevel << ", micLevel: " << _micLevel << std::endl; amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg)); diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 61b0561cab..a6be5f9fbc 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -31,11 +31,12 @@ #define MS_PER_SEC 1000 // Length of the echo tail in ms -#define ECHO_LENGTH 100 +#define ECHO_LENGTH 50 // Voice Threashold #define MIN_MIC_LEVEL 300 #define MIN_SPKR_LEVEL 500 +#define MIN_SIG_LEVEL 100 // Smoothing factor #define FACTOR_LENGTH = 5 -- GitLab From 0f83fa47b8afbd4c1c4b046c947ecae4643d6b97 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 11 May 2010 14:25:49 -0400 Subject: [PATCH 022/197] [#1966] Makes echo canceller more reactive add noise reduction --- sflphone-common/src/audio/echocancel.cpp | 43 +++++++++++++++--------- sflphone-common/src/audio/echocancel.h | 14 ++++---- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 600a6bc274..317e049e72 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -23,6 +23,8 @@ // number of samples (20 ms) #define FRAME_SIZE 160 +#define FRAME_LENGTH 20 + // number of sample to process, (800 à 4000 samples, 100 to 500 ms) #define FILTER_LENGTH 800 @@ -30,6 +32,7 @@ EchoCancel::EchoCancel() : _samplingRate(8000), _smplPerFrame(160), _smplPerSeg(0), + _nbSegment(0), _historyLength(0), _spkrLevel(0), _micLevel(0), @@ -37,7 +40,7 @@ EchoCancel::EchoCancel() : _samplingRate(8000), _micHistCnt(0), _amplFactor(0.0), _amplify(0.0), - _factorCnt(0) + _lastAmplFactor(0.0) { _debug("EchoCancel: Instantiate echo canceller"); @@ -55,10 +58,24 @@ EchoCancel::EchoCancel() : _samplingRate(8000), _smplPerSeg = (_samplingRate * SEGMENT_LENGTH) / MS_PER_SEC; _historyLength = ECHO_LENGTH / SEGMENT_LENGTH; + _nbSegment = FRAME_LENGTH / SEGMENT_LENGTH; + + noiseState = speex_preprocess_state_init(FRAME_SIZE, 8000); + int i=1; + speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); + i=0; + speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_AGC, &i); + i=8000; + speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i); + i=0; + speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i); + float f=.0; + speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); + f=.0; + speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); memset(_avgSpkrLevelHist, 0, 5000*sizeof(int)); memset(_avgMicLevelHist, 0, 5000*sizeof(int)); - memset(_factorFilter, 0, 10*sizeof(float)); } @@ -79,6 +96,8 @@ EchoCancel::~EchoCancel() delete micFile; delete spkrFile; delete echoFile; + + speex_preprocess_state_destroy(noiseState); } void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) @@ -138,7 +157,8 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int // Processed echo cancellation performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); - // speex_preprocess_run(_preState, _tmpOut); + // Remove noise + speex_preprocess_run(noiseState, _tmpOut); bcopy(_tmpOut, outputData+(nbFrame*FRAME_SIZE), byteSize); @@ -161,7 +181,7 @@ void EchoCancel::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDat void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData) { - for(int k = 0; k < 2; k++) { + for(int k = 0; k < _nbSegment; k++) { updateEchoCancel(micData+(k*_smplPerSeg), spkrData+(k*_smplPerSeg)); @@ -187,7 +207,7 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa else { if(_spkrLevel < MIN_SIG_LEVEL) { // std::cout << "micLevel < MIN_SIG_LEVEL && spkrLevel < MIN_SIG_LEVEL" << std::endl; - _amplFactor = 0.5; + _amplFactor = 0.0; } else { // std::cout << "micLevel < MIN_SIG_LEVEL && spkrLevel > MIN_SIG_LEVEL" << std::endl; @@ -195,17 +215,10 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa } } - _factorFilter[_factorCnt++] = _amplFactor; - if(_factorCnt >= 10) { - _factorCnt = 0; - } - + // filter ampl factor + _amplify = (_lastAmplFactor + _amplFactor) / 2; - _amplify = 0.0; - for(int m = 0; m < 10; m++) { - _amplify += _factorFilter[m]; - } - _amplify = _amplify / 10.0; + _lastAmplFactor = _amplFactor; // std::cout << "Amplitude: " << _amplify << ", spkrLevel: " << _spkrLevel << ", micLevel: " << _micLevel << std::endl; diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index a6be5f9fbc..130a4d47ca 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -21,6 +21,7 @@ #define ECHOCANCEL_H #include "audioprocessing.h" +#include <speex/speex_preprocess.h> #include "ringbuffer.h" @@ -31,16 +32,13 @@ #define MS_PER_SEC 1000 // Length of the echo tail in ms -#define ECHO_LENGTH 50 +#define ECHO_LENGTH 100 // Voice Threashold #define MIN_MIC_LEVEL 300 #define MIN_SPKR_LEVEL 500 #define MIN_SIG_LEVEL 100 -// Smoothing factor -#define FACTOR_LENGTH = 5 - class EchoCancel : public Algorithm { public: @@ -102,7 +100,7 @@ class EchoCancel : public Algorithm { /** * Internal buffer for speaker data synchronization */ - RingBuffer *_spkrData; + RingBuffer *_spkrData; /** * Boolean value @@ -120,6 +118,7 @@ class EchoCancel : public Algorithm { int _samplingRate; int _smplPerFrame; int _smplPerSeg; + int _nbSegment; int _historyLength; int _spkrLevel; @@ -133,12 +132,13 @@ class EchoCancel : public Algorithm { float _amplFactor; float _amplify; - float _factorFilter[10]; - int _factorCnt; + float _lastAmplFactor; ofstream *micFile; ofstream *spkrFile; ofstream *echoFile; + + SpeexPreprocessState *noiseState; }; -- GitLab From 8593a75640ee32d0f8343a88d2d698a4f17a58f1 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 11 May 2010 15:39:24 -0400 Subject: [PATCH 023/197] [#1966] Add decrease/increase gain factor method in echocanceller --- sflphone-common/src/audio/echocancel.cpp | 39 ++++++++++++++++-------- sflphone-common/src/audio/echocancel.h | 4 +++ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 317e049e72..fb1a4f099f 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -190,28 +190,21 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa if(_micLevel >= MIN_SIG_LEVEL) { if(_spkrLevel < MIN_SIG_LEVEL) { - // std::cout << "micLevel >= MIN_SIG_LEVEL && spkrLevel < MIN_SIG_LEVEL" << std::endl; - // far-end is talking, near-end silent reduce echo - _amplFactor = 1.0; + increaseFactor(); } else if(_micLevel > _spkrLevel) { - // std::cout << "micLevel >= MIN_SIG_LEVEL && micLevel > spkrLevel" << std::endl; - _amplFactor = 1.0; + increaseFactor(); } else { - // std::cout << "micLevel >= MIN_SIG_LEVEL && (micLevel > spkrLevel < MIN_SIG_LEVEL)" << std::endl; - // near-end is talking, far-end too - _amplFactor = 0.0; + decreaseFactor(); } } else { if(_spkrLevel < MIN_SIG_LEVEL) { - // std::cout << "micLevel < MIN_SIG_LEVEL && spkrLevel < MIN_SIG_LEVEL" << std::endl; - _amplFactor = 0.0; + decreaseFactor(); } else { - // std::cout << "micLevel < MIN_SIG_LEVEL && spkrLevel > MIN_SIG_LEVEL" << std::endl; - _amplFactor = 0.0; + decreaseFactor(); } } @@ -220,7 +213,7 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa _lastAmplFactor = _amplFactor; - // std::cout << "Amplitude: " << _amplify << ", spkrLevel: " << _spkrLevel << ", micLevel: " << _micLevel << std::endl; + std::cout << "Amplitude: " << _amplify << ", spkrLevel: " << _spkrLevel << ", micLevel: " << _micLevel << std::endl; amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg)); @@ -284,3 +277,23 @@ void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData // std::cout << "input: " << micData[i] << ", output: " << outputData[i] << std::endl; } } + + + +void EchoCancel::increaseFactor() { + + _amplFactor += 0.01; + + if(_amplFactor > 1.0) + _amplFactor = 1.0; + +} + + +void EchoCancel::decreaseFactor() { + + _amplFactor -= 0.2; + + if(_amplFactor < 0.0) + _amplFactor = 0.0; +} diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 130a4d47ca..365a4bcea3 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -92,6 +92,10 @@ class EchoCancel : public Algorithm { void amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData); + void increaseFactor(); + + void decreaseFactor(); + /** * Internal buffer for mic data synchronization */ -- GitLab From 6ff86a4f08091496b5b24dab60dbacf0d3797c8d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 11 May 2010 16:00:34 -0400 Subject: [PATCH 024/197] [#1966] Add reset method in audio processing and algorithm Mostly usefull for new calls --- sflphone-common/src/audio/algorithm.h | 2 ++ sflphone-common/src/audio/audioprocessing.cpp | 6 ++++++ sflphone-common/src/audio/audioprocessing.h | 6 ++++++ sflphone-common/src/audio/dcblocker.cpp | 8 ++++++++ sflphone-common/src/audio/dcblocker.h | 2 ++ sflphone-common/src/audio/echocancel.cpp | 14 ++++++++++++++ sflphone-common/src/audio/echocancel.h | 2 ++ sflphone-common/src/audio/speexechocancel.cpp | 5 +++++ sflphone-common/src/audio/speexechocancel.h | 2 ++ 9 files changed, 47 insertions(+) diff --git a/sflphone-common/src/audio/algorithm.h b/sflphone-common/src/audio/algorithm.h index b55712e4d6..0f9ff38953 100644 --- a/sflphone-common/src/audio/algorithm.h +++ b/sflphone-common/src/audio/algorithm.h @@ -31,6 +31,8 @@ class Algorithm { public: + virtual void reset(void) = 0; + /** * Put data to be processed */ diff --git a/sflphone-common/src/audio/audioprocessing.cpp b/sflphone-common/src/audio/audioprocessing.cpp index 6fbc7d8446..3bf14f6a12 100644 --- a/sflphone-common/src/audio/audioprocessing.cpp +++ b/sflphone-common/src/audio/audioprocessing.cpp @@ -27,6 +27,12 @@ AudioProcessing::AudioProcessing(Algorithm *_algo) : _algorithm(_algo) {} AudioProcessing::~AudioProcessing(void){} +void AudioProcessing::resetAlgorithm(void) +{ + if(_algorithm) + _algorithm->reset(); +} + void AudioProcessing::putData(SFLDataFormat *inputData, int nbBytes) { if(_algorithm) diff --git a/sflphone-common/src/audio/audioprocessing.h b/sflphone-common/src/audio/audioprocessing.h index e6b28985e7..264f7177fb 100644 --- a/sflphone-common/src/audio/audioprocessing.h +++ b/sflphone-common/src/audio/audioprocessing.h @@ -43,6 +43,12 @@ public: */ void setAlgorithm(Algorithm *_algo) { _algorithm = _algo; } + + /** + * Reset parameters for the algorithm + */ + void resetAlgorithm(); + /** * Put data in internal buffer */ diff --git a/sflphone-common/src/audio/dcblocker.cpp b/sflphone-common/src/audio/dcblocker.cpp index 6cac799c2c..ff21780d25 100644 --- a/sflphone-common/src/audio/dcblocker.cpp +++ b/sflphone-common/src/audio/dcblocker.cpp @@ -48,6 +48,14 @@ DcBlocker::DcBlocker() : _y(0), _x(0), _xm1(0), _ym1(0) {} DcBlocker::~DcBlocker() {} +void DcBlocker::reset() +{ + _y = 0; + _x = 0; + _xm1 = 0; + _ym1 = 0; +} + void DcBlocker::putData(SFLDataFormat *inputData, int nbBytes) {} void DcBlocker::process (SFLDataFormat *data, int nbBytes) diff --git a/sflphone-common/src/audio/dcblocker.h b/sflphone-common/src/audio/dcblocker.h index fb304a1788..29b024ef98 100644 --- a/sflphone-common/src/audio/dcblocker.h +++ b/sflphone-common/src/audio/dcblocker.h @@ -79,6 +79,8 @@ public: ~DcBlocker(); + virtual void reset(void); + /** * Unused */ diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index fb1a4f099f..8bfdc43040 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -100,6 +100,20 @@ EchoCancel::~EchoCancel() speex_preprocess_state_destroy(noiseState); } +void EchoCancel::reset() +{ + memset(_avgSpkrLevelHist, 0, 5000*sizeof(int)); + memset(_avgMicLevelHist, 0, 5000*sizeof(int)); + + _spkrLevel = 0; + _micLevel = 0; + _spkrHistCnt = 0; + _micHistCnt = 0; + _amplFactor = 0.0; + _amplify = 0.0; + _lastAmplFactor = 0.0; +} + void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { // std::cout << "putData nbBytes: " << nbBytes << std::endl; diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 365a4bcea3..b8347b293d 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -47,6 +47,8 @@ class EchoCancel : public Algorithm { ~EchoCancel(); + virtual void reset(void); + /** * Add speaker data into internal buffer * \param inputData containing far-end voice data to be sent to speakers diff --git a/sflphone-common/src/audio/speexechocancel.cpp b/sflphone-common/src/audio/speexechocancel.cpp index c3929c8e69..fa5f1045dd 100644 --- a/sflphone-common/src/audio/speexechocancel.cpp +++ b/sflphone-common/src/audio/speexechocancel.cpp @@ -77,6 +77,11 @@ SpeexEchoCancel::~SpeexEchoCancel() delete echoFile; } +void SpeexEchoCancel::reset() +{ + +} + void SpeexEchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { // std::cout << "putData nbBytes: " << nbBytes << std::endl; diff --git a/sflphone-common/src/audio/speexechocancel.h b/sflphone-common/src/audio/speexechocancel.h index b38cba036b..45628e14af 100644 --- a/sflphone-common/src/audio/speexechocancel.h +++ b/sflphone-common/src/audio/speexechocancel.h @@ -34,6 +34,8 @@ class SpeexEchoCancel : public Algorithm { ~SpeexEchoCancel(); + virtual void reset(void); + /** * Add speaker data into internal buffer * \param inputData containing far-end voice data to be sent to speakers -- GitLab From 822c59c5900968edfffeef406930a5d98a474c7d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 11 May 2010 17:49:02 -0400 Subject: [PATCH 025/197] [#1966] Added a delay for microphone gain factor To take into account --- sflphone-common/src/audio/alsa/alsalayer.cpp | 6 ++++ sflphone-common/src/audio/echocancel.cpp | 30 ++++++++++++++----- sflphone-common/src/audio/echocancel.h | 21 ++++++++----- .../src/audio/pulseaudio/pulselayer.cpp | 10 +++++-- 4 files changed, 50 insertions(+), 17 deletions(-) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index 157cc57387..8e0edbb0e6 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -152,6 +152,12 @@ AlsaLayer::startStream (void) { _debug ("Audio: Start stream"); + if(_audiofilter) + _audiofilter->resetAlgorithm(); + + if(_echoCanceller) + _echoCanceller->resetAlgorithm(); + std::string pcmp = buildDeviceTopo (_audioPlugin, _indexOut, 0); std::string pcmc = buildDeviceTopo (_audioPlugin, _indexIn, 0); diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 8bfdc43040..645a0bdb38 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -76,6 +76,10 @@ EchoCancel::EchoCancel() : _samplingRate(8000), memset(_avgSpkrLevelHist, 0, 5000*sizeof(int)); memset(_avgMicLevelHist, 0, 5000*sizeof(int)); + + memset(_delayedAmplify, 0, 10*sizeof(float)); + _amplIndexIn = 0; + _amplIndexOut = DELAY_AMPLIFY / SEGMENT_LENGTH; } @@ -204,10 +208,10 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa if(_micLevel >= MIN_SIG_LEVEL) { if(_spkrLevel < MIN_SIG_LEVEL) { - increaseFactor(); + increaseFactor(0.02); } else if(_micLevel > _spkrLevel) { - increaseFactor(); + increaseFactor(0.05); } else { decreaseFactor(); @@ -215,7 +219,7 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa } else { if(_spkrLevel < MIN_SIG_LEVEL) { - decreaseFactor(); + increaseFactor(0.02); } else { decreaseFactor(); @@ -286,17 +290,28 @@ int EchoCancel::getMaxAmplitude(int *data) { void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData) { + + // Use delayed amplification factor due to sound card latency for(int i = 0; i < _smplPerSeg; i++) { - outputData[i] = (SFLDataFormat)(((float)micData[i])*_amplify); - // std::cout << "input: " << micData[i] << ", output: " << outputData[i] << std::endl; + outputData[i] = (SFLDataFormat)(((float)micData[i])*_delayedAmplify[_amplIndexOut]); } + + _amplIndexOut++; + _delayedAmplify[_amplIndexIn++] = _amplify; + + if(_amplIndexOut >= 10) + _amplIndexOut = 0; + + if(_amplIndexIn >= 10) + _amplIndexIn = 0; } -void EchoCancel::increaseFactor() { +void EchoCancel::increaseFactor(float factor) { - _amplFactor += 0.01; + // Get 200 ms to get back to full amplitude + _amplFactor += factor; if(_amplFactor > 1.0) _amplFactor = 1.0; @@ -306,6 +321,7 @@ void EchoCancel::increaseFactor() { void EchoCancel::decreaseFactor() { + // Takes about 50 ms to react _amplFactor -= 0.2; if(_amplFactor < 0.0) diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index b8347b293d..3d20182f77 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -25,20 +25,21 @@ #include "ringbuffer.h" -// length of audio segment in ms -#define SEGMENT_LENGTH 10 - -// number of ms in sec +// Number of ms in sec #define MS_PER_SEC 1000 +// Length of audio segment in ms +#define SEGMENT_LENGTH 10 + // Length of the echo tail in ms #define ECHO_LENGTH 100 -// Voice Threashold -#define MIN_MIC_LEVEL 300 -#define MIN_SPKR_LEVEL 500 +// Voice level threashold #define MIN_SIG_LEVEL 100 +// Delay between mic and speaker +#define DELAY_AMPLIFY 60 + class EchoCancel : public Algorithm { public: @@ -94,7 +95,7 @@ class EchoCancel : public Algorithm { void amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData); - void increaseFactor(); + void increaseFactor(float factor); void decreaseFactor(); @@ -138,8 +139,12 @@ class EchoCancel : public Algorithm { float _amplFactor; float _amplify; + float _delayedAmplify[10]; float _lastAmplFactor; + int _amplIndexIn; + int _amplIndexOut; + ofstream *micFile; ofstream *spkrFile; ofstream *echoFile; diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index c1cdd4ab26..5ae90351f0 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -367,9 +367,15 @@ int PulseLayer::getMic (void *buffer, int toCopy) void PulseLayer::startStream (void) { + if(_audiofilter) + _audiofilter->resetAlgorithm(); + + if(_echoCanceller) + _echoCanceller->resetAlgorithm(); + // Create Streams - if(!playback || !record) - createStreams(context); + if(!playback || !record) + createStreams(context); // Flush outside the if statement: every time start stream is // called is to notify a new event -- GitLab From d4460cc2604de2d813a6505b3203637c9e3df76d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 12 May 2010 09:36:37 -0400 Subject: [PATCH 026/197] [#1966] Use fixed latency (not adjustable) for pulseaudio streams This improve echocanceller processing efficiency. However, it add about 200 ms latency in microphone capture. --- sflphone-common/src/audio/pulseaudio/audiostream.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 801e7f52ef..de22c85d47 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -193,21 +193,22 @@ AudioStream::createStream (pa_context* c) if (_streamType == PLAYBACK_STREAM) { attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->tlength = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); attributes->prebuf = 0; attributes->minreq = (uint32_t) -1; - pa_threaded_mainloop_lock(_mainloop); - pa_stream_connect_playback (s , NULL , attributes, (pa_stream_flags_t)(PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE), NULL, NULL); + pa_threaded_mainloop_lock(_mainloop); + // pa_stream_connect_playback (s , NULL , attributes, (pa_stream_flags_t)(PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE), NULL, NULL); + pa_stream_connect_playback (s , NULL , attributes, (pa_stream_flags_t)(PA_STREAM_NOFLAGS), NULL, NULL); pa_threaded_mainloop_unlock(_mainloop); } else if (_streamType == CAPTURE_STREAM) { attributes->maxlength = (uint32_t) -1; - attributes->fragsize = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->fragsize = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); pa_threaded_mainloop_lock(_mainloop); - pa_stream_connect_record (s, NULL, attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE)); + pa_stream_connect_record (s, NULL, attributes, (pa_stream_flags_t)(PA_STREAM_NOFLAGS)); pa_threaded_mainloop_unlock(_mainloop); } else if (_streamType == UPLOAD_STREAM) { -- GitLab From 88ab5cb7cdcabee559b1e4c572de0cf4720a0ec5 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 12 May 2010 10:30:31 -0400 Subject: [PATCH 027/197] [#1966] Remove _amplify variable, Add MAX_DELAY definition And add some documentation --- sflphone-common/src/audio/echocancel.cpp | 50 +++++------ sflphone-common/src/audio/echocancel.h | 108 ++++++++++++++++++++--- 2 files changed, 117 insertions(+), 41 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 645a0bdb38..d5b62b3a58 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -19,15 +19,12 @@ #include "echocancel.h" -#include <fstream> +// #include <fstream> // number of samples (20 ms) #define FRAME_SIZE 160 #define FRAME_LENGTH 20 -// number of sample to process, (800 à 4000 samples, 100 to 500 ms) -#define FILTER_LENGTH 800 - EchoCancel::EchoCancel() : _samplingRate(8000), _smplPerFrame(160), @@ -39,14 +36,13 @@ EchoCancel::EchoCancel() : _samplingRate(8000), _spkrHistCnt(0), _micHistCnt(0), _amplFactor(0.0), - _amplify(0.0), _lastAmplFactor(0.0) { _debug("EchoCancel: Instantiate echo canceller"); - micFile = new ofstream("micData", ofstream::binary); - echoFile = new ofstream("echoData", ofstream::binary); - spkrFile = new ofstream("spkrData", ofstream::binary); + // micFile = new ofstream("micData", ofstream::binary); + // echoFile = new ofstream("echoData", ofstream::binary); + // spkrFile = new ofstream("spkrData", ofstream::binary); _micData = new RingBuffer(10000); _spkrData = new RingBuffer(10000); @@ -93,15 +89,16 @@ EchoCancel::~EchoCancel() delete _spkrData; _spkrData = NULL; - micFile->close(); - spkrFile->close(); - echoFile->close(); + speex_preprocess_state_destroy(noiseState); + + // micFile->close(); + // spkrFile->close(); + // echoFile->close(); - delete micFile; - delete spkrFile; - delete echoFile; + // delete micFile; + // delete spkrFile; + // delete echoFile; - speex_preprocess_state_destroy(noiseState); } void EchoCancel::reset() @@ -114,7 +111,6 @@ void EchoCancel::reset() _spkrHistCnt = 0; _micHistCnt = 0; _amplFactor = 0.0; - _amplify = 0.0; _lastAmplFactor = 0.0; } @@ -169,8 +165,8 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int _spkrData->Get(_tmpSpkr, byteSize); _micData->Get(_tmpMic, byteSize); - micFile->write ((const char *)_tmpMic, byteSize); - spkrFile->write ((const char *)_tmpSpkr, byteSize); + // micFile->write ((const char *)_tmpMic, byteSize); + // spkrFile->write ((const char *)_tmpSpkr, byteSize); // Processed echo cancellation performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); @@ -180,7 +176,7 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int bcopy(_tmpOut, outputData+(nbFrame*FRAME_SIZE), byteSize); - echoFile->write ((const char *)_tmpOut, byteSize); + // echoFile->write ((const char *)_tmpOut, byteSize); spkrAvail = _spkrData->AvailForGet(); micAvail = _micData->AvailForGet(); @@ -226,14 +222,14 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa } } - // filter ampl factor - _amplify = (_lastAmplFactor + _amplFactor) / 2; + // lowpass filtering + float amplify = (_lastAmplFactor + _amplFactor) / 2; _lastAmplFactor = _amplFactor; - std::cout << "Amplitude: " << _amplify << ", spkrLevel: " << _spkrLevel << ", micLevel: " << _micLevel << std::endl; + std::cout << "Amplitude: " << amplify << ", spkrLevel: " << _spkrLevel << ", micLevel: " << _micLevel << std::endl; - amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg)); + amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), amplify); } @@ -288,7 +284,7 @@ int EchoCancel::getMaxAmplitude(int *data) { } -void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData) { +void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData, float amplify) { // Use delayed amplification factor due to sound card latency @@ -297,12 +293,12 @@ void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData } _amplIndexOut++; - _delayedAmplify[_amplIndexIn++] = _amplify; + _delayedAmplify[_amplIndexIn++] = amplify; - if(_amplIndexOut >= 10) + if(_amplIndexOut >= MAX_DELAY) _amplIndexOut = 0; - if(_amplIndexIn >= 10) + if(_amplIndexIn >= MAX_DELAY) _amplIndexIn = 0; } diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 3d20182f77..34e2f0d123 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -40,6 +40,12 @@ // Delay between mic and speaker #define DELAY_AMPLIFY 60 +// maximum in segment size (segment are SEGMENT_LENGTH long) +#define MAX_DELAY 10 + +// Internal buffer size +#define BUFF_SIZE 5000 + class EchoCancel : public Algorithm { public: @@ -48,6 +54,9 @@ class EchoCancel : public Algorithm { ~EchoCancel(); + /** + * Reset echocanceller internal state at runtime. Usefull when making a new call + */ virtual void reset(void); /** @@ -88,15 +97,33 @@ class EchoCancel : public Algorithm { */ void updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData); + /** + * Compute the average amplitude of the signal. + * \param data must be of SEGMENT_LENGTH long. + */ int computeAmplitudeLevel(SFLDataFormat *data); - + /** + * Return the max amplitude provided any of _avgSpkrLevelHist or _avgMicLevelHist + */ int getMaxAmplitude(int *data); - void amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData); + /** + * Apply gain factor on input buffer and copy result in output buffer. + * Buffers must be of SEGMENT_LENGTH long. + * \param input buffer + * \param output buffer + */ + void amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData, float amplify); + /** + * Increase microphone gain by the provided factor. Sanity check are done internally. + */ void increaseFactor(float factor); + /** + * Decrease microphone gain. + */ void decreaseFactor(); /** @@ -115,40 +142,93 @@ class EchoCancel : public Algorithm { bool _spkrStoped; /** - * Temp buffer + * Internal buffer for audio processing */ - SFLDataFormat _tmpSpkr[5000]; - SFLDataFormat _tmpMic[5000]; - SFLDataFormat _tmpOut[5000]; - + SFLDataFormat _tmpSpkr[BUFF_SIZE]; + SFLDataFormat _tmpMic[BUFF_SIZE]; + SFLDataFormat _tmpOut[BUFF_SIZE]; + /** + * Audio stream sampling rate + */ int _samplingRate; + + /** + * Number of sample per frame + */ int _smplPerFrame; + + /** + * Number of samples per segment + */ int _smplPerSeg; + + /** + * Number of segment per frame + */ int _nbSegment; + + /** + * Number of segment considered in history + * Mainly used to compute signal level + */ int _historyLength; + /** + * Current playback level + */ int _spkrLevel; + + /** + * Current capture level + */ int _micLevel; + /** + * Current index to store level in speaker history + */ int _spkrHistCnt; + + /** + * Current index to store level in microphone history + */ int _micHistCnt; - int _avgSpkrLevelHist[5000]; - int _avgMicLevelHist[5000]; + /** + * Average speaker/microphone level history. Each value corespond to + * the averaged amplitude value over a segment (SEGMENT_LENGTH long) + */ + int _avgSpkrLevelHist[BUFF_SIZE]; + int _avgMicLevelHist[BUFF_SIZE]; + /** + * Current linear gain factor to be applied on microphone + */ float _amplFactor; - float _amplify; - float _delayedAmplify[10]; + + /** + * Stored linea gain factor for lowpass filtering + */ float _lastAmplFactor; + /** + * Linear gain factor buffer to adjust to system's latency + */ + float _delayedAmplify[MAX_DELAY]; + + /** + * read/write for mic gain delay + */ int _amplIndexIn; int _amplIndexOut; - ofstream *micFile; - ofstream *spkrFile; - ofstream *echoFile; + // ofstream *micFile; + // ofstream *spkrFile; + // ofstream *echoFile; + /** + * Noise reduction processing state + */ SpeexPreprocessState *noiseState; }; -- GitLab From 4f2150ff344a02d47b53de3bc7b86a1f8e386bee Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 12 May 2010 10:54:58 -0400 Subject: [PATCH 028/197] [#1966] Add sampling rate and frame size as parameters --- sflphone-common/src/audio/alsa/alsalayer.cpp | 2 +- sflphone-common/src/audio/echocancel.cpp | 54 ++++++++++--------- sflphone-common/src/audio/echocancel.h | 4 +- .../src/audio/pulseaudio/pulselayer.cpp | 13 +++-- .../src/audio/pulseaudio/pulselayer.h | 2 + 5 files changed, 43 insertions(+), 32 deletions(-) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index 8e0edbb0e6..ead9089185 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -47,7 +47,7 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) // _audioThread = NULL; _urgentRingBuffer.createReadPointer(); - AudioLayer::_echoCancel = new EchoCancel(); + AudioLayer::_echoCancel = new EchoCancel(8000, 160); AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); AudioLayer::_dcblocker = new DcBlocker(); diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index d5b62b3a58..ccdfefd592 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -26,17 +26,17 @@ #define FRAME_LENGTH 20 -EchoCancel::EchoCancel() : _samplingRate(8000), - _smplPerFrame(160), - _smplPerSeg(0), - _nbSegment(0), - _historyLength(0), - _spkrLevel(0), - _micLevel(0), - _spkrHistCnt(0), - _micHistCnt(0), - _amplFactor(0.0), - _lastAmplFactor(0.0) +EchoCancel::EchoCancel(int smplRate, int frameSize) : _samplingRate(smplRate), + _smplPerFrame(frameSize), + _smplPerSeg(0), + _nbSegment(0), + _historyLength(0), + _spkrLevel(0), + _micLevel(0), + _spkrHistCnt(0), + _micHistCnt(0), + _amplFactor(0.0), + _lastAmplFactor(0.0) { _debug("EchoCancel: Instantiate echo canceller"); @@ -56,24 +56,25 @@ EchoCancel::EchoCancel() : _samplingRate(8000), _historyLength = ECHO_LENGTH / SEGMENT_LENGTH; _nbSegment = FRAME_LENGTH / SEGMENT_LENGTH; - noiseState = speex_preprocess_state_init(FRAME_SIZE, 8000); + _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); int i=1; - speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); i=0; - speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_AGC, &i); + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC, &i); i=8000; - speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i); + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i); i=0; - speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i); + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i); float f=.0; - speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); f=.0; - speex_preprocess_ctl(noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); - memset(_avgSpkrLevelHist, 0, 5000*sizeof(int)); - memset(_avgMicLevelHist, 0, 5000*sizeof(int)); + memset(_avgSpkrLevelHist, 0, BUFF_SIZE*sizeof(int)); + memset(_avgMicLevelHist, 0, BUFF_SIZE*sizeof(int)); + + memset(_delayedAmplify, 0, MAX_DELAY*sizeof(float)); - memset(_delayedAmplify, 0, 10*sizeof(float)); _amplIndexIn = 0; _amplIndexOut = DELAY_AMPLIFY / SEGMENT_LENGTH; @@ -89,7 +90,7 @@ EchoCancel::~EchoCancel() delete _spkrData; _spkrData = NULL; - speex_preprocess_state_destroy(noiseState); + speex_preprocess_state_destroy(_noiseState); // micFile->close(); // spkrFile->close(); @@ -112,6 +113,11 @@ void EchoCancel::reset() _micHistCnt = 0; _amplFactor = 0.0; _lastAmplFactor = 0.0; + + memset(_delayedAmplify, 0, MAX_DELAY*sizeof(float)); + + _amplIndexIn = 0; + _amplIndexOut = DELAY_AMPLIFY / SEGMENT_LENGTH; } void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) @@ -172,7 +178,7 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); // Remove noise - speex_preprocess_run(noiseState, _tmpOut); + speex_preprocess_run(_noiseState, _tmpOut); bcopy(_tmpOut, outputData+(nbFrame*FRAME_SIZE), byteSize); @@ -227,7 +233,7 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa _lastAmplFactor = _amplFactor; - std::cout << "Amplitude: " << amplify << ", spkrLevel: " << _spkrLevel << ", micLevel: " << _micLevel << std::endl; + // std::cout << "Amplitude: " << amplify << ", spkrLevel: " << _spkrLevel << ", micLevel: " << _micLevel << std::endl; amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), amplify); diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 34e2f0d123..b0613f090a 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -50,7 +50,7 @@ class EchoCancel : public Algorithm { public: - EchoCancel(); + EchoCancel(int smplRate, int frameSize); ~EchoCancel(); @@ -229,7 +229,7 @@ class EchoCancel : public Algorithm { /** * Noise reduction processing state */ - SpeexPreprocessState *noiseState; + SpeexPreprocessState *_noiseState; }; diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 5ae90351f0..72d9099396 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -82,16 +82,17 @@ PulseLayer::PulseLayer (ManagerImpl* manager) is_started = false; // Instantiate the algorithm - AudioLayer::_echoCancel = new EchoCancel(); + AudioLayer::_echoCancel = new EchoCancel(8000, 160); AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); AudioLayer::_dcblocker = new DcBlocker(); AudioLayer::_audiofilter = new AudioProcessing(static_cast<Algorithm *>(_dcblocker)); + /* captureFile = new ofstream("captureFile", ofstream::binary); captureRsmplFile = new ofstream("captureRsmplFile", ofstream::binary); captureFilterFile = new ofstream("captureFilterFile", ofstream::binary); - + */ openLayer(); } @@ -117,6 +118,7 @@ PulseLayer::~PulseLayer (void) delete AudioLayer::_audiofilter; AudioLayer::_audiofilter = NULL; + /* captureFile->close(); captureRsmplFile->close(); captureFilterFile->close(); @@ -124,6 +126,7 @@ PulseLayer::~PulseLayer (void) delete captureFile; delete captureRsmplFile; delete captureFilterFile; + */ } void @@ -642,16 +645,16 @@ void PulseLayer::readFromMic (void) int nb_sample_up = nbSample; - captureFile->write ((const char *)data, nbSample*sizeof(SFLDataFormat)); + // captureFile->write ((const char *)data, nbSample*sizeof(SFLDataFormat)); nbSample = _converter->downsampleData ( (SFLDataFormat*) data, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_up); - captureRsmplFile->write ((const char *)rsmpl_out, nbSample*sizeof(SFLDataFormat)); + // captureRsmplFile->write ((const char *)rsmpl_out, nbSample*sizeof(SFLDataFormat)); // remove dc offset _audiofilter->processAudio(rsmpl_out, nbSample*sizeof(SFLDataFormat)); - captureFilterFile->write ((const char *)rsmpl_out, nbSample*sizeof(SFLDataFormat)); + // captureFilterFile->write ((const char *)rsmpl_out, nbSample*sizeof(SFLDataFormat)); // echo cancellation processing int sampleready = _echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.h b/sflphone-common/src/audio/pulseaudio/pulselayer.h index 0c7d29a6ee..778985d9d3 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.h +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.h @@ -210,9 +210,11 @@ class PulseLayer : public AudioLayer { int spkrVolume; int micVolume; + /* ofstream *captureFile; ofstream *captureRsmplFile; ofstream *captureFilterFile; + */ // private: -- GitLab From 6211f1ee39f3a8cc6b56a90bc2ef1e6fb278b5ff Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 13 May 2010 16:12:53 -0400 Subject: [PATCH 029/197] [#1966] Moved echo canceller instantiation in openDevice --- sflphone-common/src/audio/alsa/alsalayer.cpp | 19 ++++++++----- sflphone-common/src/audio/alsa/alsalayer.h | 2 +- .../src/audio/pulseaudio/pulselayer.cpp | 28 ++++++++++++------- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index ead9089185..ac3a11b1e3 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -46,12 +46,6 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) // _audioThread = new AudioThread (this); // _audioThread = NULL; _urgentRingBuffer.createReadPointer(); - - AudioLayer::_echoCancel = new EchoCancel(8000, 160); - AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); - - AudioLayer::_dcblocker = new DcBlocker(); - AudioLayer::_audiofilter = new AudioProcessing(static_cast<Algorithm *>(_dcblocker)); } // Destructor @@ -143,6 +137,12 @@ AlsaLayer::openDevice (int indexIn, int indexOut, int sampleRate, int frameSize, // use 1 sec buffer for resampling _converter = new SamplerateConverter (_audioSampleRate, 1000); + AudioLayer::_echoCancel = new EchoCancel(); + AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); + + AudioLayer::_dcblocker = new DcBlocker(); + AudioLayer::_audiofilter = new AudioProcessing(static_cast<Algorithm *>(_dcblocker)); + // open_device (pcmp, pcmc, stream); return true; // open_device (pcmp, pcmc, stream); } @@ -819,7 +819,7 @@ AlsaLayer::soundCardGetIndex (std::string description) return 0; } -void AlsaLayer::audioCallback (void) +void AlsaLayer::audioCallback(void) { int toGet, urgentAvailBytes, normalAvailBytes, maxBytes; @@ -842,6 +842,7 @@ void AlsaLayer::audioCallback (void) // framePerBuffer are the number of data for one channel (left) urgentAvailBytes = _urgentRingBuffer.AvailForGet(); + // if (urgentAvailBytes > 0) { // Urgent data (dtmf, incoming call signal) come first. @@ -919,6 +920,10 @@ void AlsaLayer::audioCallback (void) getMainBuffer()->getData (out, toGet, spkrVolume); + // TODO: Audio processing should be performed inside mainbuffer + // to avoid such problem + AudioLayer::_echoCancel->setSamplingRate(_mainBufferSampleRate); + // Copy far-end signal in echo canceller to adapt filter coefficient AudioLayer::_echoCanceller->putData(out, toGet); diff --git a/sflphone-common/src/audio/alsa/alsalayer.h b/sflphone-common/src/audio/alsa/alsalayer.h index c20522bebb..8f16098029 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.h +++ b/sflphone-common/src/audio/alsa/alsalayer.h @@ -231,7 +231,7 @@ class AlsaLayer : public AudioLayer { void* adjustVolume( void* buffer , int len, int stream ); -/** + /** * Handles to manipulate playback stream * ALSA Library API */ diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 72d9099396..0d408382e5 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -81,13 +81,6 @@ PulseLayer::PulseLayer (ManagerImpl* manager) is_started = false; - // Instantiate the algorithm - AudioLayer::_echoCancel = new EchoCancel(8000, 160); - AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); - - AudioLayer::_dcblocker = new DcBlocker(); - AudioLayer::_audiofilter = new AudioProcessing(static_cast<Algorithm *>(_dcblocker)); - /* captureFile = new ofstream("captureFile", ofstream::binary); captureRsmplFile = new ofstream("captureRsmplFile", ofstream::binary); @@ -271,6 +264,13 @@ bool PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int sample // use 1 sec buffer for resampling _converter = new SamplerateConverter (_audioSampleRate, 1000); + // Instantiate the algorithm + AudioLayer::_echoCancel = new EchoCancel(); + AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); + + AudioLayer::_dcblocker = new DcBlocker(); + AudioLayer::_audiofilter = new AudioProcessing(static_cast<Algorithm *>(_dcblocker)); + return true; } @@ -564,6 +564,10 @@ void PulseLayer::writeToSpeaker (void) getMainBuffer()->getData (out, byteToGet, 100); + // TODO: Audio processing should be performed inside mainbuffer + // to avoid such problem + AudioLayer::_echoCancel->setSamplingRate(_mainBufferSampleRate); + // Copy far-end signal in echo canceller to adapt filter coefficient AudioLayer::_echoCanceller->putData(out, byteToGet); @@ -621,8 +625,8 @@ void PulseLayer::readFromMic (void) const char* data = NULL; size_t r; - SFLDataFormat echoCancelledMic[5000]; - memset(echoCancelledMic, 0, 5000); + SFLDataFormat echoCancelledMic[10000]; + memset(echoCancelledMic, 0, 10000*sizeof(SFLDataFormat)); int readableSize = pa_stream_readable_size (record->pulseStream()); @@ -631,6 +635,7 @@ void PulseLayer::readFromMic (void) _warn("Audio: Error capture stream peek failed: %s" , pa_strerror (pa_context_errno (context))); } + _debug("*********************** Read from mic: %d **************************", readableSize); if (data != 0) { @@ -659,8 +664,11 @@ void PulseLayer::readFromMic (void) // echo cancellation processing int sampleready = _echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); + _debug("Read from mic: sampleReady %d", sampleready); + // getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); - getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); + if(sampleready) + getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); pa_xfree (rsmpl_out); -- GitLab From 0b0af87e630c3e726c89d8cc37c5d57c197a2bec Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 13 May 2010 16:16:39 -0400 Subject: [PATCH 030/197] [#1966] Specify frame size in ms for echo canceller Derive the number of samples by frame from sampling rate --- sflphone-common/src/audio/echocancel.cpp | 140 ++++++++++++++++------- sflphone-common/src/audio/echocancel.h | 28 ++++- 2 files changed, 122 insertions(+), 46 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index ccdfefd592..977b7d4a2c 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -21,40 +21,39 @@ // #include <fstream> -// number of samples (20 ms) -#define FRAME_SIZE 160 -#define FRAME_LENGTH 20 - - -EchoCancel::EchoCancel(int smplRate, int frameSize) : _samplingRate(smplRate), - _smplPerFrame(frameSize), - _smplPerSeg(0), - _nbSegment(0), - _historyLength(0), - _spkrLevel(0), - _micLevel(0), - _spkrHistCnt(0), - _micHistCnt(0), - _amplFactor(0.0), - _lastAmplFactor(0.0) +EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), + _frameLength(frameLength), + _smplPerFrame(0), + _smplPerSeg(0), + _nbSegmentPerFrame(0), + _historyLength(0), + _spkrLevel(0), + _micLevel(0), + _spkrHistCnt(0), + _micHistCnt(0), + _amplFactor(0.0), + _lastAmplFactor(0.0) { _debug("EchoCancel: Instantiate echo canceller"); - // micFile = new ofstream("micData", ofstream::binary); - // echoFile = new ofstream("echoData", ofstream::binary); - // spkrFile = new ofstream("spkrData", ofstream::binary); + /* + micFile = new ofstream("micData", ofstream::binary); + echoFile = new ofstream("echoData", ofstream::binary); + spkrFile = new ofstream("spkrData", ofstream::binary); + */ - _micData = new RingBuffer(10000); - _spkrData = new RingBuffer(10000); + _micData = new RingBuffer(50000); + _spkrData = new RingBuffer(50000); _micData->createReadPointer(); _spkrData->createReadPointer(); _spkrStoped = true; + _smplPerFrame = (_samplingRate * _frameLength) / MS_PER_SEC; _smplPerSeg = (_samplingRate * SEGMENT_LENGTH) / MS_PER_SEC; _historyLength = ECHO_LENGTH / SEGMENT_LENGTH; - _nbSegment = FRAME_LENGTH / SEGMENT_LENGTH; + _nbSegmentPerFrame = _frameLength / SEGMENT_LENGTH; _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); int i=1; @@ -92,20 +91,24 @@ EchoCancel::~EchoCancel() speex_preprocess_state_destroy(_noiseState); - // micFile->close(); - // spkrFile->close(); - // echoFile->close(); + /* + micFile->close(); + spkrFile->close(); + echoFile->close(); - // delete micFile; - // delete spkrFile; - // delete echoFile; + delete micFile; + delete spkrFile; + delete echoFile; + */ } void EchoCancel::reset() { - memset(_avgSpkrLevelHist, 0, 5000*sizeof(int)); - memset(_avgMicLevelHist, 0, 5000*sizeof(int)); + _debug("EchoCancel: Reset internal state, Sampling rate %d, Frame size %d", _samplingRate, _smplPerFrame); + + memset(_avgSpkrLevelHist, 0, BUFF_SIZE*sizeof(int)); + memset(_avgMicLevelHist, 0, BUFF_SIZE*sizeof(int)); _spkrLevel = 0; _micLevel = 0; @@ -114,10 +117,43 @@ void EchoCancel::reset() _amplFactor = 0.0; _lastAmplFactor = 0.0; + _smplPerFrame = (_samplingRate * _frameLength) / MS_PER_SEC; + _smplPerSeg = (_samplingRate * SEGMENT_LENGTH) / MS_PER_SEC; + _historyLength = ECHO_LENGTH / SEGMENT_LENGTH; + _nbSegmentPerFrame = _frameLength / SEGMENT_LENGTH; + memset(_delayedAmplify, 0, MAX_DELAY*sizeof(float)); _amplIndexIn = 0; _amplIndexOut = DELAY_AMPLIFY / SEGMENT_LENGTH; + + _micData->flushAll(); + _spkrData->flushAll(); + + speex_preprocess_state_destroy(_noiseState); + + _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); + int i=1; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); + i=0; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC, &i); + i=8000; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i); + i=0; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i); + float f=.0; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); + f=.0; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); + + /* + std::cout << "EchoCancel: _smplPerFrame " << _smplPerFrame + << ", _smplPerSeg " << _smplPerSeg + << ", _historyLength " << _historyLength + << ", _nbSegmentPerFrame " << _nbSegmentPerFrame << std::endl; + */ + + _spkrStoped = true; } void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) @@ -133,6 +169,8 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) // Put data in speaker ring buffer _spkrData->Put(inputData, nbBytes); + // std::cout << "EchoCancel: spkrDataAvail " << _spkrData->AvailForGet() << std::endl; + // In case we use libspeex internal buffer // (require capture and playback stream to be synchronized) // speex_echo_playback(_echoState, inputData); @@ -147,12 +185,12 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int return 0; } - int byteSize = FRAME_SIZE*2; + int byteSize = _smplPerFrame*sizeof(SFLDataFormat); // init temporary buffers - memset(_tmpSpkr, 0, 5000); - memset(_tmpMic, 0, 5000); - memset(_tmpOut, 0, 5000); + memset(_tmpSpkr, 0, BUFF_SIZE*sizeof(SFLDataFormat)); + memset(_tmpMic, 0, BUFF_SIZE*sizeof(SFLDataFormat)); + memset(_tmpOut, 0, BUFF_SIZE*sizeof(SFLDataFormat)); // Put mic data in ringbuffer _micData->Put(inputData, nbBytes); @@ -161,11 +199,15 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int int spkrAvail = _spkrData->AvailForGet(); int micAvail = _micData->AvailForGet(); + // std::cout << "Process echo: spkrAvail " << spkrAvail << ", micAvail " << micAvail << ", byteSize " << byteSize << std::endl; + // Init number of frame processed int nbFrame = 0; - // Get data from mic and speaker - while((spkrAvail > byteSize) && (micAvail > byteSize)) { + // Get data from mic and speaker internal buffer + while((spkrAvail >= byteSize) && (micAvail >= byteSize)) { + + // std::cout << "perform echocancel" << std::endl; // get synchronized data _spkrData->Get(_tmpSpkr, byteSize); @@ -180,28 +222,46 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int // Remove noise speex_preprocess_run(_noiseState, _tmpOut); - bcopy(_tmpOut, outputData+(nbFrame*FRAME_SIZE), byteSize); + bcopy(_tmpOut, outputData+(nbFrame*_smplPerFrame), byteSize); // echoFile->write ((const char *)_tmpOut, byteSize); spkrAvail = _spkrData->AvailForGet(); micAvail = _micData->AvailForGet(); + // std::cout << "Process echo remaining: spkrAvail " << spkrAvail << ", micAvail " << micAvail << std::endl; + // increment nb of frame processed ++nbFrame; } - return nbFrame * FRAME_SIZE; + return nbFrame * _smplPerFrame; } void EchoCancel::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes){ } +void EchoCancel::setSamplingRate(int smplRate) { + + if (smplRate != _samplingRate) { + _samplingRate = smplRate; + + /* + if(smplRate == 16000) + _frameLength = 10; + else + _frameLength = 20; + */ + + reset(); + } +} + void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData) { - for(int k = 0; k < _nbSegment; k++) { + for(int k = 0; k < _nbSegmentPerFrame; k++) { updateEchoCancel(micData+(k*_smplPerSeg), spkrData+(k*_smplPerSeg)); @@ -271,7 +331,7 @@ int EchoCancel::computeAmplitudeLevel(SFLDataFormat *data) { level -= (int)data[i]; } - level = level / _smplPerFrame; + level = level / _smplPerSeg; return level; } diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index b0613f090a..8312ac5afb 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -44,13 +44,17 @@ #define MAX_DELAY 10 // Internal buffer size -#define BUFF_SIZE 5000 +#define BUFF_SIZE 10000 + +#define DEFAULT_SAMPLRATE 8000 + +#define DEFAULT_FRAME_LENGTH 20 class EchoCancel : public Algorithm { public: - EchoCancel(int smplRate, int frameSize); + EchoCancel(int smplRate = DEFAULT_SAMPLRATE, int frameLength = DEFAULT_FRAME_LENGTH); ~EchoCancel(); @@ -85,6 +89,11 @@ class EchoCancel : public Algorithm { */ virtual void process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes); + /** + * Set echo canceller internal sampling rate, reset if sampling rate changed + */ + void setSamplingRate(int smplRate); + private: /** @@ -153,6 +162,11 @@ class EchoCancel : public Algorithm { */ int _samplingRate; + /** + * Audio frame size in ms + */ + int _frameLength; + /** * Number of sample per frame */ @@ -166,7 +180,7 @@ class EchoCancel : public Algorithm { /** * Number of segment per frame */ - int _nbSegment; + int _nbSegmentPerFrame; /** * Number of segment considered in history @@ -222,9 +236,11 @@ class EchoCancel : public Algorithm { int _amplIndexIn; int _amplIndexOut; - // ofstream *micFile; - // ofstream *spkrFile; - // ofstream *echoFile; + /* + ofstream *micFile; + ofstream *spkrFile; + ofstream *echoFile; + */ /** * Noise reduction processing state -- GitLab From 3b3902943b78308cb2621854849180686b4f008e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 13 May 2010 16:17:48 -0400 Subject: [PATCH 031/197] [#1966] Remove mutex from Ringbuffer are lockfree data structures... --- sflphone-common/src/audio/mainbuffer.cpp | 22 +++++++++++----------- sflphone-common/src/audio/mainbuffer.h | 2 +- sflphone-common/src/managerimpl.cpp | 1 + 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 07f6bbf627..817b8692d9 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -36,7 +36,7 @@ MainBuffer::~MainBuffer() void MainBuffer::setInternalSamplingRate (int sr) { - ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); if (sr != _internalSamplingRate) { @@ -162,7 +162,7 @@ bool MainBuffer::removeRingBuffer (CallID call_id) void MainBuffer::bindCallID (CallID call_id1, CallID call_id2) { - ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); RingBuffer* ring_buffer; CallIDSet* callid_set; @@ -193,7 +193,7 @@ void MainBuffer::bindCallID (CallID call_id1, CallID call_id2) void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2) { - ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); removeCallIDfromSet (call_id1, call_id2); removeCallIDfromSet (call_id2, call_id1); @@ -230,7 +230,7 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2) void MainBuffer::unBindAll (CallID call_id) { - ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); CallIDSet* callid_set = getCallIDSet (call_id); @@ -257,7 +257,7 @@ void MainBuffer::unBindAll (CallID call_id) int MainBuffer::putData (void *buffer, int toCopy, unsigned short volume, CallID call_id) { - ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); RingBuffer* ring_buffer = getRingBuffer (call_id); @@ -284,7 +284,7 @@ int MainBuffer::putData (void *buffer, int toCopy, unsigned short volume, CallID int MainBuffer::availForPut (CallID call_id) { - ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); RingBuffer* ringbuffer = getRingBuffer (call_id); @@ -298,7 +298,7 @@ int MainBuffer::availForPut (CallID call_id) int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID call_id) { - ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); CallIDSet* callid_set = getCallIDSet (call_id); @@ -363,7 +363,7 @@ int MainBuffer::getDataByID (void *buffer, int toCopy, unsigned short volume, Ca int MainBuffer::availForGet (CallID call_id) { - ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); CallIDSet* callid_set = getCallIDSet (call_id); @@ -425,7 +425,7 @@ int MainBuffer::discard (int toDiscard, CallID call_id) { // _debug("MainBuffer::discard"); - ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); CallIDSet* callid_set = getCallIDSet (call_id); @@ -474,7 +474,7 @@ int MainBuffer::discardByID (int toDiscard, CallID call_id, CallID reader_id) void MainBuffer::flush (CallID call_id) { - ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); CallIDSet* callid_set = getCallIDSet (call_id); @@ -501,7 +501,7 @@ void MainBuffer::flush (CallID call_id) void MainBuffer::flushDefault() { - ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); flushByID (default_id, default_id); diff --git a/sflphone-common/src/audio/mainbuffer.h b/sflphone-common/src/audio/mainbuffer.h index f8759ab534..b3d9975b33 100644 --- a/sflphone-common/src/audio/mainbuffer.h +++ b/sflphone-common/src/audio/mainbuffer.h @@ -106,7 +106,7 @@ public: SFLDataFormat* mixBuffer; - ost::Mutex _mutex; + // ost::Mutex _mutex; int _internalSamplingRate; diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index ddfad9813c..87dc39d32e 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1332,6 +1332,7 @@ void ManagerImpl::joinConference (const CallID& conf_id1, } void ManagerImpl::addStream (const CallID& call_id) { + _debug ("Manager: Add audio stream %s", call_id.c_str()); AccountID currentAccountId; -- GitLab From ec8dfeb236d5d586f20a7cd2d474e43aa992e649 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 13 May 2010 16:18:32 -0400 Subject: [PATCH 032/197] [#1966] Specify 20ms latency in pulseaudio's streams --- sflphone-common/src/audio/pulseaudio/audiostream.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index de22c85d47..d08cb0f3d9 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -193,7 +193,7 @@ AudioStream::createStream (pa_context* c) if (_streamType == PLAYBACK_STREAM) { attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->tlength = pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec); attributes->prebuf = 0; attributes->minreq = (uint32_t) -1; @@ -205,7 +205,7 @@ AudioStream::createStream (pa_context* c) } else if (_streamType == CAPTURE_STREAM) { attributes->maxlength = (uint32_t) -1; - attributes->fragsize = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->fragsize = pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec); pa_threaded_mainloop_lock(_mainloop); pa_stream_connect_record (s, NULL, attributes, (pa_stream_flags_t)(PA_STREAM_NOFLAGS)); -- GitLab From 945a039155f980e9a9ab7bd0420c3ef9fc4e6937 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 21 May 2010 13:38:38 -0400 Subject: [PATCH 033/197] [#1966] Add echo canceller adaptation variables and buffers --- sflphone-common/src/audio/echocancel.cpp | 71 ++++++++++-------------- sflphone-common/src/audio/echocancel.h | 42 ++++++++++++-- 2 files changed, 66 insertions(+), 47 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 977b7d4a2c..c3c2ae4d68 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -32,7 +32,17 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _spkrHistCnt(0), _micHistCnt(0), _amplFactor(0.0), - _lastAmplFactor(0.0) + _lastAmplFactor(0.0), + _amplDelayIndexIn(0), + _amplDelayIndexOut(0), + _adaptDone(false), + _adaptStarted(false), + _adaptCnt(0), + _spkrAdaptCnt(0), + _micAdaptCnt(0), + _spkrAdaptSize(SPKR_ADAPT_SIZE), + _micAdaptSize(MIC_ADAPT_SIZE), + _correlationSize(0) { _debug("EchoCancel: Instantiate echo canceller"); @@ -48,6 +58,7 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _micData->createReadPointer(); _spkrData->createReadPointer(); + // variable used to sync mic and spkr _spkrStoped = true; _smplPerFrame = (_samplingRate * _frameLength) / MS_PER_SEC; @@ -55,6 +66,7 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _historyLength = ECHO_LENGTH / SEGMENT_LENGTH; _nbSegmentPerFrame = _frameLength / SEGMENT_LENGTH; + _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); int i=1; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); @@ -72,10 +84,10 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), memset(_avgSpkrLevelHist, 0, BUFF_SIZE*sizeof(int)); memset(_avgMicLevelHist, 0, BUFF_SIZE*sizeof(int)); - memset(_delayedAmplify, 0, MAX_DELAY*sizeof(float)); + memset(_delayLineAmplify, 0, MAX_DELAY_LINE_AMPL*sizeof(float)); - _amplIndexIn = 0; - _amplIndexOut = DELAY_AMPLIFY / SEGMENT_LENGTH; + _amplDelayIndexIn = 0; + _amplDelayIndexOut = 0;; } @@ -122,10 +134,10 @@ void EchoCancel::reset() _historyLength = ECHO_LENGTH / SEGMENT_LENGTH; _nbSegmentPerFrame = _frameLength / SEGMENT_LENGTH; - memset(_delayedAmplify, 0, MAX_DELAY*sizeof(float)); + memset(_delayLineAmplify, 0, MAX_DELAY_LINE_AMPL*sizeof(float)); - _amplIndexIn = 0; - _amplIndexOut = DELAY_AMPLIFY / SEGMENT_LENGTH; + _amplDelayIndexIn = 0; + _amplDelayIndexOut = DELAY_AMPLIFY / SEGMENT_LENGTH; _micData->flushAll(); _spkrData->flushAll(); @@ -146,12 +158,6 @@ void EchoCancel::reset() f=.0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); - /* - std::cout << "EchoCancel: _smplPerFrame " << _smplPerFrame - << ", _smplPerSeg " << _smplPerSeg - << ", _historyLength " << _historyLength - << ", _nbSegmentPerFrame " << _nbSegmentPerFrame << std::endl; - */ _spkrStoped = true; } @@ -169,11 +175,6 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) // Put data in speaker ring buffer _spkrData->Put(inputData, nbBytes); - // std::cout << "EchoCancel: spkrDataAvail " << _spkrData->AvailForGet() << std::endl; - - // In case we use libspeex internal buffer - // (require capture and playback stream to be synchronized) - // speex_echo_playback(_echoState, inputData); } void EchoCancel::process(SFLDataFormat *data, int nbBytes) {} @@ -199,23 +200,16 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int int spkrAvail = _spkrData->AvailForGet(); int micAvail = _micData->AvailForGet(); - // std::cout << "Process echo: spkrAvail " << spkrAvail << ", micAvail " << micAvail << ", byteSize " << byteSize << std::endl; - // Init number of frame processed int nbFrame = 0; // Get data from mic and speaker internal buffer while((spkrAvail >= byteSize) && (micAvail >= byteSize)) { - // std::cout << "perform echocancel" << std::endl; - // get synchronized data _spkrData->Get(_tmpSpkr, byteSize); _micData->Get(_tmpMic, byteSize); - // micFile->write ((const char *)_tmpMic, byteSize); - // spkrFile->write ((const char *)_tmpSpkr, byteSize); - // Processed echo cancellation performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); @@ -229,8 +223,6 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int spkrAvail = _spkrData->AvailForGet(); micAvail = _micData->AvailForGet(); - // std::cout << "Process echo remaining: spkrAvail " << spkrAvail << ", micAvail " << micAvail << std::endl; - // increment nb of frame processed ++nbFrame; } @@ -247,13 +239,6 @@ void EchoCancel::setSamplingRate(int smplRate) { if (smplRate != _samplingRate) { _samplingRate = smplRate; - /* - if(smplRate == 16000) - _frameLength = 10; - else - _frameLength = 20; - */ - reset(); } } @@ -293,8 +278,6 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa _lastAmplFactor = _amplFactor; - // std::cout << "Amplitude: " << amplify << ", spkrLevel: " << _spkrLevel << ", micLevel: " << _micLevel << std::endl; - amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), amplify); } @@ -317,6 +300,8 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat if(_spkrHistCnt >= _historyLength) _spkrHistCnt = 0; + + } @@ -355,17 +340,17 @@ void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData // Use delayed amplification factor due to sound card latency for(int i = 0; i < _smplPerSeg; i++) { - outputData[i] = (SFLDataFormat)(((float)micData[i])*_delayedAmplify[_amplIndexOut]); + outputData[i] = (SFLDataFormat)(((float)micData[i])*_delayLineAmplify[_amplDelayIndexOut]); } - _amplIndexOut++; - _delayedAmplify[_amplIndexIn++] = amplify; + _amplDelayIndexOut++; + _delayLineAmplify[_amplDelayIndexIn++] = amplify; - if(_amplIndexOut >= MAX_DELAY) - _amplIndexOut = 0; + if(_amplDelayIndexOut >= MAX_DELAY_LINE_AMPL) + _amplDelayIndexOut = 0; - if(_amplIndexIn >= MAX_DELAY) - _amplIndexIn = 0; + if(_amplDelayIndexIn >= MAX_DELAY_LINE_AMPL) + _amplDelayIndexIn = 0; } diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 8312ac5afb..c559e6a6f6 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -41,7 +41,7 @@ #define DELAY_AMPLIFY 60 // maximum in segment size (segment are SEGMENT_LENGTH long) -#define MAX_DELAY 10 +#define MAX_DELAY_LINE_AMPL 100 // Internal buffer size #define BUFF_SIZE 10000 @@ -50,6 +50,9 @@ #define DEFAULT_FRAME_LENGTH 20 +#define MIC_ADAPT_SIZE 100 +#define SPKR_ADAPT_SIZE 50 + class EchoCancel : public Algorithm { public: @@ -228,13 +231,44 @@ class EchoCancel : public Algorithm { /** * Linear gain factor buffer to adjust to system's latency */ - float _delayedAmplify[MAX_DELAY]; + float _delayLineAmplify[MAX_DELAY_LINE_AMPL]; /** * read/write for mic gain delay */ - int _amplIndexIn; - int _amplIndexOut; + int _amplDelayIndexIn; + int _amplDelayIndexOut; + + /** + * State variable to determine if adaptation must be performed + */ + bool _adaptDone; + + /** + * State variable to specify if adaptation is started + */ + bool _adaptStarted; + + /** + * Adaptation index + */ + int _adaptCnt; + + int _spkrAdaptCnt; + + int _micAdaptCnt; + + int _spkrAdaptSize; + + int _micAdaptSize; + + int _spkrAdaptArray[BUFF_SIZE]; + + int _micAdaptArray[BUFF_SIZE]; + + int _correlationSize; + + int _correlationArray[BUFF_SIZE]; /* ofstream *micFile; -- GitLab From 850b42b25ebaf5694532b7ac4da4b7a6921892ce Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 21 May 2010 14:18:01 -0400 Subject: [PATCH 034/197] [#1966] Add echo canceller automatic adaptation algorithm --- sflphone-common/src/audio/echocancel.cpp | 65 +++++++++++++++++++++++- sflphone-common/src/audio/echocancel.h | 4 ++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index c3c2ae4d68..1eeb7b96c8 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -87,7 +87,9 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), memset(_delayLineAmplify, 0, MAX_DELAY_LINE_AMPL*sizeof(float)); _amplDelayIndexIn = 0; - _amplDelayIndexOut = 0;; + _amplDelayIndexOut = 0; + + _correlationSize = _spkrAdaptSize; } @@ -300,8 +302,39 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat if(_spkrHistCnt >= _historyLength) _spkrHistCnt = 0; + // if adaptation done, stop here + if(_adaptDone) + return; + + // start learning only if there is data played through speaker + if(!_adaptStarted) { + if(spkrLvl > MIN_SIG_LEVEL) + _adaptStarted = true; + else + return; + } - + if(_spkrAdaptCnt < _spkrAdaptSize) + _spkrAdaptArray[_spkrAdaptCnt++] = spkrLvl; + + if(_micAdaptCnt < _micAdaptSize) + _micAdaptArray[_micAdaptCnt++] = micLvl; + + // perform correlation if spkr size is reached + if(_adaptCnt > _spkrAdaptSize) { + int k = _adaptCnt - _spkrAdaptSize; + _correlationArray[k] = performCorrelation(_spkrAdaptArray, _micAdaptArray+k, _correlationSize); + } + + _adaptCnt++; + + // if we captured a full echo + if(_adaptCnt == _micAdaptSize) { + _debug("EchoCancel: Echo path adaptation completed"); + _adaptDone = true; + _amplDelayIndexOut = getMaximumIndex(_correlationArray, _correlationSize); + } + } @@ -374,3 +407,31 @@ void EchoCancel::decreaseFactor() { if(_amplFactor < 0.0) _amplFactor = 0.0; } + + +int EchoCancel::performCorrelation(int *data1, int *data2, int size) { + + int correlation = 0; + while(size) { + size--; + correlation += data1[size] * data2[size]; + } + return correlation; +} + + +int EchoCancel::getMaximumIndex(int *data, int size) { + + int index = size; + int max = data[size-1]; + + while(size) { + size--; + if(data[size] > max) { + index = size; + max = data[size]; + } + } + + return index; +} diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index c559e6a6f6..204aab3262 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -138,6 +138,10 @@ class EchoCancel : public Algorithm { */ void decreaseFactor(); + int performCorrelation(int *data1, int *data2, int size); + + int getMaximumIndex(int *data, int size); + /** * Internal buffer for mic data synchronization */ -- GitLab From 6b3029e19f227bfeaedb609f2d3b1335f7f4a89a Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 21 May 2010 17:14:46 -0400 Subject: [PATCH 035/197] [#1966] Add pulseaudio stream timing info update --- sflphone-common/src/audio/echocancel.cpp | 54 ++++++++++++++++--- sflphone-common/src/audio/echocancel.h | 11 ++-- .../src/audio/pulseaudio/audiostream.cpp | 2 + .../src/audio/pulseaudio/pulselayer.cpp | 26 ++++++--- 4 files changed, 77 insertions(+), 16 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 1eeb7b96c8..66e8780172 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -52,6 +52,9 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), spkrFile = new ofstream("spkrData", ofstream::binary); */ + micLearningData = new ofstream("micLearningData", ofstream::binary); + spkrLearningData = new ofstream("spkrLearningData", ofstream::binary); + _micData = new RingBuffer(50000); _spkrData = new RingBuffer(50000); @@ -115,11 +118,17 @@ EchoCancel::~EchoCancel() delete echoFile; */ + micLearningData->close(); + spkrLearningData->close(); + delete micLearningData; + delete spkrLearningData; + } void EchoCancel::reset() { _debug("EchoCancel: Reset internal state, Sampling rate %d, Frame size %d", _samplingRate, _smplPerFrame); + _debug("SIZEOF INT %d", sizeof(int)); memset(_avgSpkrLevelHist, 0, BUFF_SIZE*sizeof(int)); memset(_avgMicLevelHist, 0, BUFF_SIZE*sizeof(int)); @@ -139,11 +148,22 @@ void EchoCancel::reset() memset(_delayLineAmplify, 0, MAX_DELAY_LINE_AMPL*sizeof(float)); _amplDelayIndexIn = 0; - _amplDelayIndexOut = DELAY_AMPLIFY / SEGMENT_LENGTH; + _amplDelayIndexOut = 0; + + _adaptDone = false; + _adaptStarted = false; + _adaptCnt = 0; + _spkrAdaptCnt = 0; + _micAdaptCnt = 0; _micData->flushAll(); _spkrData->flushAll(); + // SFLDataFormat delay[960]; + // memset(delay, 0, sizeof(SFLDataFormat)); + + // _micData->Put(delay, 960*2); + speex_preprocess_state_destroy(_noiseState); _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); @@ -169,6 +189,7 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) // std::cout << "putData nbBytes: " << nbBytes << std::endl; if(_spkrStoped) { + _debug("EchoCancel: Flush data"); _micData->flushAll(); _spkrData->flushAll(); _spkrStoped = false; @@ -202,6 +223,8 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int int spkrAvail = _spkrData->AvailForGet(); int micAvail = _micData->AvailForGet(); + _debug("EchoCancel: speaker avail %d, mic avail %d", spkrAvail, micAvail); + // Init number of frame processed int nbFrame = 0; @@ -263,7 +286,8 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa increaseFactor(0.05); } else { - decreaseFactor(); + // decreaseFactor(); + _amplFactor = 0.0; } } else { @@ -271,13 +295,13 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa increaseFactor(0.02); } else { - decreaseFactor(); + // decreaseFactor(); + _amplFactor = 0.0; } } // lowpass filtering float amplify = (_lastAmplFactor + _amplFactor) / 2; - _lastAmplFactor = _amplFactor; amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), amplify); @@ -323,7 +347,8 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat // perform correlation if spkr size is reached if(_adaptCnt > _spkrAdaptSize) { int k = _adaptCnt - _spkrAdaptSize; - _correlationArray[k] = performCorrelation(_spkrAdaptArray, _micAdaptArray+k, _correlationSize); + _correlationArray[k] = performCorrelation(_spkrAdaptArray, _micAdaptArray+k, _correlationSize); + _debug("EchoCancel: Correlation: %d", _correlationArray[k]); } _adaptCnt++; @@ -333,6 +358,9 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat _debug("EchoCancel: Echo path adaptation completed"); _adaptDone = true; _amplDelayIndexOut = getMaximumIndex(_correlationArray, _correlationSize); + _debug("EchoCancel: Echo length %d", _amplDelayIndexOut); + spkrLearningData->write((const char *)_spkrAdaptArray, _spkrAdaptSize*sizeof(int)); + micLearningData->write((const char *)_micAdaptArray, _micAdaptSize*sizeof(int)); } } @@ -373,9 +401,23 @@ void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData // Use delayed amplification factor due to sound card latency for(int i = 0; i < _smplPerSeg; i++) { - outputData[i] = (SFLDataFormat)(((float)micData[i])*_delayLineAmplify[_amplDelayIndexOut]); + outputData[i] = (SFLDataFormat)(((float)micData[i])*_delayLineAmplify[_amplDelayIndexOut]); } + // do not increment amplitude array if adaptation is not done + if (_adaptDone) { + for(int i = 0; i < _smplPerSeg; i++) { + outputData[i] = (SFLDataFormat)(((float)micData[i])*_delayLineAmplify[_amplDelayIndexOut]); + } + } + else { + for(int i = 0; i < _smplPerSeg; i++) { + outputData[i] = micData[i]; + } + return; + } + + _amplDelayIndexOut++; _delayLineAmplify[_amplDelayIndexIn++] = amplify; diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 204aab3262..a06863fa19 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -32,7 +32,7 @@ #define SEGMENT_LENGTH 10 // Length of the echo tail in ms -#define ECHO_LENGTH 100 +#define ECHO_LENGTH 50 // Voice level threashold #define MIN_SIG_LEVEL 100 @@ -41,7 +41,7 @@ #define DELAY_AMPLIFY 60 // maximum in segment size (segment are SEGMENT_LENGTH long) -#define MAX_DELAY_LINE_AMPL 100 +#define MAX_DELAY_LINE_AMPL 100 // 1 sec // Internal buffer size #define BUFF_SIZE 10000 @@ -50,8 +50,8 @@ #define DEFAULT_FRAME_LENGTH 20 -#define MIC_ADAPT_SIZE 100 -#define SPKR_ADAPT_SIZE 50 +#define MIC_ADAPT_SIZE 100 // 1 sec +#define SPKR_ADAPT_SIZE 20 // 200 ms class EchoCancel : public Algorithm { @@ -280,6 +280,9 @@ class EchoCancel : public Algorithm { ofstream *echoFile; */ + ofstream *micLearningData; + ofstream *spkrLearningData; + /** * Noise reduction processing state */ diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 1e10ed4ec0..8071844ffd 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -204,6 +204,7 @@ AudioStream::createStream (pa_context* c, std::string *deviceName) else pa_stream_connect_playback (s , NULL, attributes, (pa_stream_flags_t)(PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE), NULL, NULL); + pa_threaded_mainloop_unlock(_mainloop); } else if (_streamType == CAPTURE_STREAM) { @@ -218,6 +219,7 @@ AudioStream::createStream (pa_context* c, std::string *deviceName) else pa_stream_connect_record (s, NULL, attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE)); + pa_threaded_mainloop_unlock(_mainloop); } else if (_streamType == RINGTONE_STREAM) { diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 5f9b6cb193..05ea09ec60 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -64,6 +64,24 @@ static void pa_success_callback(pa_context *c, int success, void *userdata) { _debug("Audio: Success callback"); } +static void latency_update_callback(pa_stream *p, void *userdata) { + + pa_usec_t r_usec; + pa_buffer_attr *buffattr; + + pa_stream_get_latency (p, &r_usec, NULL); + + // buffattr = pa_stream_get_buffer_attr(p); + + _debug("Audio: Stream letency update %0.0f ms for device %s", (float)r_usec/1000, pa_stream_get_device_name(p)); + // _debug("Audio: maxlength %d", buffattr->maxlength); + // _debug("Audio: tlength %d", buffattr->tlength); + // _debug("Audio: prebug %d", buffattr->prebuf); + // _debug("Audio: minreq %d", buffattr->minreq); + // _debug("Audio: fragsize %d", buffattr->fragsize); + +} + static void sink_input_info_callback(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { char s[PA_SAMPLE_SPEC_SNPRINT_MAX], cv[PA_CVOLUME_SNPRINT_MAX], cm[PA_CHANNEL_MAP_SNPRINT_MAX]; @@ -517,6 +535,7 @@ bool PulseLayer::createStreams (pa_context* c) pa_stream_set_underflow_callback (playback->pulseStream(), playback_underflow_callback, this); // pa_stream_set_suspended_callback(playback->pulseStream(), stream_suspended_callback, this); pa_stream_set_moved_callback(playback->pulseStream(), stream_moved_callback, this); + pa_stream_set_latency_update_callback(playback->pulseStream(), latency_update_callback, this); delete playbackParam; PulseLayerType * recordParam = new PulseLayerType(); @@ -536,6 +555,7 @@ bool PulseLayer::createStreams (pa_context* c) pa_stream_set_read_callback (record->pulseStream() , capture_callback, this); // pa_stream_set_suspended_callback(record->pulseStream(), stream_suspended_callback, this); pa_stream_set_moved_callback(record->pulseStream(), stream_moved_callback, this); + pa_stream_set_latency_update_callback(record->pulseStream(), latency_update_callback, this); delete recordParam; PulseLayerType * ringtoneParam = new PulseLayerType(); @@ -896,8 +916,6 @@ void PulseLayer::readFromMic (void) _warn("Audio: Error capture stream peek failed: %s" , pa_strerror (pa_context_errno (context))); } - _debug("*********************** Read from mic: %d **************************", readableSize); - if (data != 0) { int _mainBufferSampleRate = getMainBuffer()->getInternalSamplingRate(); @@ -925,8 +943,6 @@ void PulseLayer::readFromMic (void) // echo cancellation processing int sampleready = _echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); - _debug("Read from mic: sampleReady %d", sampleready); - // getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); if(sampleready) getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); @@ -960,8 +976,6 @@ void PulseLayer::ringtoneToSpeaker(void) int writableSize = pa_stream_writable_size(ringtone->pulseStream()); - _debug("writable size: %d", writableSize); - if (file_tone) { if(ringtone->getStreamState() == PA_STREAM_READY) { -- GitLab From aeeb28e2a5c82b998678dc18d8e9dd002d3a678c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 21 May 2010 18:36:43 -0400 Subject: [PATCH 036/197] [#1966] Add timing info in pulseaudio layer --- sflphone-common/src/audio/echocancel.cpp | 7 +++++-- sflphone-common/src/audio/echocancel.h | 2 +- .../src/audio/pulseaudio/audiostream.cpp | 11 +++++++++- .../src/audio/pulseaudio/pulselayer.cpp | 21 +++++++++---------- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 66e8780172..59d962b141 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -188,12 +188,14 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { // std::cout << "putData nbBytes: " << nbBytes << std::endl; + /* if(_spkrStoped) { _debug("EchoCancel: Flush data"); _micData->flushAll(); _spkrData->flushAll(); _spkrStoped = false; } + */ // Put data in speaker ring buffer _spkrData->Put(inputData, nbBytes); @@ -204,10 +206,11 @@ void EchoCancel::process(SFLDataFormat *data, int nbBytes) {} int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { - + /* if(_spkrStoped) { return 0; } + */ int byteSize = _smplPerFrame*sizeof(SFLDataFormat); @@ -357,7 +360,7 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat if(_adaptCnt == _micAdaptSize) { _debug("EchoCancel: Echo path adaptation completed"); _adaptDone = true; - _amplDelayIndexOut = getMaximumIndex(_correlationArray, _correlationSize); + _amplDelayIndexOut = 0;// getMaximumIndex(_correlationArray, _correlationSize); _debug("EchoCancel: Echo length %d", _amplDelayIndexOut); spkrLearningData->write((const char *)_spkrAdaptArray, _spkrAdaptSize*sizeof(int)); micLearningData->write((const char *)_micAdaptArray, _micAdaptSize*sizeof(int)); diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index a06863fa19..ab0c2bdd04 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -35,7 +35,7 @@ #define ECHO_LENGTH 50 // Voice level threashold -#define MIN_SIG_LEVEL 100 +#define MIN_SIG_LEVEL 1000 // Delay between mic and speaker #define DELAY_AMPLIFY 60 diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 7a1d25d63a..71f4a5bc4b 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -145,6 +145,13 @@ AudioStream::stream_state_callback (pa_stream* s, void* user_data) case PA_STREAM_READY: _info ("Audio: Stream successfully created, connected to %s", pa_stream_get_device_name (s)); + // pa_buffer_attr *buffattr = (pa_buffer_attr *)pa_xmalloc (sizeof(pa_buffer_attr)); + _debug("Audio: maxlength %u", pa_stream_get_buffer_attr(s)->maxlength); + _debug("Audio: tlength %u", pa_stream_get_buffer_attr(s)->tlength); + _debug("Audio: prebug %u", pa_stream_get_buffer_attr(s)->prebuf); + _debug("Audio: minreq %u", pa_stream_get_buffer_attr(s)->minreq); + _debug("Audio: fragsize %u", pa_stream_get_buffer_attr(s)->fragsize); + // pa_xfree (buffattr); break; case PA_STREAM_UNCONNECTED: @@ -210,7 +217,9 @@ AudioStream::createStream (pa_context* c, std::string *deviceName) } else if (_streamType == CAPTURE_STREAM) { attributes->maxlength = (uint32_t) -1; - attributes->fragsize = pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->tlength = pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->prebuf = 0; + attributes->fragsize = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &_sample_spec); pa_threaded_mainloop_lock(_mainloop); diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index bee3833e3b..74e3298ccb 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -66,19 +66,16 @@ static void pa_success_callback(pa_context *c, int success, void *userdata) { static void latency_update_callback(pa_stream *p, void *userdata) { - pa_usec_t r_usec; - pa_buffer_attr *buffattr; + pa_usec_t r_usec; - pa_stream_get_latency (p, &r_usec, NULL); + pa_stream_get_latency (p, &r_usec, NULL); - // buffattr = pa_stream_get_buffer_attr(p); - _debug("Audio: Stream letency update %0.0f ms for device %s", (float)r_usec/1000, pa_stream_get_device_name(p)); - // _debug("Audio: maxlength %d", buffattr->maxlength); - // _debug("Audio: tlength %d", buffattr->tlength); - // _debug("Audio: prebug %d", buffattr->prebuf); - // _debug("Audio: minreq %d", buffattr->minreq); - // _debug("Audio: fragsize %d", buffattr->fragsize); + _debug("Audio: maxlength %u", pa_stream_get_buffer_attr(p)->maxlength); + _debug("Audio: tlength %u", pa_stream_get_buffer_attr(p)->tlength); + _debug("Audio: prebuf %u", pa_stream_get_buffer_attr(p)->prebuf); + _debug("Audio: minreq %u", pa_stream_get_buffer_attr(p)->minreq); + _debug("Audio: fragsize %u", pa_stream_get_buffer_attr(p)->fragsize); } @@ -558,6 +555,7 @@ bool PulseLayer::createStreams (pa_context* c) pa_stream_set_latency_update_callback(record->pulseStream(), latency_update_callback, this); delete recordParam; + /* PulseLayerType * ringtoneParam = new PulseLayerType(); ringtoneParam->context = c; ringtoneParam->type = RINGTONE_STREAM; @@ -575,7 +573,7 @@ bool PulseLayer::createStreams (pa_context* c) pa_stream_set_write_callback(ringtone->pulseStream(), ringtone_callback, this); pa_stream_set_moved_callback(ringtone->pulseStream(), stream_moved_callback, this); delete ringtoneParam; - + */ pa_threaded_mainloop_signal (m , 0); flushMain(); @@ -943,6 +941,7 @@ void PulseLayer::readFromMic (void) // echo cancellation processing int sampleready = _echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); + _debug("sampleready: %d", sampleready); // getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); if(sampleready) getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); -- GitLab From 9d5dd6137e3469146fed571c283e9cb16a7ae52e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 25 May 2010 15:45:30 -0400 Subject: [PATCH 037/197] [#3288] Pulseaudio >= 0.9.15 required --- sflphone-common/configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index 676a386c32..504f6d8ceb 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -177,7 +177,7 @@ AC_SUBST(UUID_LIBS) AC_SUBST(ALSA_LIBS) dnl Check for pulseaudio development package - name: libpulse-dev - LIBPULSE_MIN_VERSION=0.9.6 + LIBPULSE_MIN_VERSION=0.9.15 PKG_CHECK_MODULES(PULSEAUDIO, libpulse >= ${LIBPULSE_MIN_VERSION}) AC_SUBST(PULSEAUDIO_LIBS) AC_SUBST(PULSEAUDIO_CFLAGS) -- GitLab From 141b4b690f58ea792b102effe72d96106d0a676b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 25 May 2010 15:53:22 -0400 Subject: [PATCH 038/197] [#1966] Add getData method to algorithm abstract interface and echocancel --- sflphone-common/src/audio/algorithm.h | 5 ++++ sflphone-common/src/audio/audioprocessing.cpp | 8 ++++++ sflphone-common/src/audio/audioprocessing.h | 5 ++++ sflphone-common/src/audio/dcblocker.cpp | 2 ++ sflphone-common/src/audio/dcblocker.h | 5 ++++ sflphone-common/src/audio/echocancel.cpp | 27 ++++++++++++++++--- sflphone-common/src/audio/echocancel.h | 11 +++++++- 7 files changed, 59 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/audio/algorithm.h b/sflphone-common/src/audio/algorithm.h index 0f9ff38953..6da74c1c70 100644 --- a/sflphone-common/src/audio/algorithm.h +++ b/sflphone-common/src/audio/algorithm.h @@ -38,6 +38,11 @@ class Algorithm { */ virtual void putData(SFLDataFormat *inputData, int nbBytes) = 0; + /** + * + */ + virtual int getData(SFLDataFormat *outputData) = 0; + /** * Class implementing this interface must define this function * for audio processing that require synchronization between spkrdata and diff --git a/sflphone-common/src/audio/audioprocessing.cpp b/sflphone-common/src/audio/audioprocessing.cpp index 3bf14f6a12..36f17f6fcd 100644 --- a/sflphone-common/src/audio/audioprocessing.cpp +++ b/sflphone-common/src/audio/audioprocessing.cpp @@ -33,6 +33,14 @@ void AudioProcessing::resetAlgorithm(void) _algorithm->reset(); } +int AudioProcessing::getData(SFLDataFormat *outputData) +{ + if(_algorithm) + return _algorithm->getData(outputData); + else + return 0; +} + void AudioProcessing::putData(SFLDataFormat *inputData, int nbBytes) { if(_algorithm) diff --git a/sflphone-common/src/audio/audioprocessing.h b/sflphone-common/src/audio/audioprocessing.h index 264f7177fb..1ef0464f69 100644 --- a/sflphone-common/src/audio/audioprocessing.h +++ b/sflphone-common/src/audio/audioprocessing.h @@ -54,6 +54,11 @@ public: */ void putData(SFLDataFormat *inputData, int nbBytes); + /** + * Get data from internal buffer + */ + int getData(SFLDataFormat *outputData); + /** * Process some audio data */ diff --git a/sflphone-common/src/audio/dcblocker.cpp b/sflphone-common/src/audio/dcblocker.cpp index ff21780d25..4ab4e822c0 100644 --- a/sflphone-common/src/audio/dcblocker.cpp +++ b/sflphone-common/src/audio/dcblocker.cpp @@ -58,6 +58,8 @@ void DcBlocker::reset() void DcBlocker::putData(SFLDataFormat *inputData, int nbBytes) {} +int DcBlocker::getData(SFLDataFormat *outputData) { return 0; } + void DcBlocker::process (SFLDataFormat *data, int nbBytes) { // y(n) = x(n) - x(n-1) + R y(n-1) , R = 0.9999 diff --git a/sflphone-common/src/audio/dcblocker.h b/sflphone-common/src/audio/dcblocker.h index 29b024ef98..3dd7f35e30 100644 --- a/sflphone-common/src/audio/dcblocker.h +++ b/sflphone-common/src/audio/dcblocker.h @@ -86,6 +86,11 @@ public: */ virtual void putData(SFLDataFormat *inputData, int nbBytes); + /** + * Unused + */ + virtual int getData(SFLDataFormat *outputData); + /** * Perform dc blocking given the input data */ diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 59d962b141..95cb40b226 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -42,7 +42,8 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _micAdaptCnt(0), _spkrAdaptSize(SPKR_ADAPT_SIZE), _micAdaptSize(MIC_ADAPT_SIZE), - _correlationSize(0) + _correlationSize(0), + _processedByte(0) { _debug("EchoCancel: Instantiate echo canceller"); @@ -57,9 +58,11 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _micData = new RingBuffer(50000); _spkrData = new RingBuffer(50000); + _spkrDataOut = new RingBuffer(50000); _micData->createReadPointer(); _spkrData->createReadPointer(); + _spkrDataOut->createReadPointer(); // variable used to sync mic and spkr _spkrStoped = true; @@ -158,6 +161,7 @@ void EchoCancel::reset() _micData->flushAll(); _spkrData->flushAll(); + _spkrDataOut->flushAll(); // SFLDataFormat delay[960]; // memset(delay, 0, sizeof(SFLDataFormat)); @@ -180,7 +184,6 @@ void EchoCancel::reset() f=.0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); - _spkrStoped = true; } @@ -199,9 +202,24 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) // Put data in speaker ring buffer _spkrData->Put(inputData, nbBytes); + _spkrDataOut->Put(inputData, nbBytes); } +int EchoCancel::getData(SFLDataFormat *outputData) +{ + // int availForGet = _spkrData->AvailForGet(); + + int copied = 0; + + if(_processedByte > 0) { + copied = _spkrDataOut->Get(outputData, _processedByte); + _processedByte = 0; + } + + return copied; +} + void EchoCancel::process(SFLDataFormat *data, int nbBytes) {} int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) @@ -226,7 +244,7 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int int spkrAvail = _spkrData->AvailForGet(); int micAvail = _micData->AvailForGet(); - _debug("EchoCancel: speaker avail %d, mic avail %d", spkrAvail, micAvail); + _debug("EchoCancel: speaker avail %d, mic avail %d, processed: %d", spkrAvail/320, micAvail/320, _processedByte); // Init number of frame processed int nbFrame = 0; @@ -246,6 +264,9 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int bcopy(_tmpOut, outputData+(nbFrame*_smplPerFrame), byteSize); + // used to sync with speaker + _processedByte += byteSize; + // echoFile->write ((const char *)_tmpOut, byteSize); spkrAvail = _spkrData->AvailForGet(); diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index ab0c2bdd04..e122b0cd91 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -72,6 +72,11 @@ class EchoCancel : public Algorithm { */ virtual void putData(SFLDataFormat *inputData, int nbBytes); + /** + * Get data ready to be played by speakers + */ + virtual int getData(SFLDataFormat *outputData); + /** * Unused */ @@ -152,6 +157,8 @@ class EchoCancel : public Algorithm { */ RingBuffer *_spkrData; + RingBuffer *_spkrDataOut; + /** * Boolean value */ @@ -274,6 +281,8 @@ class EchoCancel : public Algorithm { int _correlationArray[BUFF_SIZE]; + int _processedByte; + /* ofstream *micFile; ofstream *spkrFile; @@ -287,7 +296,7 @@ class EchoCancel : public Algorithm { * Noise reduction processing state */ SpeexPreprocessState *_noiseState; - + }; #endif -- GitLab From cf15eafda6c3560c3fe08b21e586a005e8783e48 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 25 May 2010 15:54:09 -0400 Subject: [PATCH 039/197] [#1966] Display sample specs at pulseaudio stream creation --- sflphone-common/src/audio/pulseaudio/audiostream.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 71f4a5bc4b..404f482b19 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -130,6 +130,8 @@ AudioStream::stream_state_callback (pa_stream* s, void* user_data) _info("Audio: The state of the stream changed"); assert (s); + char str[PA_SAMPLE_SPEC_SNPRINT_MAX]; + m = (pa_threaded_mainloop*) user_data; assert (m); @@ -151,6 +153,7 @@ AudioStream::stream_state_callback (pa_stream* s, void* user_data) _debug("Audio: prebug %u", pa_stream_get_buffer_attr(s)->prebuf); _debug("Audio: minreq %u", pa_stream_get_buffer_attr(s)->minreq); _debug("Audio: fragsize %u", pa_stream_get_buffer_attr(s)->fragsize); + _debug("Audio: samplespec %s", pa_sample_spec_snprint(str, sizeof(str), pa_stream_get_sample_spec(s))); // pa_xfree (buffattr); break; -- GitLab From bc1407c8ccc05cbf7afe167406296a0f4cce61c9 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 25 May 2010 16:02:20 -0400 Subject: [PATCH 040/197] [#1966] Reenable pulseaudio ringtone stream --- sflphone-common/src/audio/pulseaudio/pulselayer.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 74e3298ccb..6aae59c0fe 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -555,7 +555,6 @@ bool PulseLayer::createStreams (pa_context* c) pa_stream_set_latency_update_callback(record->pulseStream(), latency_update_callback, this); delete recordParam; - /* PulseLayerType * ringtoneParam = new PulseLayerType(); ringtoneParam->context = c; ringtoneParam->type = RINGTONE_STREAM; @@ -573,7 +572,7 @@ bool PulseLayer::createStreams (pa_context* c) pa_stream_set_write_callback(ringtone->pulseStream(), ringtone_callback, this); pa_stream_set_moved_callback(ringtone->pulseStream(), stream_moved_callback, this); delete ringtoneParam; - */ + pa_threaded_mainloop_signal (m , 0); flushMain(); -- GitLab From 85b3f0c223e1f12352b8198415f8a520b057eed7 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 26 May 2010 14:17:07 -0400 Subject: [PATCH 041/197] [#1966] Remove echocancel process, keep sync for further tests --- sflphone-common/src/audio/echocancel.cpp | 157 +++++++++++++----- sflphone-common/src/audio/echocancel.h | 23 ++- .../src/audio/pulseaudio/pulselayer.cpp | 1 - 3 files changed, 127 insertions(+), 54 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index d957853560..ea5441bb47 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -32,12 +32,15 @@ // #include <fstream> +#define MICDELAY 32000 + EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _frameLength(frameLength), _smplPerFrame(0), _smplPerSeg(0), _nbSegmentPerFrame(0), - _historyLength(0), + _micHistoryLength(0), + _spkrHistoryLength(0), _spkrLevel(0), _micLevel(0), _spkrHistCnt(0), @@ -62,11 +65,11 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), micFile = new ofstream("micData", ofstream::binary); echoFile = new ofstream("echoData", ofstream::binary); spkrFile = new ofstream("spkrData", ofstream::binary); + + micLevelData = new ofstream("micLevelData", ofstream::binary); + spkrLevelData = new ofstream("spkrLevelData", ofstream::binary); */ - micLearningData = new ofstream("micLearningData", ofstream::binary); - spkrLearningData = new ofstream("spkrLearningData", ofstream::binary); - _micData = new RingBuffer(50000); _spkrData = new RingBuffer(50000); _spkrDataOut = new RingBuffer(50000); @@ -80,7 +83,8 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _smplPerFrame = (_samplingRate * _frameLength) / MS_PER_SEC; _smplPerSeg = (_samplingRate * SEGMENT_LENGTH) / MS_PER_SEC; - _historyLength = ECHO_LENGTH / SEGMENT_LENGTH; + _micHistoryLength = MIC_LENGTH / SEGMENT_LENGTH; + _spkrHistoryLength = SPKR_LENGTH / SEGMENT_LENGTH; _nbSegmentPerFrame = _frameLength / SEGMENT_LENGTH; @@ -130,12 +134,13 @@ EchoCancel::~EchoCancel() delete micFile; delete spkrFile; delete echoFile; + + micLevelData->close(); + spkrLevelData->close(); + delete micLevelData; + delete spkrLevelData; */ - micLearningData->close(); - spkrLearningData->close(); - delete micLearningData; - delete spkrLearningData; } @@ -156,7 +161,8 @@ void EchoCancel::reset() _smplPerFrame = (_samplingRate * _frameLength) / MS_PER_SEC; _smplPerSeg = (_samplingRate * SEGMENT_LENGTH) / MS_PER_SEC; - _historyLength = ECHO_LENGTH / SEGMENT_LENGTH; + _micHistoryLength = MIC_LENGTH / SEGMENT_LENGTH; + _spkrHistoryLength = SPKR_LENGTH / SEGMENT_LENGTH; _nbSegmentPerFrame = _frameLength / SEGMENT_LENGTH; memset(_delayLineAmplify, 0, MAX_DELAY_LINE_AMPL*sizeof(float)); @@ -174,10 +180,12 @@ void EchoCancel::reset() _spkrData->flushAll(); _spkrDataOut->flushAll(); - // SFLDataFormat delay[960]; - // memset(delay, 0, sizeof(SFLDataFormat)); + /* + SFLDataFormat delay[MICDELAY]; + memset(delay, 0, sizeof(SFLDataFormat)); - // _micData->Put(delay, 960*2); + _micData->Put(delay, MICDELAY*2); + */ speex_preprocess_state_destroy(_noiseState); @@ -202,19 +210,21 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { // std::cout << "putData nbBytes: " << nbBytes << std::endl; - /* + if(_spkrStoped) { _debug("EchoCancel: Flush data"); _micData->flushAll(); _spkrData->flushAll(); _spkrStoped = false; } - */ // Put data in speaker ring buffer _spkrData->Put(inputData, nbBytes); _spkrDataOut->Put(inputData, nbBytes); + // _debug("********************** signal event *****************"); + // _event.signal(); + } int EchoCancel::getData(SFLDataFormat *outputData) @@ -235,11 +245,16 @@ void EchoCancel::process(SFLDataFormat *data, int nbBytes) {} int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { - /* + if(_spkrStoped) { return 0; } - */ + + // _debug("****************************** wait signal ********************************"); + + // _event.wait(); + + // _debug("****************************** process ************************ ********"); int byteSize = _smplPerFrame*sizeof(SFLDataFormat); @@ -260,16 +275,32 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int // Init number of frame processed int nbFrame = 0; + // Get data from mic and speaker internal buffer - while((spkrAvail >= byteSize) && (micAvail >= byteSize)) { + // while((spkrAvail >= byteSize) && (micAvail >= byteSize)) { + if ((spkrAvail >= byteSize) && (micAvail >= byteSize)) { + + _debug("----------- ProcessData ----------"); // get synchronized data _spkrData->Get(_tmpSpkr, byteSize); _micData->Get(_tmpMic, byteSize); + // micFile->write((const char *)_tmpMic, byteSize); + // spkrFile->write((const char *)_tmpSpkr, byteSize); + + /* + while((computeAmplitudeLevel(_tmpSpkr, _smplPerFrame) < MIN_SIG_LEVEL) && (spkrAvail >= byteSize)) { + _spkrData->Get(_tmpSpkr, byteSize); + spkrAvail = _spkrData->AvailForGet(); + } + */ + // Processed echo cancellation performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); + // echoFile->write((const char *)_tmpOut, byteSize); + // Remove noise speex_preprocess_run(_noiseState, _tmpOut); @@ -287,6 +318,10 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int ++nbFrame; } + + + // _event.reset(); + return nbFrame * _smplPerFrame; } @@ -306,13 +341,23 @@ void EchoCancel::setSamplingRate(int smplRate) { void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData) { - for(int k = 0; k < _nbSegmentPerFrame; k++) { + // int tempmiclevel[_nbSegmentPerFrame]; + // int tempspkrlevel[_nbSegmentPerFrame]; + for(int k = 0; k < _nbSegmentPerFrame; k++) { + /* updateEchoCancel(micData+(k*_smplPerSeg), spkrData+(k*_smplPerSeg)); - _spkrLevel = getMaxAmplitude(_avgSpkrLevelHist); - _micLevel = getMaxAmplitude(_avgMicLevelHist); + _spkrLevel = getMaxAmplitude(_avgSpkrLevelHist, _spkrHistoryLength); + _micLevel = getMaxAmplitude(_avgMicLevelHist, _micHistoryLength); + + // _debug("_spkrLevel: (max): %d", _spkrLevel); + // _debug("_micLevel: (min): %d", _micLevel); + tempspkrlevel[k] = _spkrLevel; + tempmiclevel[k] = _micLevel; + */ + /* if(_micLevel >= MIN_SIG_LEVEL) { if(_spkrLevel < MIN_SIG_LEVEL) { increaseFactor(0.02); @@ -323,46 +368,73 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa else { // decreaseFactor(); _amplFactor = 0.0; + _debug("CANCELECHO AAAAAA"); } } else { if(_spkrLevel < MIN_SIG_LEVEL) { increaseFactor(0.02); + // _amplFactor = 0.0; + // _debug("CANCELECHO BBBBBBB"); } else { // decreaseFactor(); _amplFactor = 0.0; + _debug("CANCELECHO CCCCCCCC"); } } + */ + /* + if(_spkrLevel >= MIN_SIG_LEVEL) { + _amplFactor = 0.0; + // _debug("------------------------------------------ echocancel"); + } + else { + increaseFactor(0.02); + } // lowpass filtering float amplify = (_lastAmplFactor + _amplFactor) / 2; _lastAmplFactor = _amplFactor; - amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), amplify); + + */ + amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), 1.0); } + + // micLevelData->write((const char *)tempmiclevel, sizeof(int)*_nbSegmentPerFrame); + // spkrLevelData->write((const char *)tempspkrlevel, sizeof(int)*_nbSegmentPerFrame); } void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData) { - int micLvl = computeAmplitudeLevel(micData); - int spkrLvl = computeAmplitudeLevel(spkrData); + int micLvl = computeAmplitudeLevel(micData, _smplPerSeg); + int spkrLvl = computeAmplitudeLevel(spkrData, _smplPerSeg); // Add 1 to make sure we are not dividing by 0 _avgMicLevelHist[_micHistCnt++] = micLvl+1; _avgSpkrLevelHist[_spkrHistCnt++] = spkrLvl+1; + + // spkrLevelData->write((const char *)_spkrAdaptArray, _spkrAdaptSize*sizeof(int)); + // micLevelData->write((const char *)_micAdaptArray, _micAdaptSize*sizeof(int)); - if(_micHistCnt >= _historyLength) + + // _debug("micLevel: %d", micLvl); + // _debug("spkrLevel: %d", spkrLvl); + + if(_micHistCnt >= _micHistoryLength) _micHistCnt = 0; - if(_spkrHistCnt >= _historyLength) + if(_spkrHistCnt >= _spkrHistoryLength) _spkrHistCnt = 0; + /* // if adaptation done, stop here - if(_adaptDone) + // if(_adaptDone) + if(true) return; // start learning only if there is data played through speaker @@ -383,7 +455,7 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat if(_adaptCnt > _spkrAdaptSize) { int k = _adaptCnt - _spkrAdaptSize; _correlationArray[k] = performCorrelation(_spkrAdaptArray, _micAdaptArray+k, _correlationSize); - _debug("EchoCancel: Correlation: %d", _correlationArray[k]); + // _debug("EchoCancel: Correlation: %d", _correlationArray[k]); } _adaptCnt++; @@ -394,18 +466,16 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat _adaptDone = true; _amplDelayIndexOut = 0;// getMaximumIndex(_correlationArray, _correlationSize); _debug("EchoCancel: Echo length %d", _amplDelayIndexOut); - spkrLearningData->write((const char *)_spkrAdaptArray, _spkrAdaptSize*sizeof(int)); - micLearningData->write((const char *)_micAdaptArray, _micAdaptSize*sizeof(int)); } - + */ } -int EchoCancel::computeAmplitudeLevel(SFLDataFormat *data) { +int EchoCancel::computeAmplitudeLevel(SFLDataFormat *data, int size) { int level = 0; - for(int i = 0; i < _smplPerSeg; i++) { + for(int i = 0; i < size; i++) { if(data[i] >= 0.0) level += (int)data[i]; else @@ -418,11 +488,11 @@ int EchoCancel::computeAmplitudeLevel(SFLDataFormat *data) { } -int EchoCancel::getMaxAmplitude(int *data) { +int EchoCancel::getMaxAmplitude(int *data, int size) { SFLDataFormat level = 0.0; - for(int i = 0; i < _historyLength; i++) { + for(int i = 0; i < size; i++) { if(data[i] >= level) level = data[i]; } @@ -433,17 +503,19 @@ int EchoCancel::getMaxAmplitude(int *data) { void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData, float amplify) { + for(int i = 0; i < _smplPerSeg; i++) + outputData[i] = micData[i]; // Use delayed amplification factor due to sound card latency - for(int i = 0; i < _smplPerSeg; i++) { - outputData[i] = (SFLDataFormat)(((float)micData[i])*_delayLineAmplify[_amplDelayIndexOut]); - } - // do not increment amplitude array if adaptation is not done - if (_adaptDone) { + // if (_adaptDone) { + /* + if (true) { for(int i = 0; i < _smplPerSeg; i++) { outputData[i] = (SFLDataFormat)(((float)micData[i])*_delayLineAmplify[_amplDelayIndexOut]); } + _amplDelayIndexOut++; + _delayLineAmplify[_amplDelayIndexIn++] = amplify; } else { for(int i = 0; i < _smplPerSeg; i++) { @@ -452,15 +524,12 @@ void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData return; } - - _amplDelayIndexOut++; - _delayLineAmplify[_amplDelayIndexIn++] = amplify; - if(_amplDelayIndexOut >= MAX_DELAY_LINE_AMPL) _amplDelayIndexOut = 0; if(_amplDelayIndexIn >= MAX_DELAY_LINE_AMPL) _amplDelayIndexIn = 0; + */ } diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index e397f49e22..abf5ba8d22 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -31,9 +31,10 @@ #ifndef ECHOCANCEL_H #define ECHOCANCEL_H -#include "audioprocessing.h" +#include <cc++/thread.h> #include <speex/speex_preprocess.h> +#include "audioprocessing.h" #include "ringbuffer.h" // Number of ms in sec @@ -44,9 +45,11 @@ // Length of the echo tail in ms #define ECHO_LENGTH 50 +#define SPKR_LENGTH 50 +#define MIC_LENGTH 50 // Voice level threashold -#define MIN_SIG_LEVEL 1000 +#define MIN_SIG_LEVEL 75 // Delay between mic and speaker #define DELAY_AMPLIFY 60 @@ -129,12 +132,12 @@ class EchoCancel : public Algorithm { * Compute the average amplitude of the signal. * \param data must be of SEGMENT_LENGTH long. */ - int computeAmplitudeLevel(SFLDataFormat *data); + int computeAmplitudeLevel(SFLDataFormat *data, int size); /** * Return the max amplitude provided any of _avgSpkrLevelHist or _avgMicLevelHist */ - int getMaxAmplitude(int *data); + int getMaxAmplitude(int *data, int size); /** * Apply gain factor on input buffer and copy result in output buffer. @@ -211,7 +214,9 @@ class EchoCancel : public Algorithm { * Number of segment considered in history * Mainly used to compute signal level */ - int _historyLength; + int _micHistoryLength; + + int _spkrHistoryLength; /** * Current playback level @@ -294,20 +299,20 @@ class EchoCancel : public Algorithm { int _processedByte; - /* ofstream *micFile; ofstream *spkrFile; ofstream *echoFile; - */ - ofstream *micLearningData; - ofstream *spkrLearningData; + ofstream *micLevelData; + ofstream *spkrLevelData; /** * Noise reduction processing state */ SpeexPreprocessState *_noiseState; + ost::Event _event; + }; #endif diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 16cf22bb1d..1c76ef3a40 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -951,7 +951,6 @@ void PulseLayer::readFromMic (void) // echo cancellation processing int sampleready = _echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); - _debug("sampleready: %d", sampleready); // getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); if(sampleready) getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); -- GitLab From d5fc9716ac754bd4905a3f52c772a556a70a2f8b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 26 May 2010 15:59:11 -0400 Subject: [PATCH 042/197] [#1966] Add echocancellation when resampling not required --- sflphone-common/src/audio/echocancel.cpp | 39 +++++++++---------- .../src/audio/pulseaudio/audiostream.cpp | 6 +-- .../src/audio/pulseaudio/pulselayer.cpp | 13 ++++--- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index ea5441bb47..7b462b163e 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -66,7 +66,7 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), echoFile = new ofstream("echoData", ofstream::binary); spkrFile = new ofstream("spkrData", ofstream::binary); - micLevelData = new ofstream("micLevelData", ofstream::binary); + micLevelData = new ofstream("micLevelData", ofstream:binary); spkrLevelData = new ofstream("spkrLevelData", ofstream::binary); */ @@ -168,7 +168,7 @@ void EchoCancel::reset() memset(_delayLineAmplify, 0, MAX_DELAY_LINE_AMPL*sizeof(float)); _amplDelayIndexIn = 0; - _amplDelayIndexOut = 0; + _amplDelayIndexOut = 100; _adaptDone = false; _adaptStarted = false; @@ -204,6 +204,8 @@ void EchoCancel::reset() speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); _spkrStoped = true; + + _processedByte = 0; } void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) @@ -270,17 +272,15 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int int spkrAvail = _spkrData->AvailForGet(); int micAvail = _micData->AvailForGet(); - _debug("EchoCancel: speaker avail %d, mic avail %d, processed: %d", spkrAvail/320, micAvail/320, _processedByte); + _debug("EchoCancel: speaker avail %d, mic avail %d, processed: %d", spkrAvail/320, micAvail/320, _processedByte/320); // Init number of frame processed int nbFrame = 0; // Get data from mic and speaker internal buffer - // while((spkrAvail >= byteSize) && (micAvail >= byteSize)) { - if ((spkrAvail >= byteSize) && (micAvail >= byteSize)) { - - _debug("----------- ProcessData ----------"); + while((spkrAvail >= byteSize) && (micAvail >= byteSize)) { + // if ((spkrAvail >= byteSize) && (micAvail >= byteSize)) { // get synchronized data _spkrData->Get(_tmpSpkr, byteSize); @@ -318,8 +318,6 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int ++nbFrame; } - - // _event.reset(); return nbFrame * _smplPerFrame; @@ -345,7 +343,7 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa // int tempspkrlevel[_nbSegmentPerFrame]; for(int k = 0; k < _nbSegmentPerFrame; k++) { - /* + updateEchoCancel(micData+(k*_smplPerSeg), spkrData+(k*_smplPerSeg)); _spkrLevel = getMaxAmplitude(_avgSpkrLevelHist, _spkrHistoryLength); @@ -354,9 +352,9 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa // _debug("_spkrLevel: (max): %d", _spkrLevel); // _debug("_micLevel: (min): %d", _micLevel); - tempspkrlevel[k] = _spkrLevel; - tempmiclevel[k] = _micLevel; - */ + // tempspkrlevel[k] = _spkrLevel; + // tempmiclevel[k] = _micLevel; + /* if(_micLevel >= MIN_SIG_LEVEL) { if(_spkrLevel < MIN_SIG_LEVEL) { @@ -384,10 +382,10 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa } } */ - /* + + if(_spkrLevel >= MIN_SIG_LEVEL) { _amplFactor = 0.0; - // _debug("------------------------------------------ echocancel"); } else { increaseFactor(0.02); @@ -398,8 +396,8 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa _lastAmplFactor = _amplFactor; amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), amplify); - */ - amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), 1.0); + + // amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), 1.0); } @@ -503,13 +501,12 @@ int EchoCancel::getMaxAmplitude(int *data, int size) { void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData, float amplify) { - for(int i = 0; i < _smplPerSeg; i++) - outputData[i] = micData[i]; + // for(int i = 0; i < _smplPerSeg; i++) + // outputData[i] = micData[i]; // Use delayed amplification factor due to sound card latency // do not increment amplitude array if adaptation is not done // if (_adaptDone) { - /* if (true) { for(int i = 0; i < _smplPerSeg; i++) { outputData[i] = (SFLDataFormat)(((float)micData[i])*_delayLineAmplify[_amplDelayIndexOut]); @@ -529,7 +526,7 @@ void EchoCancel::amplifySignal(SFLDataFormat *micData, SFLDataFormat *outputData if(_amplDelayIndexIn >= MAX_DELAY_LINE_AMPL) _amplDelayIndexIn = 0; - */ + } diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 693551964b..4cfd47bf60 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -214,7 +214,7 @@ AudioStream::createStream (pa_context* c, std::string *deviceName) if (_streamType == PLAYBACK_STREAM) { attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->tlength = pa_usec_to_bytes (200 * PA_USEC_PER_MSEC, &_sample_spec); attributes->prebuf = 0; attributes->minreq = (uint32_t) -1; @@ -231,9 +231,9 @@ AudioStream::createStream (pa_context* c, std::string *deviceName) } else if (_streamType == CAPTURE_STREAM) { attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->tlength = pa_usec_to_bytes (200 * PA_USEC_PER_MSEC, &_sample_spec); attributes->prebuf = 0; - attributes->fragsize = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->fragsize = pa_usec_to_bytes (200 * PA_USEC_PER_MSEC, &_sample_spec); pa_threaded_mainloop_lock(_mainloop); diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 1c76ef3a40..26b2f124d2 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -857,9 +857,6 @@ void PulseLayer::writeToSpeaker (void) // to avoid such problem AudioLayer::_echoCancel->setSamplingRate(_mainBufferSampleRate); - // Copy far-end signal in echo canceller to adapt filter coefficient - AudioLayer::_echoCanceller->putData(out, byteToGet); - // test if resampling is required if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) { @@ -883,6 +880,9 @@ void PulseLayer::writeToSpeaker (void) } + // Copy far-end signal in echo canceller to adapt filter coefficient + AudioLayer::_echoCanceller->putData(out, byteToGet); + pa_xfree (out); } else { @@ -939,7 +939,7 @@ void PulseLayer::readFromMic (void) // captureFile->write ((const char *)data, nbSample*sizeof(SFLDataFormat)); - nbSample = _converter->downsampleData ( (SFLDataFormat*) data, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_up); + nbSample = _converter->downsampleData ( (SFLDataFormat *) data, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_up); // captureRsmplFile->write ((const char *)rsmpl_out, nbSample*sizeof(SFLDataFormat)); @@ -959,8 +959,11 @@ void PulseLayer::readFromMic (void) } else { + // echo cancellation processing + int sampleready = _echoCanceller->processAudio((SFLDataFormat *)data, echoCancelledMic, r); + // no resampling required - getMainBuffer()->putData ( (void*) data, r, 100); + getMainBuffer()->putData (echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); } -- GitLab From 303fde7e0777f7e4aaa471de3b2e50f3b16f2760 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 26 May 2010 16:28:45 -0400 Subject: [PATCH 043/197] [#1966] Add echocancel in non-resampled alsa capture process --- sflphone-common/src/audio/alsa/alsalayer.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index 878190a73d..0b63876fdb 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -971,10 +971,7 @@ void AlsaLayer::audioCallback(void) // TODO: Audio processing should be performed inside mainbuffer // to avoid such problem - AudioLayer::_echoCancel->setSamplingRate(_mainBufferSampleRate); - - // Copy far-end signal in echo canceller to adapt filter coefficient - AudioLayer::_echoCanceller->putData(out, toGet); + AudioLayer::_echoCancel->setSamplingRate(_mainBufferSampleRate); if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) { @@ -999,6 +996,9 @@ void AlsaLayer::audioCallback(void) } + // Copy far-end signal in echo canceller to adapt filter coefficient + AudioLayer::_echoCanceller->putData(out, toGet); + } else { if (!tone && !file_tone) { @@ -1099,7 +1099,9 @@ void AlsaLayer::audioCallback(void) } else { - getMainBuffer()->putData (in, toPut, 100); + int sampleready = AudioLayer::_echoCanceller->processAudio(in, echoCancelledMic, toPut); + + getMainBuffer()->putData (echoCancelledMic, sampleready*sizeof(SFLDataFormat), 100); } } -- GitLab From 5413ba6ae263ccf5800a04783665a54333d4430c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 26 May 2010 18:09:50 -0400 Subject: [PATCH 044/197] [#3443] Open audio layer using mainbuffer internal sampling rate --- sflphone-common/src/audio/alsa/alsalayer.cpp | 2 ++ sflphone-common/src/audio/mainbuffer.cpp | 2 +- sflphone-common/src/managerimpl.cpp | 13 +++++-------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index 0b63876fdb..a508e23280 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -472,6 +472,8 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) _debugAlsa ("Audio: Error: Cannot set sample rate (%s)", snd_strerror (err)); return false; } + else + _debug("Audio: Set audio rate to %d", rate); if (dir!= 0) { _debugAlsa ("Audio: Error: (%i) The choosen rate %d Hz is not supported by your hardware.Using %d Hz instead. ",type ,rate, exact_ivalue); diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 278c620de3..c47321a2f0 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -32,7 +32,7 @@ #include "mainbuffer.h" -MainBuffer::MainBuffer() : _internalSamplingRate (0) +MainBuffer::MainBuffer() : _internalSamplingRate (8000) { mixBuffer = new SFLDataFormat[STATIC_BUFSIZE]; } diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index e709a4e04d..836685cbc8 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2777,13 +2777,8 @@ void ManagerImpl::selectAudioDriver (void) { numCardIn = getConfigInt(AUDIO, ALSA_CARD_ID_IN); numCardOut = getConfigInt(AUDIO, ALSA_CARD_ID_OUT); numCardRing = getConfigInt(AUDIO, ALSA_CARD_ID_RING); - - sampleRate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE); - - if (sampleRate <= 0 || sampleRate > 48000) { - sampleRate = 44100; - } - + // sampleRate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE); + sampleRate = _mainBuffer.getInternalSamplingRate(); frameSize = getConfigInt(AUDIO, ALSA_FRAME_SIZE); /* Only for the ALSA layer, we check the sound card information */ @@ -2815,6 +2810,7 @@ void ManagerImpl::selectAudioDriver (void) { /* Open the audio devices */ _audiodriver->openDevice(numCardIn, numCardOut, numCardRing, sampleRate, frameSize, SFL_PCM_BOTH, alsaPlugin); + /* Notify the error if there is one */ if (_audiodriver -> getErrorMessage() != -1) @@ -2833,7 +2829,8 @@ void ManagerImpl::switchAudioManager (void) { type = _audiodriver->getLayerType(); - samplerate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE); + // samplerate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE); + samplerate = _mainBuffer.getInternalSamplingRate(); framesize = getConfigInt(AUDIO, ALSA_FRAME_SIZE); _debug ("Mnager: samplerate: %i, framesize %i\n", samplerate, framesize); -- GitLab From b2497fed57094d5305393f34cea3ed82abe9b0b0 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 27 May 2010 10:40:12 -0400 Subject: [PATCH 045/197] [#1966] Very good echo canceller settings --- sflphone-common/src/audio/echocancel.cpp | 98 +++++++----------------- sflphone-common/src/audio/echocancel.h | 8 +- 2 files changed, 30 insertions(+), 76 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 7b462b163e..23fa9a3cee 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -32,8 +32,6 @@ // #include <fstream> -#define MICDELAY 32000 - EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _frameLength(frameLength), _smplPerFrame(0), @@ -61,14 +59,12 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), { _debug("EchoCancel: Instantiate echo canceller"); - /* micFile = new ofstream("micData", ofstream::binary); echoFile = new ofstream("echoData", ofstream::binary); spkrFile = new ofstream("spkrData", ofstream::binary); - micLevelData = new ofstream("micLevelData", ofstream:binary); + micLevelData = new ofstream("micLevelData", ofstream::binary); spkrLevelData = new ofstream("spkrLevelData", ofstream::binary); - */ _micData = new RingBuffer(50000); _spkrData = new RingBuffer(50000); @@ -87,7 +83,6 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _spkrHistoryLength = SPKR_LENGTH / SEGMENT_LENGTH; _nbSegmentPerFrame = _frameLength / SEGMENT_LENGTH; - _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); int i=1; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); @@ -97,9 +92,9 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i); i=0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i); - float f=.0; + float f=0.0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); - f=.0; + f=0.0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); memset(_avgSpkrLevelHist, 0, BUFF_SIZE*sizeof(int)); @@ -126,7 +121,6 @@ EchoCancel::~EchoCancel() speex_preprocess_state_destroy(_noiseState); - /* micFile->close(); spkrFile->close(); echoFile->close(); @@ -139,7 +133,7 @@ EchoCancel::~EchoCancel() spkrLevelData->close(); delete micLevelData; delete spkrLevelData; - */ + } @@ -168,7 +162,7 @@ void EchoCancel::reset() memset(_delayLineAmplify, 0, MAX_DELAY_LINE_AMPL*sizeof(float)); _amplDelayIndexIn = 0; - _amplDelayIndexOut = 100; + _amplDelayIndexOut = ECHO_LENGTH / SEGMENT_LENGTH; _adaptDone = false; _adaptStarted = false; @@ -180,13 +174,6 @@ void EchoCancel::reset() _spkrData->flushAll(); _spkrDataOut->flushAll(); - /* - SFLDataFormat delay[MICDELAY]; - memset(delay, 0, sizeof(SFLDataFormat)); - - _micData->Put(delay, MICDELAY*2); - */ - speex_preprocess_state_destroy(_noiseState); _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); @@ -286,23 +273,16 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int _spkrData->Get(_tmpSpkr, byteSize); _micData->Get(_tmpMic, byteSize); - // micFile->write((const char *)_tmpMic, byteSize); - // spkrFile->write((const char *)_tmpSpkr, byteSize); + micFile->write((const char *)_tmpMic, byteSize); + spkrFile->write((const char *)_tmpSpkr, byteSize); - /* - while((computeAmplitudeLevel(_tmpSpkr, _smplPerFrame) < MIN_SIG_LEVEL) && (spkrAvail >= byteSize)) { - _spkrData->Get(_tmpSpkr, byteSize); - spkrAvail = _spkrData->AvailForGet(); - } - */ + // Remove noise + speex_preprocess_run(_noiseState, _tmpMic); // Processed echo cancellation performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); - // echoFile->write((const char *)_tmpOut, byteSize); - - // Remove noise - speex_preprocess_run(_noiseState, _tmpOut); + echoFile->write((const char *)_tmpOut, byteSize); bcopy(_tmpOut, outputData+(nbFrame*_smplPerFrame), byteSize); @@ -339,8 +319,8 @@ void EchoCancel::setSamplingRate(int smplRate) { void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData) { - // int tempmiclevel[_nbSegmentPerFrame]; - // int tempspkrlevel[_nbSegmentPerFrame]; + int tempmiclevel[_nbSegmentPerFrame]; + int tempspkrlevel[_nbSegmentPerFrame]; for(int k = 0; k < _nbSegmentPerFrame; k++) { @@ -352,43 +332,20 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa // _debug("_spkrLevel: (max): %d", _spkrLevel); // _debug("_micLevel: (min): %d", _micLevel); - // tempspkrlevel[k] = _spkrLevel; - // tempmiclevel[k] = _micLevel; - - /* - if(_micLevel >= MIN_SIG_LEVEL) { - if(_spkrLevel < MIN_SIG_LEVEL) { - increaseFactor(0.02); - } - else if(_micLevel > _spkrLevel) { - increaseFactor(0.05); - } - else { - // decreaseFactor(); - _amplFactor = 0.0; - _debug("CANCELECHO AAAAAA"); - } - } - else { - if(_spkrLevel < MIN_SIG_LEVEL) { - increaseFactor(0.02); - // _amplFactor = 0.0; - // _debug("CANCELECHO BBBBBBB"); - } - else { - // decreaseFactor(); - _amplFactor = 0.0; - _debug("CANCELECHO CCCCCCCC"); - } - } - */ - + tempspkrlevel[k] = _spkrLevel; + tempmiclevel[k] = _micLevel; if(_spkrLevel >= MIN_SIG_LEVEL) { - _amplFactor = 0.0; + if(_micLevel > _spkrLevel) { + increaseFactor(0.2); + // _amplFactor = 0.0; + } + else { + _amplFactor = 0.0; + } } else { - increaseFactor(0.02); + increaseFactor(0.01); } // lowpass filtering @@ -401,24 +358,21 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa } - // micLevelData->write((const char *)tempmiclevel, sizeof(int)*_nbSegmentPerFrame); - // spkrLevelData->write((const char *)tempspkrlevel, sizeof(int)*_nbSegmentPerFrame); + micLevelData->write((const char *)tempmiclevel, sizeof(int)*_nbSegmentPerFrame); + spkrLevelData->write((const char *)tempspkrlevel, sizeof(int)*_nbSegmentPerFrame); } void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData) { - int micLvl = computeAmplitudeLevel(micData, _smplPerSeg); + // TODO: we should find a way to normalize signal at this point + int micLvl = computeAmplitudeLevel(micData, _smplPerSeg) / 10; int spkrLvl = computeAmplitudeLevel(spkrData, _smplPerSeg); // Add 1 to make sure we are not dividing by 0 _avgMicLevelHist[_micHistCnt++] = micLvl+1; _avgSpkrLevelHist[_spkrHistCnt++] = spkrLvl+1; - - // spkrLevelData->write((const char *)_spkrAdaptArray, _spkrAdaptSize*sizeof(int)); - // micLevelData->write((const char *)_micAdaptArray, _micAdaptSize*sizeof(int)); - // _debug("micLevel: %d", micLvl); // _debug("spkrLevel: %d", spkrLvl); diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index abf5ba8d22..fdc0792c0f 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -44,15 +44,15 @@ #define SEGMENT_LENGTH 10 // Length of the echo tail in ms -#define ECHO_LENGTH 50 -#define SPKR_LENGTH 50 -#define MIC_LENGTH 50 +#define ECHO_LENGTH 1000 +#define SPKR_LENGTH 80 +#define MIC_LENGTH 80 // Voice level threashold #define MIN_SIG_LEVEL 75 // Delay between mic and speaker -#define DELAY_AMPLIFY 60 +// #define DELAY_AMPLIFY 60 // maximum in segment size (segment are SEGMENT_LENGTH long) #define MAX_DELAY_LINE_AMPL 100 // 1 sec -- GitLab From db945995adc98273b593678980125c53d3490b8c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 27 May 2010 12:23:41 -0400 Subject: [PATCH 046/197] [#959] Use -32 dB noise attenuation in speex noise canceller (default -15 dB) --- sflphone-common/src/audio/echocancel.cpp | 46 +++++++++--------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 23fa9a3cee..a00385e8bd 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -59,12 +59,14 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), { _debug("EchoCancel: Instantiate echo canceller"); + /* micFile = new ofstream("micData", ofstream::binary); echoFile = new ofstream("echoData", ofstream::binary); spkrFile = new ofstream("spkrData", ofstream::binary); micLevelData = new ofstream("micLevelData", ofstream::binary); spkrLevelData = new ofstream("spkrLevelData", ofstream::binary); + */ _micData = new RingBuffer(50000); _spkrData = new RingBuffer(50000); @@ -121,6 +123,7 @@ EchoCancel::~EchoCancel() speex_preprocess_state_destroy(_noiseState); + /* micFile->close(); spkrFile->close(); echoFile->close(); @@ -133,7 +136,7 @@ EchoCancel::~EchoCancel() spkrLevelData->close(); delete micLevelData; delete spkrLevelData; - + */ } @@ -179,6 +182,8 @@ void EchoCancel::reset() _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); int i=1; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); + i=-30; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &i); i=0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC, &i); i=8000; @@ -197,8 +202,6 @@ void EchoCancel::reset() void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { - // std::cout << "putData nbBytes: " << nbBytes << std::endl; - if(_spkrStoped) { _debug("EchoCancel: Flush data"); @@ -209,16 +212,10 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) // Put data in speaker ring buffer _spkrData->Put(inputData, nbBytes); - _spkrDataOut->Put(inputData, nbBytes); - - // _debug("********************** signal event *****************"); - // _event.signal(); - } int EchoCancel::getData(SFLDataFormat *outputData) { - // int availForGet = _spkrData->AvailForGet(); int copied = 0; @@ -239,12 +236,6 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int return 0; } - // _debug("****************************** wait signal ********************************"); - - // _event.wait(); - - // _debug("****************************** process ************************ ********"); - int byteSize = _smplPerFrame*sizeof(SFLDataFormat); // init temporary buffers @@ -267,30 +258,27 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int // Get data from mic and speaker internal buffer while((spkrAvail >= byteSize) && (micAvail >= byteSize)) { - // if ((spkrAvail >= byteSize) && (micAvail >= byteSize)) { // get synchronized data _spkrData->Get(_tmpSpkr, byteSize); _micData->Get(_tmpMic, byteSize); - - micFile->write((const char *)_tmpMic, byteSize); - spkrFile->write((const char *)_tmpSpkr, byteSize); - + + // micFile->write((const char *)_tmpMic, byteSize); + // spkrFile->write((const char *)_tmpSpkr, byteSize); + // Remove noise speex_preprocess_run(_noiseState, _tmpMic); // Processed echo cancellation performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); - echoFile->write((const char *)_tmpOut, byteSize); + // echoFile->write((const char *)_tmpOut, byteSize); bcopy(_tmpOut, outputData+(nbFrame*_smplPerFrame), byteSize); // used to sync with speaker _processedByte += byteSize; - // echoFile->write ((const char *)_tmpOut, byteSize); - spkrAvail = _spkrData->AvailForGet(); micAvail = _micData->AvailForGet(); @@ -319,8 +307,8 @@ void EchoCancel::setSamplingRate(int smplRate) { void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData) { - int tempmiclevel[_nbSegmentPerFrame]; - int tempspkrlevel[_nbSegmentPerFrame]; + // int tempmiclevel[_nbSegmentPerFrame]; + // int tempspkrlevel[_nbSegmentPerFrame]; for(int k = 0; k < _nbSegmentPerFrame; k++) { @@ -332,8 +320,8 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa // _debug("_spkrLevel: (max): %d", _spkrLevel); // _debug("_micLevel: (min): %d", _micLevel); - tempspkrlevel[k] = _spkrLevel; - tempmiclevel[k] = _micLevel; + // tempspkrlevel[k] = _spkrLevel; + // tempmiclevel[k] = _micLevel; if(_spkrLevel >= MIN_SIG_LEVEL) { if(_micLevel > _spkrLevel) { @@ -358,8 +346,8 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa } - micLevelData->write((const char *)tempmiclevel, sizeof(int)*_nbSegmentPerFrame); - spkrLevelData->write((const char *)tempspkrlevel, sizeof(int)*_nbSegmentPerFrame); + // micLevelData->write((const char *)tempmiclevel, sizeof(int)*_nbSegmentPerFrame); + // spkrLevelData->write((const char *)tempspkrlevel, sizeof(int)*_nbSegmentPerFrame); } -- GitLab From d80e9a30cc641a121f373c85a348e6d8ca0c284b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 27 May 2010 12:54:26 -0400 Subject: [PATCH 047/197] [#3443] Init echo canceller using audio layer sampling rate --- sflphone-common/src/audio/pulseaudio/pulselayer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 26b2f124d2..45f872608b 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -445,7 +445,7 @@ bool PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int indexR _converter = new SamplerateConverter (_audioSampleRate, 1000); // Instantiate the algorithm - AudioLayer::_echoCancel = new EchoCancel(); + AudioLayer::_echoCancel = new EchoCancel(_audioSampleRate, _frameSize); AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); AudioLayer::_dcblocker = new DcBlocker(); -- GitLab From a38ea12965a12c7d8864ed9aa50773c52060e9cd Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 27 May 2010 17:36:32 -0400 Subject: [PATCH 048/197] [#3443] Add change sampling rate notification in managerimpl --- sflphone-common/src/audio/echocancel.cpp | 4 +- sflphone-common/src/audio/mainbuffer.cpp | 3 + sflphone-common/src/managerimpl.cpp | 77 ++++++++++++++++++++++++ sflphone-common/src/managerimpl.h | 2 + 4 files changed, 83 insertions(+), 3 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index a00385e8bd..b951e35370 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -144,7 +144,6 @@ EchoCancel::~EchoCancel() void EchoCancel::reset() { _debug("EchoCancel: Reset internal state, Sampling rate %d, Frame size %d", _samplingRate, _smplPerFrame); - _debug("SIZEOF INT %d", sizeof(int)); memset(_avgSpkrLevelHist, 0, BUFF_SIZE*sizeof(int)); memset(_avgMicLevelHist, 0, BUFF_SIZE*sizeof(int)); @@ -250,12 +249,11 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int int spkrAvail = _spkrData->AvailForGet(); int micAvail = _micData->AvailForGet(); - _debug("EchoCancel: speaker avail %d, mic avail %d, processed: %d", spkrAvail/320, micAvail/320, _processedByte/320); + // _debug("EchoCancel: speaker avail %d, mic avail %d, processed: %d", spkrAvail/320, micAvail/320, _processedByte/320); // Init number of frame processed int nbFrame = 0; - // Get data from mic and speaker internal buffer while((spkrAvail >= byteSize) && (micAvail >= byteSize)) { diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index c47321a2f0..901d68cc76 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -31,6 +31,7 @@ #include "mainbuffer.h" +#include "manager.h" MainBuffer::MainBuffer() : _internalSamplingRate (8000) { @@ -55,6 +56,8 @@ void MainBuffer::setInternalSamplingRate (int sr) flushAllBuffers(); + Manager::instance().audioSamplingRateChanged(); + } } diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 836685cbc8..89b038ef30 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2895,6 +2895,83 @@ void ManagerImpl::switchAudioManager (void) { // } } +void ManagerImpl::audioSamplingRateChanged (void) { + + int type, samplerate, framesize, numCardIn, numCardOut, numCardRing; + std::string alsaPlugin; + + _debug ("Manager: Audio Sampling Rate"); + + if (!_audiodriver) + return; + + type = _audiodriver->getLayerType(); + + samplerate = _mainBuffer.getInternalSamplingRate(); + framesize = getConfigInt(AUDIO, ALSA_FRAME_SIZE); + + _debug ("Mnager: samplerate: %i, framesize %i\n", samplerate, framesize); + + alsaPlugin = getConfigString(AUDIO, ALSA_PLUGIN); + + numCardIn = getConfigInt(AUDIO, ALSA_CARD_ID_IN); + numCardOut = getConfigInt(AUDIO, ALSA_CARD_ID_OUT); + numCardRing = getConfigInt(AUDIO, ALSA_CARD_ID_RING); + + _debug ("Manager: Deleting current layer... "); + + // ost::MutexLock lock (*getAudioLayerMutex()); + getAudioLayerMutex()->enter(); + + // _audiodriver->closeLayer(); + delete _audiodriver; + + _audiodriver = NULL; + + switch (type) { + + case PULSEAUDIO: + _debug ("Manager: Creating Pulseaudio layer..."); + _audiodriver = new PulseLayer(this); + _audiodriver->setMainBuffer(&_mainBuffer); + break; + + case ALSA: + _debug ("Manager: Creating ALSA layer..."); + _audiodriver = new AlsaLayer(this); + _audiodriver->setMainBuffer(&_mainBuffer); + break; + + default: + _warn("Manager: Error: audio layer unknown"); + break; + } + + _audiodriver->setErrorMessage(-1); + + _audiodriver->openDevice(numCardIn, numCardOut, numCardRing, samplerate, framesize, + SFL_PCM_BOTH, alsaPlugin); + + if (_audiodriver -> getErrorMessage() != -1) + notifyErrClient(_audiodriver -> getErrorMessage()); + + _debug ("Manager: Current device: %i ", type); + _debug ("Manager: Has current call: %i ", hasCurrentCall()); + + if (hasCurrentCall()) + _audiodriver->startStream(); + + // ost::MutexLock unlock (*getAudioLayerMutex()); + getAudioLayerMutex()->leave(); + + // need to stop audio streams if there is currently no call + // if ( (type != PULSEAUDIO) && (!hasCurrentCall())) { + // _debug("There is currently a call!!"); + // _audiodriver->stopStream(); + + // } +} + /** * Init the volume for speakers/micro from 0 to 100 value * Initialization: Main Thread diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index 09acea4fd8..8a85ae3277 100644 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -788,6 +788,8 @@ class ManagerImpl { void switchAudioManager( void ); + void audioSamplingRateChanged( void ); + /** * Get the desktop mail notification level * @return int The mail notification level -- GitLab From 4b951b37ef85bb2f03eaeb64efb60e9ac8ee37de Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 27 May 2010 17:37:05 -0400 Subject: [PATCH 049/197] [#3443] Fix G722 codec timestamp incrementation --- .../src/audio/audiortp/AudioRtpSession.h | 135 +++++++++++------- 1 file changed, 82 insertions(+), 53 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index cab3a977c6..7ec80ebc86 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -50,6 +50,9 @@ #include <ccrtp/rtp.h> #include <cc++/numbers.h> // ost::Time +// Frequency (in packet number) +#define RTP_TIMESTAMP_RESET_FREQ 100 + namespace sfl { static const int schedulingTimeout = 100000; @@ -96,11 +99,11 @@ namespace sfl { void putDtmfEvent(int digit); /** - * Send DTMF over RTP (RFC2833). The timestamp and sequence number must be - * incremented as if it was microphone audio. This function change the payload type of the rtp session, - * send the appropriate DTMF digit using this payload, discard coresponding data from mainbuffer and get - * back the codec payload for further audio processing. - */ + * Send DTMF over RTP (RFC2833). The timestamp and sequence number must be + * incremented as if it was microphone audio. This function change the payload type of the rtp session, + * send the appropriate DTMF digit using this payload, discard coresponding data from mainbuffer and get + * back the codec payload for further audio processing. + */ void sendDtmfEvent(sfl::DtmfEvent *dtmf); inline float computeCodecFrameSize (int codecSamplePerFrame, int codecClockRate) { @@ -206,6 +209,17 @@ namespace sfl { */ int _timestamp; + /** + * Timestamp incrementation value based on codec period length (framesize) + * except for G722 which require a 8 kHz incrementation. + */ + int _timestampIncrement; + + /** + * Timestamp reset freqeuncy specified in number of packet sent + */ + short _timestampCount; + /** * Time counter used to trigger incoming call notification */ @@ -215,7 +229,7 @@ namespace sfl { * EventQueue used to store list of DTMF- */ EventQueue _eventQueue; - + protected: SIPCall * _ca; }; @@ -238,6 +252,8 @@ namespace sfl { _manager(manager), _converterSamplingRate(0), _timestamp(0), + _timestampIncrement(0), + _timestampCount(0), _countNotificationTime(0), _ca (sipcall) { @@ -329,18 +345,26 @@ namespace sfl { _codecSampleRate = _audiocodec->getClockRate(); _codecFrameSize = _audiocodec->getFrameSize(); + // G722 requires timestamp to be incremented at 8 kHz + if (_audiocodec->getPayload() == 9) + _timestampIncrement = 160; + else + _timestampIncrement = _codecFrameSize; + + _debug("RTP: Codec sampling rate: %d", _codecSampleRate); _debug("RTP: Codec frame size: %d", _codecFrameSize); + _debug("RTP: RTP timestamp increment: %d", _timestampIncrement); - //TODO: figure out why this is necessary. + // Even if specified as a 16 kHz codec, G722 requires rtp sending rate to be 8 kHz if (_audiocodec->getPayload() == 9) { - _debug ("RTP: Setting payload format to G722"); + _debug ("RTP: Setting G722 payload format"); static_cast<D*>(this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate())); } else if (_audiocodec->hasDynamicPayload()) { - _debug ("RTP: Setting a dynamic payload format"); + _debug ("RTP: Setting dynamic payload format"); static_cast<D*>(this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate())); } else if (!_audiocodec->hasDynamicPayload() && _audiocodec->getPayload() != 9) { - _debug ("RTP: Setting a static payload format"); + _debug ("RTP: Setting static payload format"); static_cast<D*>(this)->setPayloadFormat (ost::StaticPayloadFormat ( (ost::StaticPayloadType) _audiocodec->getPayload())); } } @@ -412,44 +436,44 @@ namespace sfl { template<typename D> void AudioRtpSession<D>::sendDtmfEvent(sfl::DtmfEvent *dtmf) { - _debug("RTP: Send Dtmf %d", _eventQueue.size()); - - _timestamp += 160; - - // discard equivalent size of audio - processDataEncode(); - - // change Payload type for DTMF payload - static_cast<D*>(this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) 101, 8000)); + _debug("RTP: Send Dtmf %d", _eventQueue.size()); - // Set marker in case this is a new Event - if(dtmf->newevent) - static_cast<D*>(this)->setMark (true); + _timestamp += 160; - static_cast<D*>(this)->putData (_timestamp, (const unsigned char*)(&(dtmf->payload)), sizeof(ost::RTPPacket::RFC2833Payload)); + // discard equivalent size of audio + processDataEncode(); - // This is no more a new event - if(dtmf->newevent) { - dtmf->newevent = false; - static_cast<D*>(this)->setMark (false); - } - - // get back the payload to audio - static_cast<D*>(this)->setPayloadFormat (ost::StaticPayloadFormat ( (ost::StaticPayloadType) _audiocodec->getPayload())); - - // decrease length remaining to process for this event - dtmf->length -= 160; + // change Payload type for DTMF payload + static_cast<D*>(this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) 101, 8000)); + + // Set marker in case this is a new Event + if(dtmf->newevent) + static_cast<D*>(this)->setMark (true); + + static_cast<D*>(this)->putData (_timestamp, (const unsigned char*)(&(dtmf->payload)), sizeof(ost::RTPPacket::RFC2833Payload)); - dtmf->payload.duration += 1; + // This is no more a new event + if(dtmf->newevent) { + dtmf->newevent = false; + static_cast<D*>(this)->setMark (false); + } - // next packet is going to be the last one - if((dtmf->length - 160) < 160) - dtmf->payload.ebit = true; + // get back the payload to audio + static_cast<D*>(this)->setPayloadFormat (ost::StaticPayloadFormat ( (ost::StaticPayloadType) _audiocodec->getPayload())); - if(dtmf->length < 160) { - delete dtmf; - _eventQueue.pop_front(); - } + // decrease length remaining to process for this event + dtmf->length -= 160; + + dtmf->payload.duration += 1; + + // next packet is going to be the last one + if((dtmf->length - 160) < 160) + dtmf->payload.ebit = true; + + if(dtmf->length < 160) { + delete dtmf; + _eventQueue.pop_front(); + } } template <typename D> @@ -567,7 +591,7 @@ namespace sfl { // 4. send it // Increment timestamp for outgoing packet - _timestamp += _codecFrameSize; + _timestamp += _timestampIncrement; if (!_audiolayer) { _debug ("No audiolayer available for MIC"); @@ -643,11 +667,11 @@ namespace sfl { int sessionWaiting; int threadSleep = 0; - if (_codecSampleRate != 0){ - threadSleep = (_codecFrameSize * 1000) / _codecSampleRate; - } + if (_codecSampleRate != 0){ + threadSleep = (_codecFrameSize * 1000) / _codecSampleRate; + } else { - threadSleep = _layerFrameSize; + threadSleep = _layerFrameSize; } TimerPort::setTimer (threadSleep); @@ -668,15 +692,20 @@ namespace sfl { while (!testCancel()) { - // ost::MutexLock lock(*(_manager->getAudioLayerMutex())); - - _manager->getAudioLayerMutex()->enter(); + // Reset timestamp to make sure the timing information are up to date + if(_timestampCount > RTP_TIMESTAMP_RESET_FREQ) { + _timestamp = static_cast<D*>(this)->getCurrentTimestamp(); + _timestampCount = 0; + } + _timestampCount++; - // converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate(); - _converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate(); + + _manager->getAudioLayerMutex()->enter(); + // converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate(); + _converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate(); - sessionWaiting = static_cast<D*>(this)->isWaiting(); + sessionWaiting = static_cast<D*>(this)->isWaiting(); // Send session if(_eventQueue.size() > 0) { -- GitLab From 34dd2ffe225bfe5121ff587f69510ca407cc7c08 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 27 May 2010 18:26:45 -0400 Subject: [PATCH 050/197] [#3443] Reset audio sampling rate fo filetone, and DTMF generator --- sflphone-common/src/eventthread.cpp | 2 +- sflphone-common/src/managerimpl.cpp | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/sflphone-common/src/eventthread.cpp b/sflphone-common/src/eventthread.cpp index cc16b5e77f..de22502d67 100644 --- a/sflphone-common/src/eventthread.cpp +++ b/sflphone-common/src/eventthread.cpp @@ -65,7 +65,7 @@ void AudioThread::run (void) { while (!testCancel()) { _alsa->audioCallback(); - Thread::sleep (20); + Thread::sleep (5); } } diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 89b038ef30..f302b6b0c0 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -131,7 +131,7 @@ void ManagerImpl::init () { AudioLayer *audiolayer = getAudioDriver(); - if (audiolayer != 0) { + if (audiolayer) { unsigned int sampleRate = audiolayer->getSampleRate(); _debugInit ("Manager: Load telephone tone"); @@ -142,9 +142,6 @@ void ManagerImpl::init () { _dtmfKey = new DTMF(sampleRate); } - if (audiolayer == 0) - audiolayer->stopStream(); - // Load the history _history->load_history(getConfigInt(PREFERENCES, CONFIG_HISTORY_LIMIT)); } @@ -2958,6 +2955,22 @@ void ManagerImpl::audioSamplingRateChanged (void) { _debug ("Manager: Current device: %i ", type); _debug ("Manager: Has current call: %i ", hasCurrentCall()); + if (_audiodriver) { + unsigned int sampleRate = _audiodriver->getSampleRate(); + + delete _telephoneTone; + + _debugInit ("Manager: Load telephone tone"); + std::string country = getConfigString(PREFERENCES, ZONE_TONE); + _telephoneTone = new TelephoneTone(country, sampleRate); + + + delete _dtmfKey; + + _debugInit ("Manager: Loading DTMF key"); + _dtmfKey = new DTMF(sampleRate); + } + if (hasCurrentCall()) _audiodriver->startStream(); -- GitLab From c484694fc75ae155bee3aa92f03ed258caced8d9 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 28 May 2010 15:45:37 -0400 Subject: [PATCH 051/197] [#1966] Make echo canceller and noise suppressor optional --- sflphone-client-gnome/src/config/audioconf.c | 93 +++++++++++++++---- .../dbus/configurationmanager-introspec.xml | 30 ++++++ sflphone-client-gnome/src/dbus/dbus.c | 66 +++++++++++++ sflphone-client-gnome/src/dbus/dbus.h | 26 ++++++ sflphone-common/src/audio/alsa/alsalayer.cpp | 33 +++++-- sflphone-common/src/audio/alsa/alsalayer.h | 24 +++++ sflphone-common/src/audio/audiolayer.h | 28 ++++++ sflphone-common/src/audio/echocancel.cpp | 16 ++-- sflphone-common/src/audio/echocancel.h | 18 +++- sflphone-common/src/audio/mainbuffer.cpp | 6 +- .../src/audio/pulseaudio/pulselayer.cpp | 22 +++++ .../src/audio/pulseaudio/pulselayer.h | 24 +++++ .../dbus/configurationmanager-introspec.xml | 30 ++++++ .../src/dbus/configurationmanager.cpp | 16 ++++ .../src/dbus/configurationmanager.h | 4 + sflphone-common/src/managerimpl.cpp | 68 ++++++++++++++ sflphone-common/src/managerimpl.h | 10 +- 17 files changed, 479 insertions(+), 35 deletions(-) diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c index 29ec95f57b..bab96d27e7 100644 --- a/sflphone-client-gnome/src/config/audioconf.c +++ b/sflphone-client-gnome/src/config/audioconf.c @@ -47,6 +47,7 @@ GtkWidget *codecTreeView; // View used instead of store to get access to select GtkWidget *pulse; GtkWidget *alsabox; GtkWidget *alsa_conf; +GtkWidget *noisebox; GtkWidget *noise_conf; // Codec properties ID @@ -776,6 +777,48 @@ select_audio_manager( void ) } +void +active_echo_cancel(void) { + + gchar* state; + gchar* newstate; + + DEBUG("Audio: Active echo cancel clicked"); + state = dbus_get_echo_cancel_state(); + + DEBUG("Audio: Get echo cancel state %s", state); + + if(strcmp(state, "enabled") == 0) + newstate = "disabled"; + else + newstate = "enabled"; + + dbus_set_echo_cancel_state(newstate); + +} + + +void +active_noise_suppress(void) { + + gchar *state; + gchar *newstate; + + DEBUG("Audio: Active noise suppress clicked"); + state = dbus_get_noise_suppress_state(); + + DEBUG("Audio: Get echo cancel state %s", state); + + if(strcmp(state, "enabled") == 0) + newstate = "disabled"; + else + newstate = "enabled"; + + dbus_set_noise_suppress_state(newstate); + + +} + GtkWidget* alsa_box() { GtkWidget *ret; @@ -886,30 +929,37 @@ GtkWidget* alsa_box() GtkWidget* noise_box() { GtkWidget *ret; - GtkWidget *enableVoiceActivity; + GtkWidget *enableEchoCancel; GtkWidget *enableNoiseReduction; + gboolean echocancelActive, noisesuppressActive; + gchar *state; - // check button to enable ringtones ret = gtk_hbox_new( TRUE , 1); + + enableEchoCancel = gtk_check_button_new_with_mnemonic( _("_Echo Suppression")); + state = dbus_get_echo_cancel_state(); + echocancelActive = FALSE; + if(strcmp(state, "enabled") == 0) + echocancelActive = TRUE; + else + echocancelActive = FALSE; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableEchoCancel), echocancelActive); + g_signal_connect(G_OBJECT(enableEchoCancel), "clicked", active_echo_cancel, NULL); - enableVoiceActivity = gtk_check_button_new_with_mnemonic( _("_Voice Activity Detection")); - //TODO Use the value from D-BUS - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(enableVoiceActivity), FALSE ); - gtk_box_pack_start( GTK_BOX(ret) , enableVoiceActivity , TRUE , TRUE , 1); - //TODO Enable it - //gtk_widget_set_sensitive(GTK_WIDGET(noise_conf), FALSE); - //TODO Add a callback function - //g_signal_connect(G_OBJECT( enableNoiseReduction) , "clicked" , NULL , NULL); + gtk_box_pack_start( GTK_BOX(ret), enableEchoCancel, TRUE , TRUE , 1); - enableNoiseReduction = gtk_check_button_new_with_mnemonic( _("_Noise Reduction (Narrow-Band Companding)")); - //TODO Use the value from D-BUS - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(enableNoiseReduction), FALSE ); + enableNoiseReduction = gtk_check_button_new_with_mnemonic( _("_Noise Reduction")); + state = dbus_get_noise_suppress_state(); + noisesuppressActive = FALSE; + if(strcmp(state, "enabled") == 0) + noisesuppressActive = TRUE; + else + noisesuppressActive = FALSE; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableNoiseReduction), noisesuppressActive); gtk_box_pack_start( GTK_BOX(ret) , enableNoiseReduction , TRUE , TRUE , 1); - //TODO Enable it - // gtk_widget_set_sensitive(GTK_WIDGET(noise_conf), FALSE); - //TODO Add a callback function - //g_signal_connect(G_OBJECT( enableNoiseReduction) , "clicked" , NULL , NULL); + + g_signal_connect(G_OBJECT(enableNoiseReduction), "clicked", active_noise_suppress, NULL); return ret; } @@ -1017,6 +1067,15 @@ GtkWidget* create_audio_configuration() gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( fileChooser ) , filter); gtk_table_attach ( GTK_TABLE( table ), fileChooser, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gnome_main_section_new (_("Voice enhancement settings"), &noise_conf); + gtk_box_pack_start(GTK_BOX(ret), noise_conf, FALSE, FALSE, 0); + gtk_widget_show( noise_conf ); + + // Box for the voice enhancement configuration + noisebox = noise_box(); + gtk_container_add( GTK_CONTAINER(noise_conf) , noisebox ); + + gtk_widget_show_all(ret); if(!pulse_audio) { diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml index 8a0c59c8b2..f75d22c662 100644 --- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml +++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml @@ -574,6 +574,36 @@ </arg> </method> + <method name="getEchoCancelState" tp:name-for-bindings="getEchoCancelState"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="in"> + </arg> + </method> + + <method name="getNoiseSuppressState" tp:name-for-bindings="getNoiseSuppressState"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setNoiseSuppressState" tp:name-for-binding="setNoiseSuppressState"> + <arg type="s" name="state" direction="in"> + </arg> + </method> + <!-- General Settings Panel --> <method name="isMd5CredentialHashing" tp:name-for-bindings="isMd5CredentialHashing"> diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index 8e5cd1d18b..a5273a2ee0 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -1503,6 +1503,72 @@ dbus_get_current_audio_output_plugin() return plugin; } +/** + * Get echo canceller state + */ +gchar* +dbus_get_echo_cancel_state() +{ + gchar* state = ""; + GError* error = NULL; + org_sflphone_SFLphone_ConfigurationManager_get_echo_cancel_state(configurationManagerProxy, &state, &error); + if(error) { + ERROR("DBus: Failed to call get_echo_cancel_state() on ConfigurationManager: %s", error->message); + g_error_free(error); + } + return state; +} + +/** + * Set echo canceller state + */ +void +dbus_set_echo_cancel_state(gchar* state) +{ + GError* error = NULL; + org_sflphone_SFLphone_ConfigurationManager_set_echo_cancel_state( + configurationManagerProxy, state, &error); + if (error) + { + ERROR("Failed to call set_echo_cancel_state() on ConfigurationManager: %s", error->message); + g_error_free(error); + } +} + + +/** + * Get noise reduction state + */ +gchar* +dbus_get_noise_suppress_state() +{ + gchar* state = ""; + GError* error = NULL; + org_sflphone_SFLphone_ConfigurationManager_get_noise_suppress_state(configurationManagerProxy, &state, &error); + if(error) { + ERROR("DBus: Failed to call get_noise_suppress_state() on ConfigurationManager: %s", error->message); + g_error_free(error); + } + return state; +} + +/** + * Set echo canceller state + */ +void +dbus_set_noise_suppress_state(gchar* state) +{ + GError* error = NULL; + org_sflphone_SFLphone_ConfigurationManager_set_noise_suppress_state( + configurationManagerProxy, state, &error); + if (error) + { + ERROR("Failed to call set_noise_suppress_state() on ConfigurationManager: %s", error->message); + g_error_free(error); + } +} + + gchar* dbus_get_ringtone_choice() { diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h index cf75d9ce98..bf497ff5a4 100644 --- a/sflphone-client-gnome/src/dbus/dbus.h +++ b/sflphone-client-gnome/src/dbus/dbus.h @@ -315,6 +315,32 @@ int dbus_get_audio_device_index(const gchar* name); */ gchar* dbus_get_current_audio_output_plugin(); + +/** + * ConfigurationManager - Get the current state of echo canceller + * @return gchar* The state (enabled/disabled) + */ +gchar *dbus_get_echo_cancel_state(void); + +/** + * ConfigurationManager - Set the crrent state of echo canceller + * @param gchar* The state (enabled/disabled) + */ +void dbus_set_echo_cancel_state(gchar *state); + +/** + * ConfigurationManager - Get the current noise suppressor state + * @return gchar* The state (enabled/disabled) + */ +gchar *dbus_get_noise_suppress_state(void); + +/** + * ConfigurationManager - Set the current noise suppressor state + * @param gchar* The state (enabled/disabled) + */ +void dbus_set_noise_suppress_state(gchar *state); + + /** * ConfigurationManager - Query to server to * know if MD5 credential hashing is enabled. diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index a508e23280..b719d698a7 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -59,6 +59,9 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) // _audioThread = new AudioThread (this); // _audioThread = NULL; _urgentRingBuffer.createReadPointer(); + + AudioLayer::_echocancelstate = true; + AudioLayer::_noisesuppressstate = true; } // Destructor @@ -71,12 +74,6 @@ AlsaLayer::~AlsaLayer (void) delete _converter; _converter = NULL; } - - delete AudioLayer::_echoCancel; - AudioLayer::_echoCancel = NULL; - - delete AudioLayer::_echoCanceller; - AudioLayer::_echoCanceller = NULL; } bool @@ -141,6 +138,9 @@ AlsaLayer::openDevice (int indexIn, int indexOut, int indexRing, int sampleRate, AudioLayer::_echoCancel = new EchoCancel(); AudioLayer::_echoCanceller = new AudioProcessing(static_cast<Algorithm *>(_echoCancel)); + AudioLayer::_echoCancel->setEchoCancelState(AudioLayer::_echocancelstate); + AudioLayer::_echoCancel->setNoiseSuppressState(AudioLayer::_noisesuppressstate); + AudioLayer::_dcblocker = new DcBlocker(); AudioLayer::_audiofilter = new AudioProcessing(static_cast<Algorithm *>(_dcblocker)); @@ -254,6 +254,27 @@ bool AlsaLayer::isCaptureActive (void) return false; } + +void AlsaLayer::setEchoCancelState(bool state) +{ + // if a stream already running + if(AudioLayer::_echoCancel) + _echoCancel->setEchoCancelState(state); + + AudioLayer::_echocancelstate = state; +} + +void AlsaLayer::setNoiseSuppressState(bool state) +{ + // if a stream already opened + if(AudioLayer::_echoCancel) + _echoCancel->setNoiseSuppressState(state); + + AudioLayer::_noisesuppressstate = state; + +} + + ////////////////////////////////////////////////////////////////////////////////////////////// ///////////////// ALSA PRIVATE FUNCTIONS //////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// diff --git a/sflphone-common/src/audio/alsa/alsalayer.h b/sflphone-common/src/audio/alsa/alsalayer.h index 2889eda5fe..8bcacb2898 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.h +++ b/sflphone-common/src/audio/alsa/alsalayer.h @@ -154,6 +154,30 @@ class AlsaLayer : public AudioLayer { bool isCaptureActive (void); + /** + * Get the echo canceller state + * @return true if echo cancel activated + */ + virtual bool getEchoCancelState(void) { return AudioLayer::_echocancelstate; } + + /** + * Set the echo canceller state + * @param state true if echocancel active, false elsewhere + */ + virtual void setEchoCancelState(bool state); + + /** + * Get the noise suppressor state + * @return true if noise suppressor activated + */ + virtual bool getNoiseSuppressState(void) { return AudioLayer::_noisesuppressstate; } + + /** + * Set the noise suppressor state + * @param state true if noise suppressor active, false elsewhere + */ + virtual void setNoiseSuppressState(bool state); + private: // Copy Constructor diff --git a/sflphone-common/src/audio/audiolayer.h b/sflphone-common/src/audio/audiolayer.h index 62a96a871f..f9935e2bc7 100644 --- a/sflphone-common/src/audio/audiolayer.h +++ b/sflphone-common/src/audio/audiolayer.h @@ -232,6 +232,30 @@ class AudioLayer { */ inline Recordable* getRecorderInstance (void) {return _recorder;} + /** + * Get the echo canceller state + * @return true if echo cancel activated + */ + virtual bool getEchoCancelState(void) = 0; + + /** + * Set the echo canceller state + * @param state true if echocancel active, false elsewhere + */ + virtual void setEchoCancelState(bool state) = 0; + + /** + * Get the noise suppressor state + * @return true if noise suppressor activated + */ + virtual bool getNoiseSuppressState(void) = 0; + + /** + * Set the noise suppressor state + * @param state true if noise suppressor active, false elsewhere + */ + virtual void setNoiseSuppressState(bool state) = 0; + /** * Get the mutex lock for the entire audio layer */ @@ -325,6 +349,10 @@ class AudioLayer { DcBlocker *_dcblocker; AudioProcessing *_audiofilter; + bool _echocancelstate; + + bool _noisesuppressstate; + }; #endif // _AUDIO_LAYER_H_ diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index b951e35370..d28c178046 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -55,7 +55,9 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _spkrAdaptSize(SPKR_ADAPT_SIZE), _micAdaptSize(MIC_ADAPT_SIZE), _correlationSize(0), - _processedByte(0) + _processedByte(0), + _echoActive(true), + _noiseActive(true) { _debug("EchoCancel: Instantiate echo canceller"); @@ -265,7 +267,8 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int // spkrFile->write((const char *)_tmpSpkr, byteSize); // Remove noise - speex_preprocess_run(_noiseState, _tmpMic); + if(_noiseActive) + speex_preprocess_run(_noiseState, _tmpMic); // Processed echo cancellation performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); @@ -284,8 +287,6 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int ++nbFrame; } - // _event.reset(); - return nbFrame * _smplPerFrame; } @@ -337,10 +338,11 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa // lowpass filtering float amplify = (_lastAmplFactor + _amplFactor) / 2; _lastAmplFactor = _amplFactor; - amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), amplify); + if(!_echoActive) + amplify = 1.0; - // amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), 1.0); + amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), amplify); } @@ -353,7 +355,7 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData) { // TODO: we should find a way to normalize signal at this point - int micLvl = computeAmplitudeLevel(micData, _smplPerSeg) / 10; + int micLvl = computeAmplitudeLevel(micData, _smplPerSeg) / 6; int spkrLvl = computeAmplitudeLevel(spkrData, _smplPerSeg); // Add 1 to make sure we are not dividing by 0 diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index fdc0792c0f..ac5a6caef3 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -116,6 +116,14 @@ class EchoCancel : public Algorithm { */ void setSamplingRate(int smplRate); + void setEchoCancelState(bool state) { _echoActive = state; } + + bool getEchoCancelState(void) { return _echoActive; } + + void setNoiseSuppressState(bool state) { _noiseActive = state; } + + bool getNoiseSuppressState(void) { return _noiseActive; } + private: /** @@ -311,7 +319,15 @@ class EchoCancel : public Algorithm { */ SpeexPreprocessState *_noiseState; - ost::Event _event; + /** + * true if noise suppressor is active, false elsewhere + */ + bool _echoActive; + + /** + * true if noise suppressor is active, false elsewhere + */ + bool _noiseActive; }; diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 901d68cc76..4782b6ddf7 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -244,7 +244,7 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2) void MainBuffer::unBindAll (CallID call_id) { - // ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); CallIDSet* callid_set = getCallIDSet (call_id); @@ -271,7 +271,7 @@ void MainBuffer::unBindAll (CallID call_id) int MainBuffer::putData (void *buffer, int toCopy, unsigned short volume, CallID call_id) { - // ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); RingBuffer* ring_buffer = getRingBuffer (call_id); @@ -298,7 +298,7 @@ int MainBuffer::putData (void *buffer, int toCopy, unsigned short volume, CallID int MainBuffer::availForPut (CallID call_id) { - // ost::MutexLock guard (_mutex); + // ost::MutexLock guard (_mutex); RingBuffer* ringbuffer = getRingBuffer (call_id); diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 45f872608b..68a86da27e 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -257,6 +257,9 @@ PulseLayer::PulseLayer (ManagerImpl* manager) is_started = false; + AudioLayer::_echocancelstate = true; + AudioLayer::_noisesuppressstate = true; + /* captureFile = new ofstream("captureFile", ofstream::binary); captureRsmplFile = new ofstream("captureRsmplFile", ofstream::binary); @@ -760,6 +763,25 @@ void PulseLayer::processData (void) } +void PulseLayer::setEchoCancelState(bool state) +{ + // if a stream already running + if(AudioLayer::_echoCancel) + _echoCancel->setEchoCancelState(state); + + AudioLayer::_echocancelstate = state; +} + +void PulseLayer::setNoiseSuppressState(bool state) +{ + // if a stream already opened + if(AudioLayer::_echoCancel) + _echoCancel->setNoiseSuppressState(state); + + AudioLayer::_noisesuppressstate = state; + +} + void PulseLayer::writeToSpeaker (void) { diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.h b/sflphone-common/src/audio/pulseaudio/pulselayer.h index b903cf72d1..d13c1e6938 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.h +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.h @@ -177,6 +177,30 @@ class PulseLayer : public AudioLayer { void processRingtoneData( void ); void processData(void); + + /** + * Get the echo canceller state + * @return true if echo cancel activated + */ + bool getEchoCancelState(void) { return AudioLayer::_echocancelstate; } + + /** + * Set the echo canceller state + * @param state true if echocancel active, false elsewhere + */ + void setEchoCancelState(bool state); + + /** + * Get the noise suppressor state + * @return true if noise suppressor activated + */ + bool getNoiseSuppressState(void) { return AudioLayer::_noisesuppressstate; } + + /** + * Set the noise suppressor state + * @param state true if noise suppressor active, false elsewhere + */ + void setNoiseSuppressState(bool state); private: // Copy Constructor diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml index 8a0c59c8b2..f75d22c662 100644 --- a/sflphone-common/src/dbus/configurationmanager-introspec.xml +++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml @@ -574,6 +574,36 @@ </arg> </method> + <method name="getEchoCancelState" tp:name-for-bindings="getEchoCancelState"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="in"> + </arg> + </method> + + <method name="getNoiseSuppressState" tp:name-for-bindings="getNoiseSuppressState"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setNoiseSuppressState" tp:name-for-binding="setNoiseSuppressState"> + <arg type="s" name="state" direction="in"> + </arg> + </method> + <!-- General Settings Panel --> <method name="isMd5CredentialHashing" tp:name-for-bindings="isMd5CredentialHashing"> diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index b928dd3655..b6b08c5617 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -568,6 +568,22 @@ std::string ConfigurationManager::getCurrentAudioOutputPlugin(void) { return Manager::instance().getCurrentAudioOutputPlugin(); } +std::string ConfigurationManager::getEchoCancelState(void) { + return Manager::instance().getEchoCancelState(); +} + +void ConfigurationManager::setEchoCancelState(const std::string& state) { + Manager::instance().setEchoCancelState(state); +} + +std::string ConfigurationManager::getNoiseSuppressState(void) { + return Manager::instance().getNoiseSuppressState(); +} + +void ConfigurationManager::setNoiseSuppressState(const std::string& state) { + Manager::instance().setNoiseSuppressState(state); +} + std::vector<std::string> ConfigurationManager::getPlaybackDeviceList() { std::vector<std::string> ret; return ret; diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h index cf711cf907..7c351af08e 100644 --- a/sflphone-common/src/dbus/configurationmanager.h +++ b/sflphone-common/src/dbus/configurationmanager.h @@ -86,6 +86,10 @@ public: std::vector< std::string > getCurrentAudioDevicesIndex(); int32_t getAudioDeviceIndex(const std::string& name); std::string getCurrentAudioOutputPlugin( void ); + std::string getEchoCancelState(void); + void setEchoCancelState(const std::string& state); + std::string getNoiseSuppressState(void); + void setNoiseSuppressState(const std::string& state); std::vector< std::string > getToneLocaleList( ); diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index f302b6b0c0..69ae92be43 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2711,6 +2711,74 @@ std::string ManagerImpl::getCurrentAudioOutputPlugin (void) { return getConfigString(AUDIO, ALSA_PLUGIN); } + +std::string ManagerImpl::getEchoCancelState(void) { + + // echo canceller is disabled by default + bool isEnabled = false; + + if(_audiodriver) { + isEnabled = _audiodriver->getEchoCancelState(); + } + + std::string state(""); + if(isEnabled) + state = "enabled"; + else + state = "disabled"; + + return state; +} + +void ManagerImpl::setEchoCancelState(std::string state) { + _debug("Manager: Set echo suppress state: %s", state.c_str()); + + bool isEnabled = false; + + if(state.compare("enabled") == 0) + isEnabled = true; + else + isEnabled = false; + + if(_audiodriver) { + _audiodriver->setEchoCancelState(isEnabled); + } +} + + +std::string ManagerImpl::getNoiseSuppressState(void) { + + // noise suppress disabled by default + bool isEnabled = false; + + if(_audiodriver) { + isEnabled = _audiodriver->getNoiseSuppressState(); + } + + std::string state(""); + if(isEnabled) + state = "enabled"; + else + state = "disabled"; + + return state; +} + +void ManagerImpl::setNoiseSuppressState(std::string state) { + _debug("Manager: Set noise suppress state: %s", state.c_str()); + + bool isEnabled = false; + + if(state.compare("enabled") == 0) + isEnabled = true; + else + isEnabled = false; + + if(_audiodriver) { + _audiodriver->setNoiseSuppressState(isEnabled); + } +} + int ManagerImpl::app_is_running (std::string process) { std::ostringstream cmd; diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index 8a85ae3277..3c88ba6a14 100644 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -563,12 +563,20 @@ class ManagerImpl { */ int getAudioDeviceIndex( const std::string name ); - /* + /** * Get current alsa plugin * @return std::string The Alsa plugin */ std::string getCurrentAudioOutputPlugin( void ); + std::string getEchoCancelState(void); + + void setEchoCancelState(std::string state); + + std::string getNoiseSuppressState(void); + + void setNoiseSuppressState(std::string state); + /** * Convert a list of payload in a special format, readable by the server. * Required format: payloads separated with one slash. -- GitLab From 4a664536271b1954ba228971b42efd6b48f6d827 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 3 Jun 2010 09:53:27 -0400 Subject: [PATCH 052/197] [#3470] Fix delay in ALSA --- sflphone-common/src/audio/alsa/alsalayer.cpp | 13 ++++++++----- sflphone-common/src/eventthread.cpp | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index b719d698a7..9b7d9b1bb7 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -456,12 +456,13 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) int err; int format; int periods = 4; - int periodsize = 2048; + int periodsize = 160; /* Allocate the snd_pcm_hw_params_t struct */ snd_pcm_hw_params_malloc (&hwparams); - _periodSize = 2048; + // _periodSize = periodsize; + _periodSize = periodsize; /* Full configuration space */ if ( (err = snd_pcm_hw_params_any (pcm_handle, hwparams)) < 0) { @@ -553,7 +554,7 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) /* Set the start threshold */ - if ( (err = snd_pcm_sw_params_set_start_threshold (pcm_handle, swparams, 2700 /*periodsize*2*/)) < 0) { + if ( (err = snd_pcm_sw_params_set_start_threshold (pcm_handle, swparams, _periodSize*2)) < 0) { _debugAlsa ("Audio: Error: Cannot set start threshold (%s)", snd_strerror (err)); return false; } @@ -919,9 +920,11 @@ void AlsaLayer::audioCallback(void) // framePerBuffer are the number of data for one channel (left) urgentAvailBytes = _urgentRingBuffer.AvailForGet(); - if(!_PlaybackHandle) + if(!_PlaybackHandle || !_CaptureHandle) return; + snd_pcm_wait(_PlaybackHandle, 20); + int playbackAvailSmpl = snd_pcm_avail_update(_PlaybackHandle); int playbackAvailBytes = playbackAvailSmpl*sizeof(SFLDataFormat); // _debug("PLAYBACK: %d", playbackAvailSmpl); @@ -1086,7 +1089,7 @@ void AlsaLayer::audioCallback(void) if (is_capture_running()) { micAvailBytes = snd_pcm_avail_update (_CaptureHandle); - // _debug("micAvailBytes %i", micAvailBytes); + // _debug("CAPTURE: %i", micAvailBytes); if (micAvailBytes > 0) { micAvailPut = getMainBuffer()->availForPut(); diff --git a/sflphone-common/src/eventthread.cpp b/sflphone-common/src/eventthread.cpp index de22502d67..cc16b5e77f 100644 --- a/sflphone-common/src/eventthread.cpp +++ b/sflphone-common/src/eventthread.cpp @@ -65,7 +65,7 @@ void AudioThread::run (void) { while (!testCancel()) { _alsa->audioCallback(); - Thread::sleep (5); + Thread::sleep (20); } } -- GitLab From 99743b43046bdb19c993b7ae1b9bb006242e0c12 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 3 Jun 2010 09:53:52 -0400 Subject: [PATCH 053/197] [#3471] Fix delay in Pulseaudio --- sflphone-common/src/audio/pulseaudio/audiostream.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 4cfd47bf60..bf09430964 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -214,7 +214,7 @@ AudioStream::createStream (pa_context* c, std::string *deviceName) if (_streamType == PLAYBACK_STREAM) { attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes (200 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->tlength = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); attributes->prebuf = 0; attributes->minreq = (uint32_t) -1; @@ -231,9 +231,9 @@ AudioStream::createStream (pa_context* c, std::string *deviceName) } else if (_streamType == CAPTURE_STREAM) { attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes (200 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->tlength = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); attributes->prebuf = 0; - attributes->fragsize = pa_usec_to_bytes (200 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->fragsize = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); pa_threaded_mainloop_lock(_mainloop); @@ -248,7 +248,7 @@ AudioStream::createStream (pa_context* c, std::string *deviceName) } else if (_streamType == RINGTONE_STREAM) { attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes(100 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->tlength = pa_usec_to_bytes(50 * PA_USEC_PER_MSEC, &_sample_spec); attributes->prebuf = 0; attributes->minreq = (uint32_t) -1; -- GitLab From 6a652e9322f1b89f0a80f008e0e3a6cca94356c8 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 3 Jun 2010 17:24:55 -0400 Subject: [PATCH 054/197] [#3487] Improve notch filter for DC component removal --- sflphone-common/src/audio/alsa/alsalayer.cpp | 8 +++++++- sflphone-common/src/audio/dcblocker.cpp | 20 +++++++++++++++++-- .../src/audio/pulseaudio/pulselayer.cpp | 9 ++++++++- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index 9b7d9b1bb7..89e6f41513 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -1125,9 +1125,15 @@ void AlsaLayer::audioCallback(void) } else { - int sampleready = AudioLayer::_echoCanceller->processAudio(in, echoCancelledMic, toPut); + + SFLDataFormat* filter_out = (SFLDataFormat*) malloc (framesPerBufferAlsa * sizeof (SFLDataFormat)); + + _audiofilter->processAudio (in, filter_out, toPut); + + int sampleready = AudioLayer::_echoCanceller->processAudio(filter_out, echoCancelledMic, toPut); getMainBuffer()->putData (echoCancelledMic, sampleready*sizeof(SFLDataFormat), 100); + free(rsmpl_out); } } diff --git a/sflphone-common/src/audio/dcblocker.cpp b/sflphone-common/src/audio/dcblocker.cpp index 8973c54513..7fdf73aaf7 100644 --- a/sflphone-common/src/audio/dcblocker.cpp +++ b/sflphone-common/src/audio/dcblocker.cpp @@ -77,7 +77,7 @@ void DcBlocker::process (SFLDataFormat *data, int nbBytes) int nbSamples = nbBytes / sizeof(SFLDataFormat); for (int i = 0; i < nbSamples; i++) { - + _debug("i: %d", i); _x = data[i]; _y = (SFLDataFormat) ( (float) _x - (float) _xm1 + 0.9999 * (float) _ym1); @@ -89,6 +89,22 @@ void DcBlocker::process (SFLDataFormat *data, int nbBytes) } } -int DcBlocker::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { return 0;} +int DcBlocker::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { + + int nbSamples = nbBytes / sizeof(SFLDataFormat); + for (int i = 0; i < nbSamples; i++) { + + _x = inputData[i]; + + _y = (SFLDataFormat) ( (float) _x - (float) _xm1 + 0.9999 * (float) _ym1); + _xm1 = _x; + _ym1 = _y; + + outputData[i] = _y; + } + + return 0; + +} void DcBlocker::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes) {} diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 68a86da27e..ca3c98eb69 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -981,11 +981,18 @@ void PulseLayer::readFromMic (void) } else { + SFLDataFormat* filter_out = (SFLDataFormat*) pa_xmalloc (r); + + // remove dc offset + _audiofilter->processAudio((SFLDataFormat *)data, filter_out, r); + // echo cancellation processing - int sampleready = _echoCanceller->processAudio((SFLDataFormat *)data, echoCancelledMic, r); + int sampleready = _echoCanceller->processAudio((SFLDataFormat *)data, echoCancelledMic, r); // no resampling required getMainBuffer()->putData (echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); + + pa_xfree(filter_out); } -- GitLab From a20de01fa94ab0e711906ae6f12a89c9824a04ae Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 3 Jun 2010 17:34:43 -0400 Subject: [PATCH 055/197] [#3481] Improve power estimation for speech detection --- sflphone-common/src/audio/echocancel.cpp | 58 ++++++++++++++++-------- sflphone-common/src/audio/echocancel.h | 12 ++++- 2 files changed, 49 insertions(+), 21 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index d28c178046..6bd34d1ff1 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -39,6 +39,9 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _nbSegmentPerFrame(0), _micHistoryLength(0), _spkrHistoryLength(0), + _alpha(0.01), + _spkrLevelMem(0), + _micLevelMem(0), _spkrLevel(0), _micLevel(0), _spkrHistCnt(0), @@ -61,14 +64,14 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), { _debug("EchoCancel: Instantiate echo canceller"); - /* + micFile = new ofstream("micData", ofstream::binary); echoFile = new ofstream("echoData", ofstream::binary); spkrFile = new ofstream("spkrData", ofstream::binary); - + micLevelData = new ofstream("micLevelData", ofstream::binary); spkrLevelData = new ofstream("spkrLevelData", ofstream::binary); - */ + _micData = new RingBuffer(50000); _spkrData = new RingBuffer(50000); @@ -125,7 +128,7 @@ EchoCancel::~EchoCancel() speex_preprocess_state_destroy(_noiseState); - /* + micFile->close(); spkrFile->close(); echoFile->close(); @@ -138,7 +141,7 @@ EchoCancel::~EchoCancel() spkrLevelData->close(); delete micLevelData; delete spkrLevelData; - */ + } @@ -263,8 +266,8 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int _spkrData->Get(_tmpSpkr, byteSize); _micData->Get(_tmpMic, byteSize); - // micFile->write((const char *)_tmpMic, byteSize); - // spkrFile->write((const char *)_tmpSpkr, byteSize); + micFile->write((const char *)_tmpMic, byteSize); + spkrFile->write((const char *)_tmpSpkr, byteSize); // Remove noise if(_noiseActive) @@ -273,7 +276,7 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int // Processed echo cancellation performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); - // echoFile->write((const char *)_tmpOut, byteSize); + echoFile->write((const char *)_tmpOut, byteSize); bcopy(_tmpOut, outputData+(nbFrame*_smplPerFrame), byteSize); @@ -306,9 +309,6 @@ void EchoCancel::setSamplingRate(int smplRate) { void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData) { - // int tempmiclevel[_nbSegmentPerFrame]; - // int tempspkrlevel[_nbSegmentPerFrame]; - for(int k = 0; k < _nbSegmentPerFrame; k++) { updateEchoCancel(micData+(k*_smplPerSeg), spkrData+(k*_smplPerSeg)); @@ -319,9 +319,6 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa // _debug("_spkrLevel: (max): %d", _spkrLevel); // _debug("_micLevel: (min): %d", _micLevel); - // tempspkrlevel[k] = _spkrLevel; - // tempmiclevel[k] = _micLevel; - if(_spkrLevel >= MIN_SIG_LEVEL) { if(_micLevel > _spkrLevel) { increaseFactor(0.2); @@ -346,18 +343,21 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa } - // micLevelData->write((const char *)tempmiclevel, sizeof(int)*_nbSegmentPerFrame); - // spkrLevelData->write((const char *)tempspkrlevel, sizeof(int)*_nbSegmentPerFrame); - } void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData) { // TODO: we should find a way to normalize signal at this point - int micLvl = computeAmplitudeLevel(micData, _smplPerSeg) / 6; + int micLvl = computeAmplitudeLevel(micData, _smplPerSeg); int spkrLvl = computeAmplitudeLevel(spkrData, _smplPerSeg); + SFLDataFormat tempSpkrLevel[_smplPerSeg]; + SFLDataFormat tempMicLevel[_smplPerSeg]; + + _spkrLevelMem = estimatePower(spkrData, tempSpkrLevel, _smplPerSeg, _spkrLevelMem); + _micLevelMem = estimatePower(micData, tempMicLevel, _smplPerSeg, _micLevelMem); + // Add 1 to make sure we are not dividing by 0 _avgMicLevelHist[_micHistCnt++] = micLvl+1; _avgSpkrLevelHist[_spkrHistCnt++] = spkrLvl+1; @@ -370,7 +370,10 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat if(_spkrHistCnt >= _spkrHistoryLength) _spkrHistCnt = 0; - + + + micLevelData->write((const char*)tempMicLevel, sizeof(SFLDataFormat)*_smplPerSeg); + spkrLevelData->write((const char*)tempSpkrLevel, sizeof(SFLDataFormat)*_smplPerSeg); /* // if adaptation done, stop here // if(_adaptDone) @@ -412,7 +415,7 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat int EchoCancel::computeAmplitudeLevel(SFLDataFormat *data, int size) { - + int level = 0; for(int i = 0; i < size; i++) { @@ -425,6 +428,21 @@ int EchoCancel::computeAmplitudeLevel(SFLDataFormat *data, int size) { level = level / _smplPerSeg; return level; + +} + +SFLDataFormat EchoCancel::estimatePower(SFLDataFormat *data, SFLDataFormat *ampl, int size, SFLDataFormat mem) { + + float memFactor = 1.0 - _alpha; + + for (int i = 0; i < size; i++) { + mem = (SFLDataFormat)(memFactor*(float)mem + abs(_alpha*(float)data[i])); + // _debug("ampl: %d, memfactor: %f, alpha: %f, data: %d", mem, memFactor, _alpha, data[i]); + ampl[i] = mem; + } + + return mem; + } diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index ac5a6caef3..d3728874ca 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -49,7 +49,7 @@ #define MIC_LENGTH 80 // Voice level threashold -#define MIN_SIG_LEVEL 75 +#define MIN_SIG_LEVEL 250 // Delay between mic and speaker // #define DELAY_AMPLIFY 60 @@ -142,6 +142,11 @@ class EchoCancel : public Algorithm { */ int computeAmplitudeLevel(SFLDataFormat *data, int size); + /** + * Compute amplitude signal + */ + SFLDataFormat estimatePower(SFLDataFormat *data, SFLDataFormat *ampl, int size, SFLDataFormat mem); + /** * Return the max amplitude provided any of _avgSpkrLevelHist or _avgMicLevelHist */ @@ -289,6 +294,11 @@ class EchoCancel : public Algorithm { */ int _adaptCnt; + float _alpha; + + SFLDataFormat _spkrLevelMem; + SFLDataFormat _micLevelMem; + int _spkrAdaptCnt; int _micAdaptCnt; -- GitLab From cf40250f4deb98956cb3dd8ba46f82b54a637b76 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 3 Jun 2010 18:10:14 -0400 Subject: [PATCH 056/197] [#3481] Small echo canceller tuning --- sflphone-common/src/audio/echocancel.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 6bd34d1ff1..9165e58afc 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -93,6 +93,8 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); int i=1; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); + i=-30; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &i); i=0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC, &i); i=8000; @@ -194,9 +196,9 @@ void EchoCancel::reset() speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i); i=0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i); - float f=.0; + float f=0.0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); - f=.0; + f=0.0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); _spkrStoped = true; @@ -314,7 +316,7 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa updateEchoCancel(micData+(k*_smplPerSeg), spkrData+(k*_smplPerSeg)); _spkrLevel = getMaxAmplitude(_avgSpkrLevelHist, _spkrHistoryLength); - _micLevel = getMaxAmplitude(_avgMicLevelHist, _micHistoryLength); + _micLevel = getMaxAmplitude(_avgMicLevelHist, _micHistoryLength)/2; // _debug("_spkrLevel: (max): %d", _spkrLevel); // _debug("_micLevel: (min): %d", _micLevel); -- GitLab From cfe4d9285d0add9be089bc323763f931762ea9a7 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 3 Jun 2010 18:50:03 -0400 Subject: [PATCH 057/197] [#3458] Make libspeexdsp optional in echo canceller --- sflphone-common/src/audio/echocancel.cpp | 11 +++++++++-- sflphone-common/src/audio/echocancel.h | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 9165e58afc..329f0d0539 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -90,6 +90,7 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _spkrHistoryLength = SPKR_LENGTH / SEGMENT_LENGTH; _nbSegmentPerFrame = _frameLength / SEGMENT_LENGTH; +#ifdef HAVE_SPEEXDSP_LIB _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); int i=1; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); @@ -105,6 +106,7 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); f=0.0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); +#endif memset(_avgSpkrLevelHist, 0, BUFF_SIZE*sizeof(int)); memset(_avgMicLevelHist, 0, BUFF_SIZE*sizeof(int)); @@ -128,8 +130,9 @@ EchoCancel::~EchoCancel() delete _spkrData; _spkrData = NULL; +#ifdef HAVE_SPEEXDSP_LIB speex_preprocess_state_destroy(_noiseState); - +#endif micFile->close(); spkrFile->close(); @@ -183,6 +186,7 @@ void EchoCancel::reset() _spkrData->flushAll(); _spkrDataOut->flushAll(); +#ifdef HAVE_SPEEXDSP_LIB speex_preprocess_state_destroy(_noiseState); _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); @@ -200,6 +204,7 @@ void EchoCancel::reset() speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); f=0.0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); +#endif _spkrStoped = true; @@ -270,10 +275,12 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int micFile->write((const char *)_tmpMic, byteSize); spkrFile->write((const char *)_tmpSpkr, byteSize); - + +#ifdef HAVE_SPEEXDSP_LIB // Remove noise if(_noiseActive) speex_preprocess_run(_noiseState, _tmpMic); +#endif // Processed echo cancellation performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index d3728874ca..32b664a1d4 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -324,10 +324,12 @@ class EchoCancel : public Algorithm { ofstream *micLevelData; ofstream *spkrLevelData; +#ifdef HAVE_SPEEXDSP_LIB /** * Noise reduction processing state */ SpeexPreprocessState *_noiseState; +#endif /** * true if noise suppressor is active, false elsewhere -- GitLab From 467a62fda76fb7ce4a7b3ac058c1eb6f3699ad6e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 4 Jun 2010 09:49:36 -0400 Subject: [PATCH 058/197] [#3487] Used filtered data to feed echo canceller ... --- sflphone-common/src/audio/echocancel.cpp | 2 +- sflphone-common/src/audio/pulseaudio/pulselayer.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 329f0d0539..2970fc3cc4 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -323,7 +323,7 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa updateEchoCancel(micData+(k*_smplPerSeg), spkrData+(k*_smplPerSeg)); _spkrLevel = getMaxAmplitude(_avgSpkrLevelHist, _spkrHistoryLength); - _micLevel = getMaxAmplitude(_avgMicLevelHist, _micHistoryLength)/2; + _micLevel = getMaxAmplitude(_avgMicLevelHist, _micHistoryLength)/6; // _debug("_spkrLevel: (max): %d", _spkrLevel); // _debug("_micLevel: (min): %d", _micLevel); diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index ca3c98eb69..56c2ab8c7b 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -987,7 +987,7 @@ void PulseLayer::readFromMic (void) _audiofilter->processAudio((SFLDataFormat *)data, filter_out, r); // echo cancellation processing - int sampleready = _echoCanceller->processAudio((SFLDataFormat *)data, echoCancelledMic, r); + int sampleready = _echoCanceller->processAudio((SFLDataFormat *)filter_out, echoCancelledMic, r); // no resampling required getMainBuffer()->putData (echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); -- GitLab From b240bb7adbc11bb5529f5a786eeae7f123a3c409 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 4 Jun 2010 10:13:40 -0400 Subject: [PATCH 059/197] [#3459] Fix broken audio layer test --- sflphone-common/src/audio/dcblocker.cpp | 1 - sflphone-common/test/audiolayertest.cpp | 13 +++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sflphone-common/src/audio/dcblocker.cpp b/sflphone-common/src/audio/dcblocker.cpp index 7fdf73aaf7..522faef890 100644 --- a/sflphone-common/src/audio/dcblocker.cpp +++ b/sflphone-common/src/audio/dcblocker.cpp @@ -77,7 +77,6 @@ void DcBlocker::process (SFLDataFormat *data, int nbBytes) int nbSamples = nbBytes / sizeof(SFLDataFormat); for (int i = 0; i < nbSamples; i++) { - _debug("i: %d", i); _x = data[i]; _y = (SFLDataFormat) ( (float) _x - (float) _xm1 + 0.9999 * (float) _ym1); diff --git a/sflphone-common/test/audiolayertest.cpp b/sflphone-common/test/audiolayertest.cpp index 45a226ff5d..b8e86e9bff 100644 --- a/sflphone-common/test/audiolayertest.cpp +++ b/sflphone-common/test/audiolayertest.cpp @@ -91,11 +91,12 @@ void AudioLayerTest::testPulseConnect() { CPPUNIT_ASSERT (_pulselayer->getLayerType() == PULSEAUDIO); std::string alsaPlugin; - int numCardIn, numCardOut, sampleRate, frameSize; + int numCardIn, numCardOut, numCardRing, sampleRate, frameSize; alsaPlugin = manager->getConfigString(AUDIO, ALSA_PLUGIN); numCardIn = manager->getConfigInt(AUDIO, ALSA_CARD_ID_IN); numCardOut = manager->getConfigInt(AUDIO, ALSA_CARD_ID_OUT); + numCardRing = manager->getConfigInt(AUDIO, ALSA_CARD_ID_RING); sampleRate = manager->getConfigInt(AUDIO, AUDIO_SAMPLE_RATE); frameSize = manager->getConfigInt(AUDIO, ALSA_FRAME_SIZE); @@ -105,7 +106,7 @@ void AudioLayerTest::testPulseConnect() { _pulselayer->setErrorMessage(-1); try { - CPPUNIT_ASSERT (_pulselayer->openDevice (numCardIn, numCardOut, sampleRate, frameSize, SFL_PCM_BOTH, alsaPlugin) == true); + CPPUNIT_ASSERT (_pulselayer->openDevice (numCardIn, numCardOut, numCardRing, sampleRate, frameSize, SFL_PCM_BOTH, alsaPlugin) == true); } catch (...) { _debug ("Exception occured wile opening device! "); } @@ -128,14 +129,14 @@ void AudioLayerTest::testPulseConnect() { CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->disconnectStream() == true); CPPUNIT_ASSERT (_pulselayer->getRecordStream()->disconnectStream() == true); - CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->connectStream() == true); - CPPUNIT_ASSERT (_pulselayer->getRecordStream()->connectStream() == true); + CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->connectStream(NULL) == true); + CPPUNIT_ASSERT (_pulselayer->getRecordStream()->connectStream(NULL) == true); CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->getStreamState() == 1); CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 1); - CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->connectStream() == true); - CPPUNIT_ASSERT (_pulselayer->getRecordStream()->connectStream() == true); + CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->connectStream(NULL) == true); + CPPUNIT_ASSERT (_pulselayer->getRecordStream()->connectStream(NULL) == true); CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->getStreamState() == 1); CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 1); -- GitLab From 93baf8397fa239cb1f04f59fce0c9ef8d8d81e48 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 7 Jun 2010 08:53:26 -0400 Subject: [PATCH 060/197] [#3471] Send microphone data through if no spkrdata is arrived yet --- sflphone-common/src/audio/echocancel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 2970fc3cc4..1d50b53b50 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -244,7 +244,8 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int { if(_spkrStoped) { - return 0; + bcopy(inputData, outputData, nbBytes); + return nbBytes; } int byteSize = _smplPerFrame*sizeof(SFLDataFormat); -- GitLab From 72b31bb0b1536d9acf08bd9ddaf30d769713c1b2 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Mon, 7 Jun 2010 11:09:29 -0400 Subject: [PATCH 061/197] [#3366] Code cleanup --- sflphone-common/src/audio/echocancel.cpp | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 1d50b53b50..8b2f6130ab 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -262,8 +262,6 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int int spkrAvail = _spkrData->AvailForGet(); int micAvail = _micData->AvailForGet(); - // _debug("EchoCancel: speaker avail %d, mic avail %d, processed: %d", spkrAvail/320, micAvail/320, _processedByte/320); - // Init number of frame processed int nbFrame = 0; @@ -326,13 +324,9 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa _spkrLevel = getMaxAmplitude(_avgSpkrLevelHist, _spkrHistoryLength); _micLevel = getMaxAmplitude(_avgMicLevelHist, _micHistoryLength)/6; - // _debug("_spkrLevel: (max): %d", _spkrLevel); - // _debug("_micLevel: (min): %d", _micLevel); - if(_spkrLevel >= MIN_SIG_LEVEL) { if(_micLevel > _spkrLevel) { increaseFactor(0.2); - // _amplFactor = 0.0; } else { _amplFactor = 0.0; @@ -372,9 +366,6 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat _avgMicLevelHist[_micHistCnt++] = micLvl+1; _avgSpkrLevelHist[_spkrHistCnt++] = spkrLvl+1; - // _debug("micLevel: %d", micLvl); - // _debug("spkrLevel: %d", spkrLvl); - if(_micHistCnt >= _micHistoryLength) _micHistCnt = 0; @@ -407,18 +398,15 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat // perform correlation if spkr size is reached if(_adaptCnt > _spkrAdaptSize) { int k = _adaptCnt - _spkrAdaptSize; - _correlationArray[k] = performCorrelation(_spkrAdaptArray, _micAdaptArray+k, _correlationSize); - // _debug("EchoCancel: Correlation: %d", _correlationArray[k]); + _correlationArray[k] = performCorrelation(_spkrAdaptArray, _micAdaptArray+k, _correlationSize); } _adaptCnt++; // if we captured a full echo if(_adaptCnt == _micAdaptSize) { - _debug("EchoCancel: Echo path adaptation completed"); _adaptDone = true; _amplDelayIndexOut = 0;// getMaximumIndex(_correlationArray, _correlationSize); - _debug("EchoCancel: Echo length %d", _amplDelayIndexOut); } */ } @@ -447,7 +435,6 @@ SFLDataFormat EchoCancel::estimatePower(SFLDataFormat *data, SFLDataFormat *ampl for (int i = 0; i < size; i++) { mem = (SFLDataFormat)(memFactor*(float)mem + abs(_alpha*(float)data[i])); - // _debug("ampl: %d, memfactor: %f, alpha: %f, data: %d", mem, memFactor, _alpha, data[i]); ampl[i] = mem; } -- GitLab From 4298b70826945467d1255c18a6539d5a57ffb82c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Wed, 9 Jun 2010 14:44:34 -0400 Subject: [PATCH 062/197] [#3424] Shielded unused pointers in Accounts Local IP parameters --- sflphone-client-gnome/src/config/accountconfigdialog.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index a3757c13db..6867ea1beb 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -1365,7 +1365,7 @@ void show_account_window (account_t * a) { } - if (strcmp (proto, "SIP") == 0) { + if (proto && strcmp (proto, "SIP") == 0) { if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) { @@ -1457,7 +1457,7 @@ void show_account_window (account_t * a) { } - if (strcmp(currentProtocol, "SIP") == 0) { + if (currentProtocol && strcmp(currentProtocol, "SIP") == 0) { /* Set new credentials if any */ DEBUG("Config: Setting credentials"); -- GitLab From a51be11c566fbb145c8c00b80aa2a3d1cde33544 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Wed, 9 Jun 2010 15:36:32 -0400 Subject: [PATCH 063/197] [#3424] Fix GTK warnings in Local IP configuration --- .../src/config/accountconfigdialog.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 6867ea1beb..081391da70 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -1297,7 +1297,8 @@ void show_account_window (account_t * a) { // Get current protocol for this account protocol gchar *currentProtocol = "SIP"; - currentProtocol = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox)); + if(protocolComboBox) + currentProtocol = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox)); // Do not need advanced or security one for the IP2IP account if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) { @@ -1322,7 +1323,8 @@ void show_account_window (account_t * a) { } // Emit signal to hide advanced and security tabs in case of IAX - g_signal_emit_by_name (GTK_WIDGET(protocolComboBox), "changed", NULL); + if(protocolComboBox) + g_signal_emit_by_name (GTK_WIDGET(protocolComboBox), "changed", NULL); gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook) , 0); @@ -1332,7 +1334,11 @@ void show_account_window (account_t * a) { response = gtk_dialog_run (GTK_DIALOG (dialog)); // Update protocol in case it changed - gchar *proto = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox)); + gchar *proto = NULL; + if(protocolComboBox) + proto = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox)); + else + proto = "SIP"; // If cancel button is pressed if(response == GTK_RESPONSE_CANCEL) { @@ -1364,7 +1370,6 @@ void show_account_window (account_t * a) { g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryMailbox)))); } - if (proto && strcmp (proto, "SIP") == 0) { if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) { -- GitLab From 0faf8c72b43eee0a622951d5663dfe29d2796492 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Fri, 11 Jun 2010 13:19:40 -0400 Subject: [PATCH 064/197] [#3376] Removed sflphone-common/ from .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index aa568b6742..0fbd7f9d1f 100644 --- a/.gitignore +++ b/.gitignore @@ -168,7 +168,7 @@ sflphone-client-gnome/stamp-h1 /sflphone-common/libs/libiax2/Makefile /sflphone-common/libs/libiax2/iax2-config /sflphone-common/libs/libiax2/src/Makefile -/sflphone-common + ## dbus-c++ /sflphone-common/libs/dbus-c++/Makefile /sflphone-common/libs/dbus-c++/autom4te.cache/requests -- GitLab From acb099f9a79cae79cd28318aa31a73a91ad70747 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Fri, 11 Jun 2010 13:24:09 -0400 Subject: [PATCH 065/197] [#3507] Add DelayDetection classes --- sflphone-common/src/audio/Makefile.am | 4 +- sflphone-common/src/audio/delaydetection.cpp | 49 ++++++++++++++++ sflphone-common/src/audio/delaydetection.h | 61 ++++++++++++++++++++ sflphone-common/test/Makefile.am | 7 ++- 4 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 sflphone-common/src/audio/delaydetection.cpp create mode 100644 sflphone-common/src/audio/delaydetection.h diff --git a/sflphone-common/src/audio/Makefile.am b/sflphone-common/src/audio/Makefile.am index cb0a65e3e4..156246d164 100644 --- a/sflphone-common/src/audio/Makefile.am +++ b/sflphone-common/src/audio/Makefile.am @@ -12,6 +12,7 @@ libaudio_la_SOURCES = \ audiolayer.cpp \ audiodevice.cpp \ samplerateconverter.cpp \ + delaydetection.cpp \ echocancel.cpp \ speexechocancel.cpp \ audioprocessing.cpp \ @@ -27,7 +28,8 @@ noinst_HEADERS = \ mainbuffer.h \ recordable.h \ algorithm.h \ - echocancel.h + delaydetection.h \ + echocancel.h \ speexechocancel.h \ audioprocessing.h \ dcblocker.h \ diff --git a/sflphone-common/src/audio/delaydetection.cpp b/sflphone-common/src/audio/delaydetection.cpp new file mode 100644 index 0000000000..b64bfd6483 --- /dev/null +++ b/sflphone-common/src/audio/delaydetection.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + + + +#include "delaydetection.h" + +DelayDetection::DelayDetection(){} + +DelayDetection::~DelayDetection(){} + +void DelayDetection::reset() {} + +void DelayDetection::putData(SFLDataFormat *inputData, int nbBytes) {} + +int DelayDetection::getData(SFLDataFormat *outputData) { return 0; } + +void DelayDetection::process(SFLDataFormat *inputData, int nbBytes) {} + +int DelayDetection::process(SFLDataFormat *intputData, SFLDataFormat *outputData, int nbBytes) { return 0; } + +void DelayDetection::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes) {} diff --git a/sflphone-common/src/audio/delaydetection.h b/sflphone-common/src/audio/delaydetection.h new file mode 100644 index 0000000000..51082565ae --- /dev/null +++ b/sflphone-common/src/audio/delaydetection.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + + +#ifndef DELAYDETECTION_H +#define DELAYDETECTION_H + +#include "algorithm.h" + +class DelayDetection : public Algorithm { + + public: + + DelayDetection(); + + ~DelayDetection(); + + virtual void reset(void); + + virtual void putData(SFLDataFormat *inputData, int nbBytes); + + virtual int getData(SFLDataFormat *getData); + + virtual void process(SFLDataFormat *inputData, int nbBytes); + + virtual int process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes); + + virtual void process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes); + + private: + + }; + +#endif diff --git a/sflphone-common/test/Makefile.am b/sflphone-common/test/Makefile.am index c2371cd96a..ff5d109041 100644 --- a/sflphone-common/test/Makefile.am +++ b/sflphone-common/test/Makefile.am @@ -27,7 +27,9 @@ test_SOURCES = main.cpp \ rtptest.h \ rtptest.cpp \ sdesnegotiatortest.h \ - sdesnegotiatortest.cpp + sdesnegotiatortest.cpp \ + delaydetectiontest.h \ + delaydetectiontest.cpp @@ -68,4 +70,5 @@ LLIBS=$(CPPUNIT_LIBS) \ ../src/plug-in/pluginmanager.o \ ../src/plug-in/audiorecorder/audiorecord.o \ ../src/audio/samplerateconverter.o \ - ../src/history/historymanager.o \ No newline at end of file + ../src/audio/delaydetection.o \ + ../src/history/historymanager.o \ No newline at end of file -- GitLab From ec8a5eacb703319c45f128cd58777fff18576cd2 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Fri, 11 Jun 2010 13:58:53 -0400 Subject: [PATCH 066/197] [#3507] Add delay detection unit tests --- sflphone-common/test/delaydetectiontest.cpp | 43 ++++++++++ sflphone-common/test/delaydetectiontest.h | 92 +++++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 sflphone-common/test/delaydetectiontest.cpp create mode 100644 sflphone-common/test/delaydetectiontest.h diff --git a/sflphone-common/test/delaydetectiontest.cpp b/sflphone-common/test/delaydetectiontest.cpp new file mode 100644 index 0000000000..fb560fe588 --- /dev/null +++ b/sflphone-common/test/delaydetectiontest.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + + +#include "delaydetectiontest.h" + + +void DelayDetectionTest::setUp() {} + +void DelayDetectionTest::tearDown() {} + +void DelayDetectionTest::testCrossCorrelation() +{ + CPPUNIT_ASSERT (true); +} + diff --git a/sflphone-common/test/delaydetectiontest.h b/sflphone-common/test/delaydetectiontest.h new file mode 100644 index 0000000000..bca27ee6ea --- /dev/null +++ b/sflphone-common/test/delaydetectiontest.h @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + + +// Cppunit import +#include <cppunit/extensions/HelperMacros.h> +#include <cppunit/TestCaller.h> +#include <cppunit/TestCase.h> +#include <cppunit/TestSuite.h> + +#include <assert.h> + +#include <stdio.h> +#include <sstream> +#include <ccrtp/rtp.h> + + +// pjsip import +#include <pjsip.h> +#include <pjlib.h> +#include <pjsip_ua.h> +#include <pjlib-util.h> +#include <pjnath/stun_config.h> + +// Application import +#include "manager.h" +#include "audio/mainbuffer.h" +#include "audio/ringbuffer.h" +#include "call.h" +// #include "config/config.h" +// #include "user_cfg.h" + + + +#ifndef _DELAYDETECTION_TEST_ +#define _DELAYDETECTION_TEST_ + +/* + * @file delaydetection.cpp + * @brief Regroups unitary tests related to the delay detection algorithm. + */ + +class DelayDetectionTest : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE( DelayDetectionTest ); + CPPUNIT_TEST( testCrossCorrelation ); + CPPUNIT_TEST_SUITE_END(); + + public: + + DelayDetectionTest() : CppUnit::TestCase("Delay Detection Tests") {} + + void setUp(); + + inline void tearDown(); + + void testCrossCorrelation(); + +}; + +/* Register our test module */ +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(DelayDetectionTest, "DelayDetectionTest"); +CPPUNIT_TEST_SUITE_REGISTRATION( DelayDetectionTest ); + +#endif -- GitLab From dc32d62f82d8a152400c6930c17084e81ccafc37 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Fri, 11 Jun 2010 19:00:14 -0400 Subject: [PATCH 067/197] [#3507] Autocorrelation first try --- sflphone-common/src/audio/delaydetection.cpp | 74 ++++++++++++++++++++ sflphone-common/src/audio/delaydetection.h | 32 ++++++++- sflphone-common/test/delaydetectiontest.cpp | 27 ++++++- sflphone-common/test/delaydetectiontest.h | 5 ++ 4 files changed, 136 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/delaydetection.cpp b/sflphone-common/src/audio/delaydetection.cpp index b64bfd6483..7c0df0c6d3 100644 --- a/sflphone-common/src/audio/delaydetection.cpp +++ b/sflphone-common/src/audio/delaydetection.cpp @@ -31,6 +31,7 @@ #include "delaydetection.h" +#include "math.h" DelayDetection::DelayDetection(){} @@ -47,3 +48,76 @@ void DelayDetection::process(SFLDataFormat *inputData, int nbBytes) {} int DelayDetection::process(SFLDataFormat *intputData, SFLDataFormat *outputData, int nbBytes) { return 0; } void DelayDetection::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes) {} + +void DelayDetection::crossCorrelate(double *ref, double *seg, double *res, short refSize, short segSize) +{ + + _debug("CrossCorrelate"); + + // Output has same size as the + short rsize = refSize; + short ssize = segSize; + short tmpsize = segSize-refSize+1; + + // perform autocorrelation on reference signal + double acref = correlate(ref, ref, rsize); + + double acseg = 0.0; + double r; + while(--tmpsize) { + acseg = correlate(seg+tmpsize, seg+tmpsize, rsize); + res[ssize] = correlate(ref, seg+tmpsize, rsize); + r = sqrt(acref*acseg); + if(r < 0.0001) + res[ssize] = 0.0; + else + res[ssize] = res[ssize] / r; + --ssize; + } + + + _debug("----------------start------------------"); + + for (int j = 0; j < 10; j++) + _debug("segment: %f", seg[j]); + + seg[0] = 0.0; + // zerro padded region + int i = 0; + while(rsize) { + _debug("rsize: %i, ssize: %i", rsize, ssize); + acref = correlate(ref, ref, refSize); + _debug("acref: %f", acref); + acseg = correlate(seg, seg, rsize); + _debug("acseg: %f", acseg); + res[ssize] = correlate(ref+rsize, seg, rsize); + _debug("res[ssize]: %f", res[ssize]); + r = sqrt(acref*acseg); + _debug("r: %f", r); + if(r < 0.0001) + res[ssize] = 0.0; + else + res[ssize] = res[ssize] / r; + --ssize; + --rsize; + ++i; + } + +} + +double DelayDetection::correlate(double *sig1, double *sig2, short size) { + + _debug("Correlate"); + + short s = size; + + double ac = 0.0; + + for(int i = size-1; i >= 0; i--) { + _debug(" %i: s1, %f, s2 %f", i, sig1[i], sig2[i]); + } + while(s--) + ac += sig1[s]*sig2[s]; + + return ac; +} diff --git a/sflphone-common/src/audio/delaydetection.h b/sflphone-common/src/audio/delaydetection.h index 51082565ae..30ae94d2ca 100644 --- a/sflphone-common/src/audio/delaydetection.h +++ b/sflphone-common/src/audio/delaydetection.h @@ -34,6 +34,12 @@ #include "algorithm.h" +// Template size in samples for correlation +#define WINDOW_SIZE 256 + +// Segment length in ms for correlation +#define MAX_DELAY 150 + class DelayDetection : public Algorithm { public: @@ -56,6 +62,30 @@ class DelayDetection : public Algorithm { private: - }; + /** + * Perform a normalized crosscorrelation between template and segment + */ + void crossCorrelate(double *ref, double *seg, double *res, short refSize, short segSize); + + /** + * Perform a correlation on specified signals (mac) + */ + double correlate(double *sig1, double *sig2, short size); + + /** + * Segment size in samples for correlation + */ + short _segmentSize; + + /** + * Resulting correlation size (s + w -1) + */ + short _correlationSize; + + + public: + + friend class DelayDetectionTest; +}; #endif diff --git a/sflphone-common/test/delaydetectiontest.cpp b/sflphone-common/test/delaydetectiontest.cpp index fb560fe588..b45ccddbe8 100644 --- a/sflphone-common/test/delaydetectiontest.cpp +++ b/sflphone-common/test/delaydetectiontest.cpp @@ -31,6 +31,8 @@ #include "delaydetectiontest.h" +#include <iostream> +#include <math.h> void DelayDetectionTest::setUp() {} @@ -38,6 +40,29 @@ void DelayDetectionTest::tearDown() {} void DelayDetectionTest::testCrossCorrelation() { - CPPUNIT_ASSERT (true); + double signal[10] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0}; + double ref[3] = {0.0, 1.0, 2.0}; + + double result[10]; + double expected[10] = {0.0, 0.89442719, 1.0, 0.95618289, 0.91350028, 0.88543774, 0.86640023, 0.85280287, 0.8426548, 0.83480969}; + + // CPPUNIT_ASSERT(_delaydetect.correlate(ref, ref, 3) == 5.0); + // CPPUNIT_ASSERT(_delaydetect.correlate(signal, signal, 10) == 285.0); + + _delaydetect.crossCorrelate(ref, signal, result, 3, 10); + + std::cout << std::endl; + + double tmp; + for (int i = 0; i < 10; i++) { + tmp = result[i]-expected[i]; + std::cout << "Result: " << result[i] << ", Expected: " << expected[i] << ", Delta: " << tmp << std::endl; + //delayif(tmp < 0.0) + // CPPUNIT_ASSERT (tmp > -0.1); + //else + // CPPUNIT_ASSERT(tmp < 0.1); + } + + } diff --git a/sflphone-common/test/delaydetectiontest.h b/sflphone-common/test/delaydetectiontest.h index bca27ee6ea..7de2dd3d32 100644 --- a/sflphone-common/test/delaydetectiontest.h +++ b/sflphone-common/test/delaydetectiontest.h @@ -58,6 +58,7 @@ // #include "user_cfg.h" +#include "audio/delaydetection.h" #ifndef _DELAYDETECTION_TEST_ #define _DELAYDETECTION_TEST_ @@ -82,6 +83,10 @@ class DelayDetectionTest : public CppUnit::TestCase { inline void tearDown(); void testCrossCorrelation(); + + private: + + DelayDetection _delaydetect; }; -- GitLab From 404ce6917d1dc1c31b60ff1cd99c42653bd62277 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Mon, 14 Jun 2010 10:29:40 -0400 Subject: [PATCH 068/197] [#3543] Implemented normalized crosscorrelation with unit tests --- sflphone-common/src/audio/delaydetection.cpp | 86 ++++++++------------ sflphone-common/test/delaydetectiontest.cpp | 13 ++- 2 files changed, 40 insertions(+), 59 deletions(-) diff --git a/sflphone-common/src/audio/delaydetection.cpp b/sflphone-common/src/audio/delaydetection.cpp index 7c0df0c6d3..e93a574a4b 100644 --- a/sflphone-common/src/audio/delaydetection.cpp +++ b/sflphone-common/src/audio/delaydetection.cpp @@ -49,73 +49,55 @@ int DelayDetection::process(SFLDataFormat *intputData, SFLDataFormat *outputData void DelayDetection::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes) {} -void DelayDetection::crossCorrelate(double *ref, double *seg, double *res, short refSize, short segSize) -{ +void DelayDetection::crossCorrelate(double *ref, double *seg, double *res, short refSize, short segSize) { - _debug("CrossCorrelate"); + int counter = 0; - // Output has same size as the - short rsize = refSize; - short ssize = segSize; + // Output has same size as the + short rsize = refSize; + short ssize = segSize; short tmpsize = segSize-refSize+1; - // perform autocorrelation on reference signal + // perform autocorrelation on reference signal double acref = correlate(ref, ref, rsize); - double acseg = 0.0; - double r; - while(--tmpsize) { - acseg = correlate(seg+tmpsize, seg+tmpsize, rsize); - res[ssize] = correlate(ref, seg+tmpsize, rsize); - r = sqrt(acref*acseg); - if(r < 0.0001) - res[ssize] = 0.0; - else - res[ssize] = res[ssize] / r; - --ssize; + // perform crossrelation on signal + double acseg = 0.0; + double r; + while(--tmpsize) { + --ssize; + acseg = correlate(seg+tmpsize, seg+tmpsize, rsize); + res[ssize] = correlate(ref, seg+tmpsize, rsize); + r = sqrt(acref*acseg); + + if(r < 0.0001) + res[ssize] = 0.0; + else + res[ssize] = res[ssize] / r; } - - _debug("----------------start------------------"); - - for (int j = 0; j < 10; j++) - _debug("segment: %f", seg[j]); - - seg[0] = 0.0; - // zerro padded region - int i = 0; - while(rsize) { - _debug("rsize: %i, ssize: %i", rsize, ssize); - acref = correlate(ref, ref, refSize); - _debug("acref: %f", acref); - acseg = correlate(seg, seg, rsize); - _debug("acseg: %f", acseg); - res[ssize] = correlate(ref+rsize, seg, rsize); - _debug("res[ssize]: %f", res[ssize]); - r = sqrt(acref*acseg); - _debug("r: %f", r); - if(r < 0.0001) - res[ssize] = 0.0; - else - res[ssize] = res[ssize] / r; - --ssize; - --rsize; - ++i; + // perform crosscorrelation on zerro padded region + int i = 0; + while(rsize) { + acseg = correlate(seg, seg, rsize); + res[ssize-1] = correlate(ref+i, seg, rsize); + r = sqrt(acref*acseg); + + if(r < 0.0001) + res[ssize-1] = 0.0; + else + res[ssize-1] = res[ssize-1] / r; + + --rsize; + --ssize; + ++i; } - } - double DelayDetection::correlate(double *sig1, double *sig2, short size) { - _debug("Correlate"); - short s = size; double ac = 0.0; - - for(int i = size-1; i >= 0; i--) { - _debug(" %i: s1, %f, s2 %f", i, sig1[i], sig2[i]); - } while(s--) ac += sig1[s]*sig2[s]; diff --git a/sflphone-common/test/delaydetectiontest.cpp b/sflphone-common/test/delaydetectiontest.cpp index b45ccddbe8..1b523db7c6 100644 --- a/sflphone-common/test/delaydetectiontest.cpp +++ b/sflphone-common/test/delaydetectiontest.cpp @@ -46,8 +46,8 @@ void DelayDetectionTest::testCrossCorrelation() double result[10]; double expected[10] = {0.0, 0.89442719, 1.0, 0.95618289, 0.91350028, 0.88543774, 0.86640023, 0.85280287, 0.8426548, 0.83480969}; - // CPPUNIT_ASSERT(_delaydetect.correlate(ref, ref, 3) == 5.0); - // CPPUNIT_ASSERT(_delaydetect.correlate(signal, signal, 10) == 285.0); + CPPUNIT_ASSERT(_delaydetect.correlate(ref, ref, 3) == 5.0); + CPPUNIT_ASSERT(_delaydetect.correlate(signal, signal, 10) == 285.0); _delaydetect.crossCorrelate(ref, signal, result, 3, 10); @@ -56,11 +56,10 @@ void DelayDetectionTest::testCrossCorrelation() double tmp; for (int i = 0; i < 10; i++) { tmp = result[i]-expected[i]; - std::cout << "Result: " << result[i] << ", Expected: " << expected[i] << ", Delta: " << tmp << std::endl; - //delayif(tmp < 0.0) - // CPPUNIT_ASSERT (tmp > -0.1); - //else - // CPPUNIT_ASSERT(tmp < 0.1); + if(tmp < 0.0) + CPPUNIT_ASSERT (tmp > -0.001); + else + CPPUNIT_ASSERT(tmp < 0.001); } -- GitLab From d7a2b23d4097e42947c0b1f4732d4e35582741bc Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Mon, 14 Jun 2010 17:21:01 -0400 Subject: [PATCH 069/197] [#3507] Implement FIR general filter with variable number of coefficient --- sflphone-common/src/audio/dcblocker.cpp | 25 ------ sflphone-common/src/audio/dcblocker.h | 46 ----------- sflphone-common/src/audio/delaydetection.cpp | 87 +++++++++++++------- sflphone-common/src/audio/delaydetection.h | 47 +++++++++++ 4 files changed, 104 insertions(+), 101 deletions(-) diff --git a/sflphone-common/src/audio/dcblocker.cpp b/sflphone-common/src/audio/dcblocker.cpp index 522faef890..bef34f6a51 100644 --- a/sflphone-common/src/audio/dcblocker.cpp +++ b/sflphone-common/src/audio/dcblocker.cpp @@ -30,31 +30,6 @@ #include "dcblocker.h" -FirFilter::FirFilter(std::vector<double> ir) : _impulseResponse(ir), - _length(ir.size()), - _count(0) -{} - -FirFilter::~FirFilter() {} - -int FirFilter::getOutputSample(int inputSample) -{ - _delayLine[_count] = (double)inputSample; - double result = 0.0; - int index = _count; - for(int i = 0; i < _length; i++) { - result = result + _impulseResponse[i] * _delayLine[index--]; - if(index < 0) - index = _length-1; - } - _count++; - if(_count >= _length) - _count = 0; - - return (int)result; -} - - DcBlocker::DcBlocker() : _y(0), _x(0), _xm1(0), _ym1(0) {} DcBlocker::~DcBlocker() {} diff --git a/sflphone-common/src/audio/dcblocker.h b/sflphone-common/src/audio/dcblocker.h index 20075566cd..8d53688c19 100644 --- a/sflphone-common/src/audio/dcblocker.h +++ b/sflphone-common/src/audio/dcblocker.h @@ -36,52 +36,6 @@ #include <vector> -#define MAXFILTERSIZE 100 - -class FirFilter { - - public: - - /** - * Constructor for this class - */ - FirFilter(std::vector<double> ir); - - /** - * SDestructor for this class - */ - ~FirFilter(); - - - private: - - /** - * Length of the filter - */ - int _length; - - /** - * Coefficient of the filter - */ - std::vector<double> _impulseResponse; - - /** - * Circular buffer - */ - double _delayLine[MAXFILTERSIZE]; - - /** - * Counter - */ - int _count; - - /** - * Perform filtering on one sample - */ - int getOutputSample(int inputSample); - -}; - class DcBlocker : public Algorithm { public: diff --git a/sflphone-common/src/audio/delaydetection.cpp b/sflphone-common/src/audio/delaydetection.cpp index e93a574a4b..0de19b0c75 100644 --- a/sflphone-common/src/audio/delaydetection.cpp +++ b/sflphone-common/src/audio/delaydetection.cpp @@ -33,6 +33,31 @@ #include "delaydetection.h" #include "math.h" +FirFilter::FirFilter(std::vector<double> ir) : _impulseResponse(ir), + _length(ir.size()), + _count(0) +{} + +FirFilter::~FirFilter() {} + +int FirFilter::getOutputSample(int inputSample) +{ + _delayLine[_count] = (double)inputSample; + double result = 0.0; + int index = _count; + for(int i = 0; i < _length; i++) { + result = result + _impulseResponse[i] * _delayLine[index--]; + if(index < 0) + index = _length-1; + } + _count++; + if(_count >= _length) + _count = 0; + + return (int)result; +} + + DelayDetection::DelayDetection(){} DelayDetection::~DelayDetection(){} @@ -43,7 +68,9 @@ void DelayDetection::putData(SFLDataFormat *inputData, int nbBytes) {} int DelayDetection::getData(SFLDataFormat *outputData) { return 0; } -void DelayDetection::process(SFLDataFormat *inputData, int nbBytes) {} +void DelayDetection::process(SFLDataFormat *inputData, int nbBytes) { + +} int DelayDetection::process(SFLDataFormat *intputData, SFLDataFormat *outputData, int nbBytes) { return 0; } @@ -53,44 +80,44 @@ void DelayDetection::crossCorrelate(double *ref, double *seg, double *res, short int counter = 0; - // Output has same size as the - short rsize = refSize; - short ssize = segSize; + // Output has same size as the + short rsize = refSize; + short ssize = segSize; short tmpsize = segSize-refSize+1; - // perform autocorrelation on reference signal + // perform autocorrelation on reference signal double acref = correlate(ref, ref, rsize); - // perform crossrelation on signal - double acseg = 0.0; - double r; - while(--tmpsize) { - --ssize; - acseg = correlate(seg+tmpsize, seg+tmpsize, rsize); - res[ssize] = correlate(ref, seg+tmpsize, rsize); + // perform crossrelation on signal + double acseg = 0.0; + double r; + while(--tmpsize) { + --ssize; + acseg = correlate(seg+tmpsize, seg+tmpsize, rsize); + res[ssize] = correlate(ref, seg+tmpsize, rsize); r = sqrt(acref*acseg); - if(r < 0.0001) - res[ssize] = 0.0; - else - res[ssize] = res[ssize] / r; + if(r < 0.0001) + res[ssize] = 0.0; + else + res[ssize] = res[ssize] / r; } - // perform crosscorrelation on zerro padded region - int i = 0; - while(rsize) { - acseg = correlate(seg, seg, rsize); - res[ssize-1] = correlate(ref+i, seg, rsize); - r = sqrt(acref*acseg); - - if(r < 0.0001) - res[ssize-1] = 0.0; - else - res[ssize-1] = res[ssize-1] / r; + // perform crosscorrelation on zerro padded region + int i = 0; + while(rsize) { + acseg = correlate(seg, seg, rsize); + res[ssize-1] = correlate(ref+i, seg, rsize); + r = sqrt(acref*acseg); + + if(r < 0.0001) + res[ssize-1] = 0.0; + else + res[ssize-1] = res[ssize-1] / r; - --rsize; - --ssize; - ++i; + --rsize; + --ssize; + ++i; } } double DelayDetection::correlate(double *sig1, double *sig2, short size) { diff --git a/sflphone-common/src/audio/delaydetection.h b/sflphone-common/src/audio/delaydetection.h index 30ae94d2ca..375684854e 100644 --- a/sflphone-common/src/audio/delaydetection.h +++ b/sflphone-common/src/audio/delaydetection.h @@ -40,6 +40,53 @@ // Segment length in ms for correlation #define MAX_DELAY 150 +#define MAXFILTERSIZE 100 + +class FirFilter { + + public: + + /** + * Constructor for this class + */ + FirFilter(std::vector<double> ir); + + /** + * SDestructor for this class + */ + ~FirFilter(); + + + private: + + /** + * Length of the filter + */ + int _length; + + /** + * Coefficient of the filter + */ + std::vector<double> _impulseResponse; + + /** + * Circular buffer + */ + double _delayLine[MAXFILTERSIZE]; + + /** + * Counter + */ + int _count; + + /** + * Perform filtering on one sample + */ + int getOutputSample(int inputSample); + +}; + + class DelayDetection : public Algorithm { public: -- GitLab From 20658dad73d5c2d56bfd363360509589dabad88e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Mon, 14 Jun 2010 18:59:36 -0400 Subject: [PATCH 070/197] [#3507] Add downsampling decimation filter --- sflphone-common/src/audio/delaydetection.cpp | 54 +++++++++++++++++--- sflphone-common/src/audio/delaydetection.h | 37 +++++++++++--- 2 files changed, 78 insertions(+), 13 deletions(-) diff --git a/sflphone-common/src/audio/delaydetection.cpp b/sflphone-common/src/audio/delaydetection.cpp index 0de19b0c75..a82a4f9e9f 100644 --- a/sflphone-common/src/audio/delaydetection.cpp +++ b/sflphone-common/src/audio/delaydetection.cpp @@ -40,13 +40,13 @@ FirFilter::FirFilter(std::vector<double> ir) : _impulseResponse(ir), FirFilter::~FirFilter() {} -int FirFilter::getOutputSample(int inputSample) +float FirFilter::getOutputSample(float inputSample) { - _delayLine[_count] = (double)inputSample; + _taps[_count] = inputSample; double result = 0.0; int index = _count; for(int i = 0; i < _length; i++) { - result = result + _impulseResponse[i] * _delayLine[index--]; + result = result + _impulseResponse[i] * _taps[index--]; if(index < 0) index = _length-1; } @@ -54,17 +54,28 @@ int FirFilter::getOutputSample(int inputSample) if(_count >= _length) _count = 0; - return (int)result; + return result; } -DelayDetection::DelayDetection(){} +DelayDetection::DelayDetection(std::vector<double> ir) : _decimationFilter(ir) {} DelayDetection::~DelayDetection(){} void DelayDetection::reset() {} -void DelayDetection::putData(SFLDataFormat *inputData, int nbBytes) {} +void DelayDetection::putData(SFLDataFormat *inputData, int nbBytes) +{ + int nbSamples = nbBytes/sizeof(SFLDataFormat); + + float tmp[nbSamples]; + + float down[nbSamples]; + + convertInt16ToFloat32(inputData, tmp, nbSamples); + + downsampleData(tmp, down, nbSamples, 8); +} int DelayDetection::getData(SFLDataFormat *outputData) { return 0; } @@ -120,6 +131,7 @@ void DelayDetection::crossCorrelate(double *ref, double *seg, double *res, short ++i; } } + double DelayDetection::correlate(double *sig1, double *sig2, short size) { short s = size; @@ -130,3 +142,33 @@ double DelayDetection::correlate(double *sig1, double *sig2, short size) { return ac; } + + +void DelayDetection::convertInt16ToFloat32(SFLDataFormat *input, float *output, int nbSamples) { + + // factor is 1/(2^15), used to rescale the short int range to the + // [-1.0 - 1.0] float range. +#define S2F_FACTOR .000030517578125f; + int len = nbSamples; + + while(len) { + len--; + output[len] = (float)input[len] * S2F_FACTOR; + } +} + + + +void DelayDetection::downsampleData(float *input, float *output, int nbSamples, int factor) { + + + float tmp[nbSamples]; + + for(int i = 0; i < nbSamples; i++) { + tmp[i] = _decimationFilter.getOutputSample(input[i]); + } + + for(int i = 0; i < nbSamples; i+=factor) { + output[i] = tmp[i]; + } +} diff --git a/sflphone-common/src/audio/delaydetection.h b/sflphone-common/src/audio/delaydetection.h index 375684854e..05a144df64 100644 --- a/sflphone-common/src/audio/delaydetection.h +++ b/sflphone-common/src/audio/delaydetection.h @@ -40,6 +40,9 @@ // Segment length in ms for correlation #define MAX_DELAY 150 +// Size of internal buffers in samples +#define DELAY_BUFF_SIZE 150*8000/1000 + #define MAXFILTERSIZE 100 class FirFilter { @@ -56,6 +59,11 @@ class FirFilter { */ ~FirFilter(); + /** + * Perform filtering on one sample + */ + float getOutputSample(float inputSample); + private: @@ -72,17 +80,12 @@ class FirFilter { /** * Circular buffer */ - double _delayLine[MAXFILTERSIZE]; + double _taps[MAXFILTERSIZE]; /** * Counter */ int _count; - - /** - * Perform filtering on one sample - */ - int getOutputSample(int inputSample); }; @@ -91,7 +94,7 @@ class DelayDetection : public Algorithm { public: - DelayDetection(); + DelayDetection(std::vector<double> ir); ~DelayDetection(); @@ -119,6 +122,10 @@ class DelayDetection : public Algorithm { */ double correlate(double *sig1, double *sig2, short size); + void convertInt16ToFloat32(SFLDataFormat *input, float *ouput, int nbSamples); + + void downsampleData(float *input, float *output, int nbSamples, int factor); + /** * Segment size in samples for correlation */ @@ -129,6 +136,22 @@ class DelayDetection : public Algorithm { */ short _correlationSize; + float _spkrReference[DELAY_BUFF_SIZE]; + + float _capturedData[DELAY_BUFF_SIZE]; + + float _spkrReferenceDown[DELAY_BUFF_SIZE]; + + float _captureDataDown[DELAY_BUFF_SIZE]; + + float _spkrReferenceFilter[DELAY_BUFF_SIZE]; + + float _captureDataFilter[DELAY_BUFF_SIZE]; + + // int myints[] = {16,2,77,29}; + // vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) ); + + FirFilter _decimationFilter; public: -- GitLab From 76f88d17ab0caf2c2a58b80484184454f24c183b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Tue, 15 Jun 2010 12:00:21 -0400 Subject: [PATCH 071/197] [#3544] Send microphone data even if no speakers --- sflphone-common/src/audio/echocancel.cpp | 78 ++++++++++++++---------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 8b2f6130ab..9383c534e7 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -65,9 +65,9 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _debug("EchoCancel: Instantiate echo canceller"); - micFile = new ofstream("micData", ofstream::binary); - echoFile = new ofstream("echoData", ofstream::binary); - spkrFile = new ofstream("spkrData", ofstream::binary); + // micFile = new ofstream("micData", ofstream::binary); + // echoFile = new ofstream("echoData", ofstream::binary); + // spkrFile = new ofstream("spkrData", ofstream::binary); micLevelData = new ofstream("micLevelData", ofstream::binary); spkrLevelData = new ofstream("spkrLevelData", ofstream::binary); @@ -120,6 +120,7 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), } + EchoCancel::~EchoCancel() { _debug("EchoCancel: Delete echo canceller"); @@ -134,23 +135,21 @@ EchoCancel::~EchoCancel() speex_preprocess_state_destroy(_noiseState); #endif - micFile->close(); - spkrFile->close(); - echoFile->close(); + // micFile->close(); + // spkrFile->close(); + // echoFile->close(); - delete micFile; - delete spkrFile; - delete echoFile; + // delete micFile; + // delete spkrFile; + // delete echoFile; micLevelData->close(); spkrLevelData->close(); delete micLevelData; delete spkrLevelData; - - - } + void EchoCancel::reset() { _debug("EchoCancel: Reset internal state, Sampling rate %d, Frame size %d", _samplingRate, _smplPerFrame); @@ -225,6 +224,7 @@ void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) _spkrData->Put(inputData, nbBytes); } + int EchoCancel::getData(SFLDataFormat *outputData) { @@ -240,6 +240,7 @@ int EchoCancel::getData(SFLDataFormat *outputData) void EchoCancel::process(SFLDataFormat *data, int nbBytes) {} + int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { @@ -266,38 +267,51 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int int nbFrame = 0; // Get data from mic and speaker internal buffer - while((spkrAvail >= byteSize) && (micAvail >= byteSize)) { + // while((spkrAvail >= byteSize) && (micAvail >= byteSize)) { + while(micAvail >= byteSize) { + + if(spkrAvail >= byteSize) { - // get synchronized data - _spkrData->Get(_tmpSpkr, byteSize); - _micData->Get(_tmpMic, byteSize); + // get synchronized data + _spkrData->Get(_tmpSpkr, byteSize); + _micData->Get(_tmpMic, byteSize); - micFile->write((const char *)_tmpMic, byteSize); - spkrFile->write((const char *)_tmpSpkr, byteSize); + // micFile->write((const char *)_tmpMic, byteSize); + // spkrFile->write((const char *)_tmpSpkr, byteSize); #ifdef HAVE_SPEEXDSP_LIB - // Remove noise - if(_noiseActive) - speex_preprocess_run(_noiseState, _tmpMic); + // Remove noise + if(_noiseActive) + speex_preprocess_run(_noiseState, _tmpMic); #endif - // Processed echo cancellation - performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); + // Processed echo cancellation + performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); - echoFile->write((const char *)_tmpOut, byteSize); + // echoFile->write((const char *)_tmpOut, byteSize); - bcopy(_tmpOut, outputData+(nbFrame*_smplPerFrame), byteSize); + bcopy(_tmpOut, outputData+(nbFrame*_smplPerFrame), byteSize); - // used to sync with speaker - _processedByte += byteSize; + // used to sync with speaker + _processedByte += byteSize; - spkrAvail = _spkrData->AvailForGet(); - micAvail = _micData->AvailForGet(); + spkrAvail = _spkrData->AvailForGet(); + micAvail = _micData->AvailForGet(); - // increment nb of frame processed - ++nbFrame; - } + // increment nb of frame processed + ++nbFrame; + } + else { + _micData->Get(_tmpMic, byteSize); + bcopy(_tmpOut, outputData+(nbFrame*_smplPerFrame), byteSize); + ++nbFrame; + + spkrAvail = _spkrData->AvailForGet(); + micAvail = _micData->AvailForGet(); + } + + } return nbFrame * _smplPerFrame; } -- GitLab From 0939e3ccf4e10642d2e5d2086f7da6343c9c97ac Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Tue, 15 Jun 2010 12:02:56 -0400 Subject: [PATCH 072/197] [#3507] Add downsampling and band pass filters --- sflphone-common/src/audio/delaydetection.cpp | 45 ++++++++++++++++---- sflphone-common/src/audio/delaydetection.h | 8 +++- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/sflphone-common/src/audio/delaydetection.cpp b/sflphone-common/src/audio/delaydetection.cpp index a82a4f9e9f..03fbf32eaf 100644 --- a/sflphone-common/src/audio/delaydetection.cpp +++ b/sflphone-common/src/audio/delaydetection.cpp @@ -33,7 +33,18 @@ #include "delaydetection.h" #include "math.h" -FirFilter::FirFilter(std::vector<double> ir) : _impulseResponse(ir), + +// decimation filter coefficient +float decimationCoefs[] = {0.1, 0.1, 0.1, 0.1, 0.1}; +std::vector<double> ird(decimationCoefs, decimationCoefs + sizeof(decimationCoefs)/sizeof(float)); + + +// decimation filter coefficient +float bandpassCoefs[] = {0.1, 0.1, 0.1, 0.1, 0.1}; +std::vector<double> irb(bandpassCoefs, bandpassCoefs + sizeof(bandpassCoefs)/sizeof(float)); + + +FirFilter::FirFilter(std::vector<double> ir) : _impulseResponse(ir), _length(ir.size()), _count(0) {} @@ -58,7 +69,7 @@ float FirFilter::getOutputSample(float inputSample) } -DelayDetection::DelayDetection(std::vector<double> ir) : _decimationFilter(ir) {} +DelayDetection::DelayDetection() : _decimationFilter(ird), _bandpassFilter(irb) {} DelayDetection::~DelayDetection(){} @@ -69,18 +80,25 @@ void DelayDetection::putData(SFLDataFormat *inputData, int nbBytes) int nbSamples = nbBytes/sizeof(SFLDataFormat); float tmp[nbSamples]; - float down[nbSamples]; convertInt16ToFloat32(inputData, tmp, nbSamples); - downsampleData(tmp, down, nbSamples, 8); + bandpassFilter(down, nbSamples/8); } int DelayDetection::getData(SFLDataFormat *outputData) { return 0; } void DelayDetection::process(SFLDataFormat *inputData, int nbBytes) { - + + int nbSamples = nbBytes/sizeof(SFLDataFormat); + + float tmp[nbSamples]; + float down[nbSamples]; + + convertInt16ToFloat32(inputData, tmp, nbSamples); + downsampleData(tmp, down, nbSamples, 8); + bandpassFilter(down, nbSamples/8); } int DelayDetection::process(SFLDataFormat *intputData, SFLDataFormat *outputData, int nbBytes) { return 0; } @@ -158,9 +176,7 @@ void DelayDetection::convertInt16ToFloat32(SFLDataFormat *input, float *output, } - void DelayDetection::downsampleData(float *input, float *output, int nbSamples, int factor) { - float tmp[nbSamples]; @@ -168,7 +184,18 @@ void DelayDetection::downsampleData(float *input, float *output, int nbSamples, tmp[i] = _decimationFilter.getOutputSample(input[i]); } - for(int i = 0; i < nbSamples; i+=factor) { - output[i] = tmp[i]; + int j; + for(j=_remainingIndex; j<nbSamples; j+=factor) { + output[j] = tmp[j]; + } + _remainingIndex = j - nbSamples; + +} + + +void DelayDetection::bandpassFilter(float *input, int nbSamples) { + + for(int i = 0; i < nbSamples; i++) { + input[i] = _bandpassFilter.getOutputSample(input[i]); } } diff --git a/sflphone-common/src/audio/delaydetection.h b/sflphone-common/src/audio/delaydetection.h index 05a144df64..3919fc7ba5 100644 --- a/sflphone-common/src/audio/delaydetection.h +++ b/sflphone-common/src/audio/delaydetection.h @@ -94,7 +94,7 @@ class DelayDetection : public Algorithm { public: - DelayDetection(std::vector<double> ir); + DelayDetection(); ~DelayDetection(); @@ -126,6 +126,8 @@ class DelayDetection : public Algorithm { void downsampleData(float *input, float *output, int nbSamples, int factor); + void bandpassFilter(float *input, int nbSamples); + /** * Segment size in samples for correlation */ @@ -153,6 +155,10 @@ class DelayDetection : public Algorithm { FirFilter _decimationFilter; + FirFilter _bandpassFilter; + + int _remainingIndex; + public: friend class DelayDetectionTest; -- GitLab From 91871d4c2f7f3f8278a90f31753828df7c53e108 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Tue, 15 Jun 2010 13:32:18 -0400 Subject: [PATCH 073/197] [#3507] Handle case when no spkr data is available, discard outdated ones --- sflphone-common/src/audio/echocancel.cpp | 69 ++++++++++++++++++++---- sflphone-common/src/audio/echocancel.h | 6 +++ 2 files changed, 64 insertions(+), 11 deletions(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 9383c534e7..f603899d69 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -303,15 +303,23 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int } else { _micData->Get(_tmpMic, byteSize); + + performEchoCancelNoSpkr(_tmpMic, _tmpOut); + bcopy(_tmpOut, outputData+(nbFrame*_smplPerFrame), byteSize); ++nbFrame; + } spkrAvail = _spkrData->AvailForGet(); micAvail = _micData->AvailForGet(); + } - } - + // if spkrAvail is twice the size of a frame discard it, this data is late and won't be used + if(spkrAvail > (2*byteSize)) { + _debug("EchoCancel: Discard echo cancel"); + _spkrData->Discard(spkrAvail-(2*byteSize)); } + return nbFrame * _smplPerFrame; } @@ -363,32 +371,69 @@ void EchoCancel::performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDa } +void EchoCancel::performEchoCancelNoSpkr(SFLDataFormat *micData, SFLDataFormat *outputData) { -void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData) { + for(int k = 0; k < _nbSegmentPerFrame; k++) { + + updateMicLevel(micData); + + _micLevel = getMaxAmplitude(_avgMicLevelHist, _micHistoryLength)/6; + if(_micLevel > MIN_SIG_LEVEL) { + increaseFactor(0.2); + } + + // lowpass filtering + float amplify = (_lastAmplFactor + _amplFactor) / 2; + _lastAmplFactor = _amplFactor; + + if(!_echoActive) + amplify = 1.0; + + amplifySignal(micData+(k*_smplPerSeg), outputData+(k*_smplPerSeg), amplify); + } + +} + +void EchoCancel::updateMicLevel(SFLDataFormat *micData) { - // TODO: we should find a way to normalize signal at this point int micLvl = computeAmplitudeLevel(micData, _smplPerSeg); - int spkrLvl = computeAmplitudeLevel(spkrData, _smplPerSeg); - SFLDataFormat tempSpkrLevel[_smplPerSeg]; SFLDataFormat tempMicLevel[_smplPerSeg]; - _spkrLevelMem = estimatePower(spkrData, tempSpkrLevel, _smplPerSeg, _spkrLevelMem); _micLevelMem = estimatePower(micData, tempMicLevel, _smplPerSeg, _micLevelMem); - // Add 1 to make sure we are not dividing by 0 _avgMicLevelHist[_micHistCnt++] = micLvl+1; - _avgSpkrLevelHist[_spkrHistCnt++] = spkrLvl+1; if(_micHistCnt >= _micHistoryLength) _micHistCnt = 0; + micLevelData->write((const char*)tempMicLevel, sizeof(SFLDataFormat)*_smplPerSeg); +} + + +void EchoCancel::updateSpkrLevel(SFLDataFormat *spkrData) { + + int spkrLvl = computeAmplitudeLevel(spkrData, _smplPerSeg); + + SFLDataFormat tempSpkrLevel[_smplPerSeg]; + + _spkrLevelMem = estimatePower(spkrData, tempSpkrLevel, _smplPerSeg, _spkrLevelMem); + + _avgSpkrLevelHist[_spkrHistCnt++] = spkrLvl+1; + if(_spkrHistCnt >= _spkrHistoryLength) _spkrHistCnt = 0; - - micLevelData->write((const char*)tempMicLevel, sizeof(SFLDataFormat)*_smplPerSeg); spkrLevelData->write((const char*)tempSpkrLevel, sizeof(SFLDataFormat)*_smplPerSeg); +} + + +void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData) { + + // Add 1 to make sure we are not dividing by 0 + updateMicLevel(micData); + updateSpkrLevel(spkrData); + /* // if adaptation done, stop here // if(_adaptDone) @@ -426,6 +471,8 @@ void EchoCancel::updateEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrDat } + + int EchoCancel::computeAmplitudeLevel(SFLDataFormat *data, int size) { int level = 0; diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 32b664a1d4..fd0679a554 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -131,6 +131,12 @@ class EchoCancel : public Algorithm { */ void performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData); + void performEchoCancelNoSpkr(SFLDataFormat *micData, SFLDataFormat *outputData); + + void updateMicLevel(SFLDataFormat *micData); + + void updateSpkrLevel(SFLDataFormat *spkrData); + /** * Update speaker level array for both micData and spkrData */ -- GitLab From 47f14109feb2db2d9d0f69b13c26f8d0cfbfb251 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Tue, 15 Jun 2010 14:11:46 -0400 Subject: [PATCH 074/197] [#3507] Add comments and documentation --- sflphone-common/src/audio/echocancel.h | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index fd0679a554..2b4cba1e6f 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -116,12 +116,24 @@ class EchoCancel : public Algorithm { */ void setSamplingRate(int smplRate); + /** + * Set echo canceller state to active/deactive + */ void setEchoCancelState(bool state) { _echoActive = state; } + /** + * Return the echo canceller state + */ bool getEchoCancelState(void) { return _echoActive; } + /** + * Set the noise suppression state to active/deactive + */ void setNoiseSuppressState(bool state) { _noiseActive = state; } + /** + * Return the noise suppression state + */ bool getNoiseSuppressState(void) { return _noiseActive; } private: @@ -131,10 +143,19 @@ class EchoCancel : public Algorithm { */ void performEchoCancel(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData); + /** + * This is the fall back method in case there is no spkr data available + */ void performEchoCancelNoSpkr(SFLDataFormat *micData, SFLDataFormat *outputData); + /** + * Compute current instantaneous microphone signal power and store it in internal array + */ void updateMicLevel(SFLDataFormat *micData); + /** + * Compute current instantaneous spkeaker signal power and store uit in internal array + */ void updateSpkrLevel(SFLDataFormat *spkrData); /** @@ -176,8 +197,14 @@ class EchoCancel : public Algorithm { */ void decreaseFactor(); + /** + * Perform simple correlation between data1 and data2 + */ int performCorrelation(int *data1, int *data2, int size); + /** + * Return maximum in data index + */ int getMaximumIndex(int *data, int size); /** @@ -300,8 +327,14 @@ class EchoCancel : public Algorithm { */ int _adaptCnt; + /** + * Factor for power estimation + */ float _alpha; + /** + * Termporary spkr level memories + */ SFLDataFormat _spkrLevelMem; SFLDataFormat _micLevelMem; -- GitLab From b3c2bf0aeb87048e689d3de53dedb93fe4a8b59a Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Tue, 15 Jun 2010 18:46:34 -0400 Subject: [PATCH 075/197] [#3507] Unit test delay detection --- sflphone-common/src/audio/delaydetection.cpp | 177 ++++++++++++++++--- sflphone-common/src/audio/delaydetection.h | 52 ++++-- sflphone-common/src/audio/echocancel.cpp | 4 + sflphone-common/src/audio/echocancel.h | 5 +- sflphone-common/test/delaydetectiontest.cpp | 103 ++++++++++- sflphone-common/test/delaydetectiontest.h | 9 + 6 files changed, 300 insertions(+), 50 deletions(-) diff --git a/sflphone-common/src/audio/delaydetection.cpp b/sflphone-common/src/audio/delaydetection.cpp index 03fbf32eaf..08535d9b52 100644 --- a/sflphone-common/src/audio/delaydetection.cpp +++ b/sflphone-common/src/audio/delaydetection.cpp @@ -32,22 +32,38 @@ #include "delaydetection.h" #include "math.h" - +// #include <stdio.h> +#include <string.h> // decimation filter coefficient -float decimationCoefs[] = {0.1, 0.1, 0.1, 0.1, 0.1}; +float decimationCoefs[] = {-0.09870257, 0.07473655, 0.05616626, 0.04448337, 0.03630817, 0.02944626, + 0.02244098, 0.01463477, 0.00610982, -0.00266367, -0.01120109, -0.01873722, + -0.02373243, -0.02602213, -0.02437806, -0.01869834, -0.00875287, 0.00500204, + 0.02183252, 0.04065763, 0.06015944, 0.0788299, 0.09518543, 0.10799179, + 0.1160644, 0.12889288, 0.1160644, 0.10799179, 0.09518543, 0.0788299, + 0.06015944, 0.04065763, 0.02183252, 0.00500204, -0.00875287, -0.01869834, + -0.02437806, -0.02602213, -0.02373243, -0.01873722, -0.01120109, -0.00266367, + 0.00610982, 0.01463477, 0.02244098, 0.02944626, 0.03630817, 0.04448337, + 0.05616626, 0.07473655, -0.09870257}; std::vector<double> ird(decimationCoefs, decimationCoefs + sizeof(decimationCoefs)/sizeof(float)); // decimation filter coefficient -float bandpassCoefs[] = {0.1, 0.1, 0.1, 0.1, 0.1}; +float bandpassCoefs[] = {0.06278034, -0.0758545, -0.02274943, -0.0084497, 0.0702427, 0.05986113, + 0.06436469, -0.02412049, -0.03433526, -0.07568665, -0.03214543, -0.07236507, + -0.06979052, -0.12446371, -0.05530828, 0.00947243, 0.15294699, 0.17735563, + 0.15294699, 0.00947243, -0.05530828, -0.12446371, -0.06979052, -0.07236507, + -0.03214543, -0.07568665, -0.03433526, -0.02412049, 0.06436469, 0.05986113, + 0.0702427, -0.0084497, -0.02274943, -0.0758545, 0.06278034}; std::vector<double> irb(bandpassCoefs, bandpassCoefs + sizeof(bandpassCoefs)/sizeof(float)); -FirFilter::FirFilter(std::vector<double> ir) : _impulseResponse(ir), - _length(ir.size()), +FirFilter::FirFilter(std::vector<double> ir) : _length(ir.size()), + _impulseResponse(ir), _count(0) -{} +{ + memset(_taps, 0, sizeof(double)*MAXFILTERSIZE); +} FirFilter::~FirFilter() {} @@ -68,65 +84,154 @@ float FirFilter::getOutputSample(float inputSample) return result; } +void FirFilter::reset(void) +{ + for(int i = 0; i < _length; i++) { + _impulseResponse[i] = 0.0; + } +} -DelayDetection::DelayDetection() : _decimationFilter(ird), _bandpassFilter(irb) {} + +DelayDetection::DelayDetection() : _internalState(WaitForSpeaker), _decimationFilter(ird), _bandpassFilter(irb), _segmentSize(DELAY_BUFF_SIZE), _downsamplingFactor(8) +{ + _micDownSize = WINDOW_SIZE / _downsamplingFactor; + _spkrDownSize = DELAY_BUFF_SIZE / _downsamplingFactor; + + memset(_spkrReference, 0, sizeof(float)*WINDOW_SIZE*2); + memset(_capturedData, 0, sizeof(float)*DELAY_BUFF_SIZE*2); + memset(_spkrReferenceDown, 0, sizeof(float)*WINDOW_SIZE*2); + memset(_captureDataDown, 0, sizeof(float)*DELAY_BUFF_SIZE*2); + memset(_spkrReferenceFilter, 0, sizeof(float)*WINDOW_SIZE*2); + memset(_captureDataFilter, 0, sizeof(float)*DELAY_BUFF_SIZE*2); + memset(_correlationResult, 0, sizeof(float)*DELAY_BUFF_SIZE*2); + +} DelayDetection::~DelayDetection(){} -void DelayDetection::reset() {} +void DelayDetection::reset() +{ + _nbMicSampleStored = 0; + _nbSpkrSampleStored = 0; + + _decimationFilter.reset(); + _bandpassFilter.reset(); + + memset(_spkrReference, 0, sizeof(float)*WINDOW_SIZE*2); + memset(_capturedData, 0, sizeof(float)*DELAY_BUFF_SIZE*2); + memset(_spkrReferenceDown, 0, sizeof(float)*WINDOW_SIZE*2); + memset(_captureDataDown, 0, sizeof(float)*DELAY_BUFF_SIZE*2); + memset(_spkrReferenceFilter, 0, sizeof(float)*WINDOW_SIZE*2); + memset(_captureDataFilter, 0, sizeof(float)*DELAY_BUFF_SIZE*2); + memset(_correlationResult, 0, sizeof(float)*DELAY_BUFF_SIZE*2); + + _internalState = WaitForSpeaker; +} void DelayDetection::putData(SFLDataFormat *inputData, int nbBytes) { + + // Machine may already got a spkr and is waiting for mic or computing correlation + if(_nbSpkrSampleStored == WINDOW_SIZE) + return; + int nbSamples = nbBytes/sizeof(SFLDataFormat); + + if((_nbSpkrSampleStored + nbSamples) > WINDOW_SIZE) + nbSamples = WINDOW_SIZE - _nbSpkrSampleStored; + + + if (nbSamples) { + + float tmp[nbSamples]; + float down[nbSamples]; + + convertInt16ToFloat32(inputData, tmp, nbSamples); + memcpy(_spkrReference+_nbSpkrSampleStored, tmp, nbSamples*sizeof(float)); + + downsampleData(tmp, down, nbSamples, _downsamplingFactor); + bandpassFilter(down, nbSamples/_downsamplingFactor); + memcpy(_spkrReferenceDown+(_nbSpkrSampleStored/_downsamplingFactor), down, (nbSamples/_downsamplingFactor)*sizeof(float)); - float tmp[nbSamples]; - float down[nbSamples]; + _nbSpkrSampleStored += nbSamples; + + } + + // Update the state + _internalState = WaitForMic; - convertInt16ToFloat32(inputData, tmp, nbSamples); - downsampleData(tmp, down, nbSamples, 8); - bandpassFilter(down, nbSamples/8); } int DelayDetection::getData(SFLDataFormat *outputData) { return 0; } void DelayDetection::process(SFLDataFormat *inputData, int nbBytes) { + if(_internalState != WaitForMic) + return; + int nbSamples = nbBytes/sizeof(SFLDataFormat); - float tmp[nbSamples]; - float down[nbSamples]; + if((_nbMicSampleStored + nbSamples) > DELAY_BUFF_SIZE) + nbSamples = DELAY_BUFF_SIZE - _nbMicSampleStored; + + if(nbSamples) { + float tmp[nbSamples]; + float down[nbSamples]; + + convertInt16ToFloat32(inputData, tmp, nbSamples); + memcpy(_capturedData+_nbMicSampleStored, tmp, nbSamples); + + downsampleData(tmp, down, nbSamples, _downsamplingFactor); + bandpassFilter(down, nbSamples/_downsamplingFactor); + memcpy(_capturedData+(_nbMicSampleStored/_downsamplingFactor), tmp, nbSamples); + + _nbMicSampleStored += nbSamples; + + } + + if(_nbMicSampleStored == DELAY_BUFF_SIZE) + _internalState = ComputeCorrelation; + else + return; + + _debug("_spkrDownSize: %d, _micDownSize: %d", _spkrDownSize, _micDownSize); + crossCorrelate(_spkrReferenceDown, _captureDataDown, _correlationResult, _micDownSize, _spkrDownSize); + + int maxIndex = getMaxIndex(_correlationResult, _spkrDownSize); - convertInt16ToFloat32(inputData, tmp, nbSamples); - downsampleData(tmp, down, nbSamples, 8); - bandpassFilter(down, nbSamples/8); + _debug("MaxIndex: %d", maxIndex); + + reset(); } int DelayDetection::process(SFLDataFormat *intputData, SFLDataFormat *outputData, int nbBytes) { return 0; } void DelayDetection::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes) {} -void DelayDetection::crossCorrelate(double *ref, double *seg, double *res, short refSize, short segSize) { +void DelayDetection::crossCorrelate(float *ref, float *seg, float *res, int refSize, int segSize) { int counter = 0; // Output has same size as the - short rsize = refSize; - short ssize = segSize; - short tmpsize = segSize-refSize+1; + int rsize = refSize; + int ssize = segSize; + int tmpsize = segSize-refSize+1; // perform autocorrelation on reference signal - double acref = correlate(ref, ref, rsize); - + float acref = correlate(ref, ref, rsize); + _debug("acref: %f", acref); + // perform crossrelation on signal - double acseg = 0.0; - double r; + float acseg = 0.0; + float r; while(--tmpsize) { --ssize; acseg = correlate(seg+tmpsize, seg+tmpsize, rsize); + _debug("acseg: %f", acseg); res[ssize] = correlate(ref, seg+tmpsize, rsize); r = sqrt(acref*acseg); - if(r < 0.0001) + if(r < 0.0000001) res[ssize] = 0.0; else res[ssize] = res[ssize] / r; @@ -150,7 +255,7 @@ void DelayDetection::crossCorrelate(double *ref, double *seg, double *res, short } } -double DelayDetection::correlate(double *sig1, double *sig2, short size) { +double DelayDetection::correlate(float *sig1, float *sig2, short size) { short s = size; @@ -199,3 +304,19 @@ void DelayDetection::bandpassFilter(float *input, int nbSamples) { input[i] = _bandpassFilter.getOutputSample(input[i]); } } + + +int DelayDetection::getMaxIndex(float *data, int size) { + + float max = 0.0; + int k; + + for(int i = 0; i < size; i++) { + if(data[i] >= max) { + max = data[i]; + k = i; + } + } + + return k; +} diff --git a/sflphone-common/src/audio/delaydetection.h b/sflphone-common/src/audio/delaydetection.h index 3919fc7ba5..a7567b6c2e 100644 --- a/sflphone-common/src/audio/delaydetection.h +++ b/sflphone-common/src/audio/delaydetection.h @@ -41,10 +41,12 @@ #define MAX_DELAY 150 // Size of internal buffers in samples -#define DELAY_BUFF_SIZE 150*8000/1000 +#define DELAY_BUFF_SIZE MAX_DELAY*8000/1000 #define MAXFILTERSIZE 100 + + class FirFilter { public: @@ -64,6 +66,8 @@ class FirFilter { */ float getOutputSample(float inputSample); + void reset(void); + private: @@ -112,15 +116,22 @@ class DelayDetection : public Algorithm { private: + enum State { + WaitForSpeaker, + WaitForMic, + ComputeCorrelation + }; + + /** * Perform a normalized crosscorrelation between template and segment */ - void crossCorrelate(double *ref, double *seg, double *res, short refSize, short segSize); + void crossCorrelate(float *ref, float *seg, float *res, int refSize, int segSize); /** * Perform a correlation on specified signals (mac) */ - double correlate(double *sig1, double *sig2, short size); + double correlate(float *sig1, float *sig2, short size); void convertInt16ToFloat32(SFLDataFormat *input, float *ouput, int nbSamples); @@ -128,36 +139,49 @@ class DelayDetection : public Algorithm { void bandpassFilter(float *input, int nbSamples); + int getMaxIndex(float *data, int size); + + State _internalState; + + FirFilter _decimationFilter; + + FirFilter _bandpassFilter; + /** * Segment size in samples for correlation */ short _segmentSize; + int _downsamplingFactor; + /** * Resulting correlation size (s + w -1) */ short _correlationSize; - float _spkrReference[DELAY_BUFF_SIZE]; + float _spkrReference[WINDOW_SIZE*2]; - float _capturedData[DELAY_BUFF_SIZE]; + float _capturedData[DELAY_BUFF_SIZE*2]; - float _spkrReferenceDown[DELAY_BUFF_SIZE]; + float _spkrReferenceDown[WINDOW_SIZE*2]; - float _captureDataDown[DELAY_BUFF_SIZE]; + float _captureDataDown[DELAY_BUFF_SIZE*2]; - float _spkrReferenceFilter[DELAY_BUFF_SIZE]; + float _spkrReferenceFilter[WINDOW_SIZE*2]; - float _captureDataFilter[DELAY_BUFF_SIZE]; + float _captureDataFilter[DELAY_BUFF_SIZE*2]; - // int myints[] = {16,2,77,29}; - // vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) ); + float _correlationResult[DELAY_BUFF_SIZE*2]; - FirFilter _decimationFilter; + int _remainingIndex; - FirFilter _bandpassFilter; + int _spkrDownSize; - int _remainingIndex; + int _micDownSize; + + int _nbMicSampleStored; + + int _nbSpkrSampleStored; public: diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index f603899d69..e3a84103d0 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -213,6 +213,8 @@ void EchoCancel::reset() void EchoCancel::putData(SFLDataFormat *inputData, int nbBytes) { + _delayDetector.putData(inputData, nbBytes); + if(_spkrStoped) { _debug("EchoCancel: Flush data"); _micData->flushAll(); @@ -244,6 +246,8 @@ void EchoCancel::process(SFLDataFormat *data, int nbBytes) {} int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) { + _delayDetector.process(inputData, nbBytes); + if(_spkrStoped) { bcopy(inputData, outputData, nbBytes); return nbBytes; diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index 2b4cba1e6f..f5725d9141 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -36,6 +36,7 @@ #include "audioprocessing.h" #include "ringbuffer.h" +#include "delaydetection.h" // Number of ms in sec #define MS_PER_SEC 1000 @@ -378,7 +379,9 @@ class EchoCancel : public Algorithm { /** * true if noise suppressor is active, false elsewhere */ - bool _noiseActive; + bool _noiseActive; + + DelayDetection _delayDetector; }; diff --git a/sflphone-common/test/delaydetectiontest.cpp b/sflphone-common/test/delaydetectiontest.cpp index 1b523db7c6..61771fccc0 100644 --- a/sflphone-common/test/delaydetectiontest.cpp +++ b/sflphone-common/test/delaydetectiontest.cpp @@ -33,6 +33,7 @@ #include <iostream> #include <math.h> +#include <string.h> void DelayDetectionTest::setUp() {} @@ -40,20 +41,18 @@ void DelayDetectionTest::tearDown() {} void DelayDetectionTest::testCrossCorrelation() { - double signal[10] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0}; - double ref[3] = {0.0, 1.0, 2.0}; + float signal[10] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0}; + float ref[3] = {0.0, 1.0, 2.0}; - double result[10]; - double expected[10] = {0.0, 0.89442719, 1.0, 0.95618289, 0.91350028, 0.88543774, 0.86640023, 0.85280287, 0.8426548, 0.83480969}; + float result[10]; + float expected[10] = {0.0, 0.89442719, 1.0, 0.95618289, 0.91350028, 0.88543774, 0.86640023, 0.85280287, 0.8426548, 0.83480969}; CPPUNIT_ASSERT(_delaydetect.correlate(ref, ref, 3) == 5.0); CPPUNIT_ASSERT(_delaydetect.correlate(signal, signal, 10) == 285.0); _delaydetect.crossCorrelate(ref, signal, result, 3, 10); - std::cout << std::endl; - - double tmp; + float tmp; for (int i = 0; i < 10; i++) { tmp = result[i]-expected[i]; if(tmp < 0.0) @@ -61,7 +60,97 @@ void DelayDetectionTest::testCrossCorrelation() else CPPUNIT_ASSERT(tmp < 0.001); } +} + +void DelayDetectionTest::testCrossCorrelationDelay() +{ + float signal[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0}; + float ref[3] = {0.0, 1.0, 0.0}; + float result[10]; + _delaydetect.crossCorrelate(ref, signal, result, 3, 10); + + float expected[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0}; + } +void DelayDetectionTest::testFirFilter() +{ + float decimationCoefs[] = {-0.09870257, 0.07473655, 0.05616626, 0.04448337, 0.03630817, 0.02944626, + 0.02244098, 0.01463477, 0.00610982, -0.00266367, -0.01120109, -0.01873722, + -0.02373243, -0.02602213, -0.02437806, -0.01869834, -0.00875287, 0.00500204, + 0.02183252, 0.04065763, 0.06015944, 0.0788299, 0.09518543, 0.10799179, + 0.1160644, 0.12889288, 0.1160644, 0.10799179, 0.09518543, 0.0788299, + 0.06015944, 0.04065763, 0.02183252, 0.00500204, -0.00875287, -0.01869834, + -0.02437806, -0.02602213, -0.02373243, -0.01873722, -0.01120109, -0.00266367, + 0.00610982, 0.01463477, 0.02244098, 0.02944626, 0.03630817, 0.04448337, + 0.05616626, 0.07473655, -0.09870257}; + std::vector<double> ird(decimationCoefs, decimationCoefs + sizeof(decimationCoefs)/sizeof(float)); + + float bandpassCoefs[] = {0.06278034, -0.0758545, -0.02274943, -0.0084497, 0.0702427, 0.05986113, + 0.06436469, -0.02412049, -0.03433526, -0.07568665, -0.03214543, -0.07236507, + -0.06979052, -0.12446371, -0.05530828, 0.00947243, 0.15294699, 0.17735563, + 0.15294699, 0.00947243, -0.05530828, -0.12446371, -0.06979052, -0.07236507, + -0.03214543, -0.07568665, -0.03433526, -0.02412049, 0.06436469, 0.05986113, + 0.0702427, -0.0084497, -0.02274943, -0.0758545, 0.06278034}; + std::vector<double> irb(bandpassCoefs, bandpassCoefs + sizeof(bandpassCoefs)/sizeof(float)); + + float impulse[100]; + memset(impulse, 0, sizeof(float)*100); + impulse[0] = 1.0; + + FirFilter _decimationFilter(ird); + FirFilter _bandpassFilter(irb); + + float impulseresponse[100]; + memset(impulseresponse, 0, sizeof(float)*100); + + // compute impulse response + for(int i = 0; i < 100; i++) { + impulseresponse[i] = _decimationFilter.getOutputSample(impulse[i]); + } + + float tmp; + int size = sizeof(decimationCoefs)/sizeof(float); + for(int i = 0; i < size; i++) { + tmp = decimationCoefs[i] - impulseresponse[i]; + if(tmp < 0.0) + CPPUNIT_ASSERT (tmp > -0.000001); + else + CPPUNIT_ASSERT(tmp < 0.000001); + } + + + for(int i = 0; i < 100; i++) { + impulseresponse[i] = _bandpassFilter.getOutputSample(impulse[i]); + } + + size = sizeof(bandpassCoefs)/sizeof(float); + for(int i = 0; i < size; i++) { + tmp = bandpassCoefs[i] - impulseresponse[i]; + if(tmp < 0.0) + CPPUNIT_ASSERT (tmp > -0.000001); + else + CPPUNIT_ASSERT(tmp < 0.000001); + } + +} + + + +void DelayDetectionTest::testDelayDetection() { + + int delay = 3; + + SFLDataFormat spkr[WINDOW_SIZE]; + memset(spkr, 0, sizeof(SFLDataFormat)*WINDOW_SIZE); + spkr[0] = 32000; + + SFLDataFormat mic[DELAY_BUFF_SIZE]; + memset(mic, 0, sizeof(SFLDataFormat)*DELAY_BUFF_SIZE); + mic[delay] = 32000; + + _delaydetect.putData(spkr, WINDOW_SIZE*sizeof(SFLDataFormat)); + _delaydetect.process(mic, DELAY_BUFF_SIZE*sizeof(SFLDataFormat)); +} diff --git a/sflphone-common/test/delaydetectiontest.h b/sflphone-common/test/delaydetectiontest.h index 7de2dd3d32..cab6333edf 100644 --- a/sflphone-common/test/delaydetectiontest.h +++ b/sflphone-common/test/delaydetectiontest.h @@ -72,6 +72,9 @@ class DelayDetectionTest : public CppUnit::TestCase { CPPUNIT_TEST_SUITE( DelayDetectionTest ); CPPUNIT_TEST( testCrossCorrelation ); + CPPUNIT_TEST( testCrossCorrelationDelay ); + CPPUNIT_TEST( testFirFilter ); + CPPUNIT_TEST( testDelayDetection ); CPPUNIT_TEST_SUITE_END(); public: @@ -84,6 +87,12 @@ class DelayDetectionTest : public CppUnit::TestCase { void testCrossCorrelation(); + void testCrossCorrelationDelay(); + + void testFirFilter(); + + void testDelayDetection(); + private: DelayDetection _delaydetect; -- GitLab From d548c620f0cfeb1db565791f2a3eb053c23c2104 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Wed, 16 Jun 2010 09:12:49 -0400 Subject: [PATCH 076/197] [#3507] Update delay detection unit tests --- sflphone-common/src/audio/delaydetection.cpp | 88 +++++++++++++++++--- sflphone-common/test/delaydetectiontest.cpp | 59 ++++++++++++- sflphone-common/test/delaydetectiontest.h | 6 ++ 3 files changed, 139 insertions(+), 14 deletions(-) diff --git a/sflphone-common/src/audio/delaydetection.cpp b/sflphone-common/src/audio/delaydetection.cpp index 08535d9b52..e8430fd467 100644 --- a/sflphone-common/src/audio/delaydetection.cpp +++ b/sflphone-common/src/audio/delaydetection.cpp @@ -34,6 +34,7 @@ #include "math.h" // #include <stdio.h> #include <string.h> +#include <samplerate.h> // decimation filter coefficient float decimationCoefs[] = {-0.09870257, 0.07473655, 0.05616626, 0.04448337, 0.03630817, 0.02944626, @@ -182,8 +183,21 @@ void DelayDetection::process(SFLDataFormat *inputData, int nbBytes) { memcpy(_capturedData+_nbMicSampleStored, tmp, nbSamples); downsampleData(tmp, down, nbSamples, _downsamplingFactor); + + /* + for(int i = 0; i < 10; i++) + _debug("up: %.10f", tmp[i]); + + for(int i = 0; i < 10; i++) + _debug("down: %.10f", down[i]); + bandpassFilter(down, nbSamples/_downsamplingFactor); - memcpy(_capturedData+(_nbMicSampleStored/_downsamplingFactor), tmp, nbSamples); + + for(int i = 0; i < 10; i++) + _debug("band: %.10f", down[i]); + */ + + memcpy(_captureDataDown+(_nbMicSampleStored/_downsamplingFactor), down, (nbSamples/_downsamplingFactor)*sizeof(float)); _nbMicSampleStored += nbSamples; @@ -194,6 +208,14 @@ void DelayDetection::process(SFLDataFormat *inputData, int nbBytes) { else return; + /* + for(int i = 0; i < 10; i++) + _debug("spkrRef: %.10f", _spkrReferenceDown[i]); + + for(int i = 0; i < 10; i++) + _debug("micSeg: %.10f", _captureDataDown[i]); + */ + _debug("_spkrDownSize: %d, _micDownSize: %d", _spkrDownSize, _micDownSize); crossCorrelate(_spkrReferenceDown, _captureDataDown, _correlationResult, _micDownSize, _spkrDownSize); @@ -210,6 +232,8 @@ void DelayDetection::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SF void DelayDetection::crossCorrelate(float *ref, float *seg, float *res, int refSize, int segSize) { + _debug("CrossCorrelate"); + int counter = 0; // Output has same size as the @@ -217,9 +241,17 @@ void DelayDetection::crossCorrelate(float *ref, float *seg, float *res, int refS int ssize = segSize; int tmpsize = segSize-refSize+1; + /* + for(int i = 0; i < 32; i++) + _debug("ref: %.10f", ref[i]); + + for(int i = 0; i < 150; i++) + _debug("seg: %.10f", seg[i]); + */ + // perform autocorrelation on reference signal float acref = correlate(ref, ref, rsize); - _debug("acref: %f", acref); + // _debug("acref: %f", acref); // perform crossrelation on signal float acseg = 0.0; @@ -227,7 +259,7 @@ void DelayDetection::crossCorrelate(float *ref, float *seg, float *res, int refS while(--tmpsize) { --ssize; acseg = correlate(seg+tmpsize, seg+tmpsize, rsize); - _debug("acseg: %f", acseg); + // _debug("acseg: %f", acseg); res[ssize] = correlate(ref, seg+tmpsize, rsize); r = sqrt(acref*acseg); @@ -241,6 +273,7 @@ void DelayDetection::crossCorrelate(float *ref, float *seg, float *res, int refS int i = 0; while(rsize) { acseg = correlate(seg, seg, rsize); + // _debug("acseg: %f", acseg); res[ssize-1] = correlate(ref+i, seg, rsize); r = sqrt(acref*acseg); @@ -282,19 +315,50 @@ void DelayDetection::convertInt16ToFloat32(SFLDataFormat *input, float *output, void DelayDetection::downsampleData(float *input, float *output, int nbSamples, int factor) { + + /* + float tmp[nbSamples]; - float tmp[nbSamples]; + for(int i = 0; i < nbSamples; i++) { + tmp[i] = _decimationFilter.getOutputSample(input[i]); + } - for(int i = 0; i < nbSamples; i++) { - tmp[i] = _decimationFilter.getOutputSample(input[i]); - } + int j; + for(j=_remainingIndex; j<nbSamples; j+=factor) { + output[j] = tmp[j]; + } + _remainingIndex = j - nbSamples; + */ + + /* + double downsampleFactor = (double) samplerate1 / samplerate2; + + int nbSamplesMax = (int) (samplerate1 * getFramesize() / 1000); + */ - int j; - for(j=_remainingIndex; j<nbSamples; j+=factor) { - output[j] = tmp[j]; - } - _remainingIndex = j - nbSamples; + int _src_err; + + SRC_STATE *_src_state = src_new (SRC_LINEAR, 1, &_src_err); + + double downfactor = 1.0 / (double)factor; + + if (downfactor != 1.0) { + SRC_DATA src_data; + src_data.data_in = input; + src_data.data_out = output; + src_data.input_frames = nbSamples; + src_data.output_frames = nbSamples / factor; + src_data.src_ratio = downfactor; + src_data.end_of_input = 0; // More data will come + //src_short_to_float_array (dataIn, _floatBufferUpMic, nbSamples); + //_debug("downsample %d %f %d" , src_data.output_frames, src_data.src_ratio , nbSamples); + src_process (_src_state, &src_data); + //_debug("downsample %d %f %d" , src_data.output_frames, src_data.src_ratio , nbSamples); + // nbSamples = (src_data.output_frames_gen > nbSamplesMax) ? nbSamplesMax : src_data.output_frames_gen; + //_debug("downsample %d %f %d" , src_data.output_frames, src_data.src_ratio , nbSamples); + // src_float_to_short_array (_floatBufferDownMic , dataOut , nbSamples); + } } diff --git a/sflphone-common/test/delaydetectiontest.cpp b/sflphone-common/test/delaydetectiontest.cpp index 61771fccc0..a0bb79bbc8 100644 --- a/sflphone-common/test/delaydetectiontest.cpp +++ b/sflphone-common/test/delaydetectiontest.cpp @@ -137,20 +137,75 @@ void DelayDetectionTest::testFirFilter() } +void DelayDetectionTest::testIntToFloatConversion() { + + SFLDataFormat data[32768*2]; + float converted[32768*2]; + + for(int i = -32768; i < 32768; i++) + data[i+32768] = i; + + _delaydetect.convertInt16ToFloat32(data, converted, 32768*2); + + for(int i = -32768; i < 0; i++) { + CPPUNIT_ASSERT(converted[i+32768] >= -1.0); + CPPUNIT_ASSERT(converted[i+32768] <= 0.0); + } + + for(int i = 0; i < 32768; i++) { + CPPUNIT_ASSERT(converted[i+32768] >= 0.0); + CPPUNIT_ASSERT(converted[i+32768] <= 1.0); + } +} + +void DelayDetectionTest::testDownSamplingData() { + + SFLDataFormat data[32768*2]; + float converted[32768*2]; + float resampled[32768*2]; + + for(int i = -32768; i < 32768; i++) + data[i+32768] = i; + + _delaydetect.convertInt16ToFloat32(data, converted, 32768*2); + + _delaydetect.downsampleData(converted, resampled, 32768*2, 8); + + for(int i = 0; i < 32768/8; i++) { + CPPUNIT_ASSERT(resampled[i] >= -1.0); + CPPUNIT_ASSERT(resampled[i] <= 0.0); + } + + for(int i = 32768/8+1; i < 32768/4; i++) { + CPPUNIT_ASSERT(resampled[i] >= 0.0); + CPPUNIT_ASSERT(resampled[i] <= 1.0); + } + + +} void DelayDetectionTest::testDelayDetection() { - int delay = 3; + int delay = 100; SFLDataFormat spkr[WINDOW_SIZE]; memset(spkr, 0, sizeof(SFLDataFormat)*WINDOW_SIZE); spkr[0] = 32000; - + spkr[1] = 32000; + spkr[2] = 32000; + spkr[3] = 32000; + spkr[4] = 32000; + SFLDataFormat mic[DELAY_BUFF_SIZE]; memset(mic, 0, sizeof(SFLDataFormat)*DELAY_BUFF_SIZE); mic[delay] = 32000; + mic[delay+1] = 32000; + mic[delay+2] = 32000; + mic[delay+3] = 32000; + mic[delay+4] = 32000; _delaydetect.putData(spkr, WINDOW_SIZE*sizeof(SFLDataFormat)); _delaydetect.process(mic, DELAY_BUFF_SIZE*sizeof(SFLDataFormat)); + } diff --git a/sflphone-common/test/delaydetectiontest.h b/sflphone-common/test/delaydetectiontest.h index cab6333edf..e0046b42c6 100644 --- a/sflphone-common/test/delaydetectiontest.h +++ b/sflphone-common/test/delaydetectiontest.h @@ -74,6 +74,8 @@ class DelayDetectionTest : public CppUnit::TestCase { CPPUNIT_TEST( testCrossCorrelation ); CPPUNIT_TEST( testCrossCorrelationDelay ); CPPUNIT_TEST( testFirFilter ); + CPPUNIT_TEST( testIntToFloatConversion ); + CPPUNIT_TEST( testDownSamplingData ); CPPUNIT_TEST( testDelayDetection ); CPPUNIT_TEST_SUITE_END(); @@ -91,6 +93,10 @@ class DelayDetectionTest : public CppUnit::TestCase { void testFirFilter(); + void testIntToFloatConversion(); + + void testDownSamplingData(); + void testDelayDetection(); private: -- GitLab From f99d9f3086431623a1546c310ef3bc2d83d5c764 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Wed, 16 Jun 2010 14:02:19 -0400 Subject: [PATCH 077/197] [#3544] Update pulseaudio stream parameters --- .../src/audio/pulseaudio/audiostream.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index bf09430964..41acf4c263 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -213,9 +213,10 @@ AudioStream::createStream (pa_context* c, std::string *deviceName) if (_streamType == PLAYBACK_STREAM) { - attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->maxlength = pa_usec_to_bytes (80 * PA_USEC_PER_MSEC, &_sample_spec); // -1; + attributes->tlength = pa_usec_to_bytes (40 * PA_USEC_PER_MSEC, &_sample_spec); attributes->prebuf = 0; + attributes->fragsize = pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec); attributes->minreq = (uint32_t) -1; pa_threaded_mainloop_lock(_mainloop); @@ -230,10 +231,11 @@ AudioStream::createStream (pa_context* c, std::string *deviceName) } else if (_streamType == CAPTURE_STREAM) { - attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->maxlength = pa_usec_to_bytes (80 * PA_USEC_PER_MSEC, &_sample_spec);// (uint32_t) -1; + attributes->tlength = pa_usec_to_bytes (40 * PA_USEC_PER_MSEC, &_sample_spec);// pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec); attributes->prebuf = 0; - attributes->fragsize = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->fragsize = pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec); // pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->minreq = (uint32_t) -1; pa_threaded_mainloop_lock(_mainloop); @@ -247,16 +249,17 @@ AudioStream::createStream (pa_context* c, std::string *deviceName) } else if (_streamType == RINGTONE_STREAM) { - attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes(50 * PA_USEC_PER_MSEC, &_sample_spec); + attributes->maxlength = pa_usec_to_bytes (80 * PA_USEC_PER_MSEC, &_sample_spec);; + attributes->tlength = pa_usec_to_bytes(40 * PA_USEC_PER_MSEC, &_sample_spec); attributes->prebuf = 0; + attributes->fragsize = pa_usec_to_bytes(20 * PA_USEC_PER_MSEC, &_sample_spec); attributes->minreq = (uint32_t) -1; pa_threaded_mainloop_lock(_mainloop); if(deviceName) pa_stream_connect_playback(s, deviceName->c_str(), attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE), NULL, NULL); else - pa_stream_connect_playback(s, NULL, attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE), NULL, NULL); + pa_stream_connect_playback(s, NULL, attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY), NULL, NULL); pa_threaded_mainloop_unlock(_mainloop); -- GitLab From 158543bc77635bd2c07b39d9e8bf4a696641b126 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Wed, 16 Jun 2010 14:28:11 -0400 Subject: [PATCH 078/197] [#958] Tuning AGC and noise reduction engines --- .../src/audio/codecs/speexcodec_nb.cpp | 6 ++-- .../src/audio/codecs/speexcodec_ub.cpp | 6 ++-- .../src/audio/codecs/speexcodec_wb.cpp | 4 +++ sflphone-common/src/audio/delaydetection.cpp | 2 +- sflphone-common/src/audio/echocancel.cpp | 29 ++++++++++++------- sflphone-common/src/audio/echocancel.h | 4 +-- 6 files changed, 33 insertions(+), 18 deletions(-) diff --git a/sflphone-common/src/audio/codecs/speexcodec_nb.cpp b/sflphone-common/src/audio/codecs/speexcodec_nb.cpp index 92cd12ed83..ca19131164 100644 --- a/sflphone-common/src/audio/codecs/speexcodec_nb.cpp +++ b/sflphone-common/src/audio/codecs/speexcodec_nb.cpp @@ -78,7 +78,7 @@ class Speex : public AudioCodec speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); - + /* #ifdef HAVE_SPEEXDSP_LIB int enable = 1; @@ -101,6 +101,7 @@ class Speex : public AudioCodec speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable); speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable); #endif + */ } @@ -136,11 +137,12 @@ class Speex : public AudioCodec virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) { speex_bits_reset (&_speex_enc_bits); + /* #ifdef HAVE_SPEEXDSP_LIB speex_preprocess_run (_preprocess_state, src); #endif - + */ speex_encode_int (_speex_enc_state, src, &_speex_enc_bits); int nbBytes = speex_bits_write (&_speex_enc_bits, (char*) dst, size); diff --git a/sflphone-common/src/audio/codecs/speexcodec_ub.cpp b/sflphone-common/src/audio/codecs/speexcodec_ub.cpp index 84be794eca..738b32331e 100644 --- a/sflphone-common/src/audio/codecs/speexcodec_ub.cpp +++ b/sflphone-common/src/audio/codecs/speexcodec_ub.cpp @@ -79,6 +79,7 @@ class Speex : public AudioCodec speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); + /* #ifdef HAVE_SPEEXDSP_LIB int enable = 1; @@ -100,7 +101,7 @@ class Speex : public AudioCodec speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable); speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable); #endif - + */ } ~Speex() { @@ -135,11 +136,12 @@ class Speex : public AudioCodec virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) { speex_bits_reset (&_speex_enc_bits); + /* #ifdef HAVE_SPEEXDSP_LIB speex_preprocess_run (_preprocess_state, src); #endif - + */ speex_encode_int (_speex_enc_state, src, &_speex_enc_bits); speex_bits_nbytes (&_speex_enc_bits); diff --git a/sflphone-common/src/audio/codecs/speexcodec_wb.cpp b/sflphone-common/src/audio/codecs/speexcodec_wb.cpp index 19f9da9c67..78559ad3fa 100644 --- a/sflphone-common/src/audio/codecs/speexcodec_wb.cpp +++ b/sflphone-common/src/audio/codecs/speexcodec_wb.cpp @@ -77,6 +77,7 @@ class Speex : public AudioCodec speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); + /* #ifdef HAVE_SPEEXDSP_LIB int enable = 1; @@ -99,6 +100,7 @@ class Speex : public AudioCodec speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable); speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable); #endif + */ } @@ -135,10 +137,12 @@ class Speex : public AudioCodec virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) { speex_bits_reset (&_speex_enc_bits); + /* #ifdef HAVE_SPEEXDSP_LIB speex_preprocess_run (_preprocess_state, src); #endif + */ //printf ("Codec::codecEncode() size %i\n", size); speex_encode_int (_speex_enc_state, src, &_speex_enc_bits); diff --git a/sflphone-common/src/audio/delaydetection.cpp b/sflphone-common/src/audio/delaydetection.cpp index e8430fd467..5c6ab4d742 100644 --- a/sflphone-common/src/audio/delaydetection.cpp +++ b/sflphone-common/src/audio/delaydetection.cpp @@ -223,7 +223,7 @@ void DelayDetection::process(SFLDataFormat *inputData, int nbBytes) { _debug("MaxIndex: %d", maxIndex); - reset(); + // reset(); } int DelayDetection::process(SFLDataFormat *intputData, SFLDataFormat *outputData, int nbBytes) { return 0; } diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index e3a84103d0..c733ade3c7 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -90,15 +90,17 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _spkrHistoryLength = SPKR_LENGTH / SEGMENT_LENGTH; _nbSegmentPerFrame = _frameLength / SEGMENT_LENGTH; -#ifdef HAVE_SPEEXDSP_LIB + // #ifdef HAVE_SPEEXDSP_LIB _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); int i=1; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); - i=-30; + i=-10; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &i); i=0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC, &i); i=8000; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC_TARGET, &i); + i=16000; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i); i=0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i); @@ -106,7 +108,9 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); f=0.0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); -#endif + i = 0; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_VAD, &i); + // #endif memset(_avgSpkrLevelHist, 0, BUFF_SIZE*sizeof(int)); memset(_avgMicLevelHist, 0, BUFF_SIZE*sizeof(int)); @@ -131,9 +135,9 @@ EchoCancel::~EchoCancel() delete _spkrData; _spkrData = NULL; -#ifdef HAVE_SPEEXDSP_LIB + // #ifdef HAVE_SPEEXDSP_LIB speex_preprocess_state_destroy(_noiseState); -#endif + // #endif // micFile->close(); // spkrFile->close(); @@ -185,17 +189,19 @@ void EchoCancel::reset() _spkrData->flushAll(); _spkrDataOut->flushAll(); -#ifdef HAVE_SPEEXDSP_LIB + // #ifdef HAVE_SPEEXDSP_LIB speex_preprocess_state_destroy(_noiseState); _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); int i=1; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); - i=-30; + i=-10; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &i); i=0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC, &i); i=8000; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC_TARGET, &i); + i=16000; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i); i=0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i); @@ -203,7 +209,8 @@ void EchoCancel::reset() speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); f=0.0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); -#endif + + // #endif _spkrStoped = true; @@ -283,11 +290,12 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int // micFile->write((const char *)_tmpMic, byteSize); // spkrFile->write((const char *)_tmpSpkr, byteSize); -#ifdef HAVE_SPEEXDSP_LIB + // #ifdef HAVE_SPEEXDSP_LIB + // Remove noise if(_noiseActive) speex_preprocess_run(_noiseState, _tmpMic); -#endif + // #endif // Processed echo cancellation performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); @@ -320,7 +328,6 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int // if spkrAvail is twice the size of a frame discard it, this data is late and won't be used if(spkrAvail > (2*byteSize)) { - _debug("EchoCancel: Discard echo cancel"); _spkrData->Discard(spkrAvail-(2*byteSize)); } diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h index f5725d9141..e0ceda0445 100644 --- a/sflphone-common/src/audio/echocancel.h +++ b/sflphone-common/src/audio/echocancel.h @@ -364,12 +364,12 @@ class EchoCancel : public Algorithm { ofstream *micLevelData; ofstream *spkrLevelData; -#ifdef HAVE_SPEEXDSP_LIB + // #ifdef HAVE_SPEEXDSP_LIB /** * Noise reduction processing state */ SpeexPreprocessState *_noiseState; -#endif + // #endif /** * true if noise suppressor is active, false elsewhere -- GitLab From d1efed8b84b735cb99e470c15942e414ebdd9833 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Wed, 16 Jun 2010 17:39:45 -0400 Subject: [PATCH 079/197] [#958] Make libspeexdsp a required dependency --- sflphone-common/configure.ac | 8 ++-- sflphone-common/src/audio/Makefile.am | 4 ++ sflphone-common/src/audio/codecs/Makefile.am | 4 -- .../src/audio/codecs/speexcodec_nb.cpp | 40 +------------------ .../src/audio/codecs/speexcodec_ub.cpp | 38 +----------------- .../src/audio/codecs/speexcodec_wb.cpp | 39 +----------------- sflphone-common/src/audio/echocancel.cpp | 14 +++---- 7 files changed, 17 insertions(+), 130 deletions(-) diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index 36aaffefb8..1149007f87 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -341,17 +341,19 @@ AC_ARG_WITH([speex], AS_IF([test "x$with_speex" != xno], [AC_CHECK_HEADER([speex/speex.h], , AC_MSG_FAILURE([Unable to find the libspeex headers (you may need to install the dev package). You may use --without-speex to compile without speex codec support.]))] - [AC_CHECK_HEADER([speex/speex_preprocess.h], , AC_MSG_FAILURE([Unable to find the libspeexdsp headers (you may need to install the libspeexdsp-dev package). You may use --without-speex to compile without speex codec support.]))] [AC_CHECK_LIB([speex], [speex_decode_int], [], [AC_MSG_FAILURE( [libspeex link test failed. You may use --without-speex to compile without speex codec support.])] ) ] - dnl More advanced check in case the libspeexdsp is not installed - AC_SEARCH_LIBS(speex_preprocess_run, speexdsp, HAVE_SPEEXDSP="yes", HAVE_SPEEXDSP="no", []) + # dnl More advanced check in case the libspeexdsp is not installed + # AC_SEARCH_LIBS(speex_preprocess_run, speexdsp, HAVE_SPEEXDSP="yes", HAVE_SPEEXDSP="no", []) ) +dnl check in case the libspeexdsp is not installed +AC_CHECK_HEADER([speex/speex_preprocess.h], , AC_MSG_FAILURE([Unable to find the libspeexdsp headers (you may need to install the libspeexdsp-dev package) used for Noise Suppression and Automatic Gain Control.])) +AC_CHECK_LIB(speexdsp, speex_preprocess_run, [], [], []) AC_DEFINE([HAVE_SPEEX], test "x$with_speex" = "xyes", [Define if you have libspeex]) AM_CONDITIONAL(BUILD_SPEEX, test "x$with_speex" = "xyes" ) AM_CONDITIONAL(ENABLE_SPEEXDSP, test $HAVE_SPEEXDSP = yes) diff --git a/sflphone-common/src/audio/Makefile.am b/sflphone-common/src/audio/Makefile.am index 156246d164..ef2452b0bd 100644 --- a/sflphone-common/src/audio/Makefile.am +++ b/sflphone-common/src/audio/Makefile.am @@ -4,6 +4,10 @@ noinst_LTLIBRARIES = libaudio.la SUBDIRS = codecs audiortp sound alsa pulseaudio +# if ENABLE_SPEEXDSP +# SPEEXDSP=-DHAVE_SPEEXDSP_LIB +# endif + libaudio_la_SOURCES = \ audioloop.cpp \ ringbuffer.cpp \ diff --git a/sflphone-common/src/audio/codecs/Makefile.am b/sflphone-common/src/audio/codecs/Makefile.am index e338dc3fb5..4c17a54c7e 100644 --- a/sflphone-common/src/audio/codecs/Makefile.am +++ b/sflphone-common/src/audio/codecs/Makefile.am @@ -13,10 +13,6 @@ libcodec_gsm_so_LDFLAGS = --shared -lc -lgsm INSTALL_GSM_RULE = install-libcodec_gsm_so endif -if ENABLE_SPEEXDSP -SPEEXDSP=-DHAVE_SPEEXDSP_LIB -endif - if BUILD_SPEEX SPEEX_NB_LIB = libcodec_speex_nb.so libcodec_speex_nb_so_SOURCES = speexcodec_nb.cpp diff --git a/sflphone-common/src/audio/codecs/speexcodec_nb.cpp b/sflphone-common/src/audio/codecs/speexcodec_nb.cpp index ca19131164..fdad5f29dc 100644 --- a/sflphone-common/src/audio/codecs/speexcodec_nb.cpp +++ b/sflphone-common/src/audio/codecs/speexcodec_nb.cpp @@ -45,8 +45,7 @@ class Speex : public AudioCodec _speex_enc_bits(), _speex_dec_state(), _speex_enc_state(), - _speex_frame_size(), - _preprocess_state() { + _speex_frame_size() { _clockRate = 8000; _frameSize = 160; // samples, 20 ms at 8kHz _channel = 1; @@ -77,32 +76,6 @@ class Speex : public AudioCodec speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); - - /* -#ifdef HAVE_SPEEXDSP_LIB - - int enable = 1; - int quality = 10; - int complex = 10; - int attenuation = -10; - - speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VAD, &enable); - speex_encoder_ctl (_speex_enc_state, SPEEX_SET_DTX, &enable); - speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality); - speex_encoder_ctl (_speex_enc_state, SPEEX_SET_COMPLEXITY, &complex); - - // Init the decoder struct - speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); - - // Init the preprocess struct - _preprocess_state = speex_preprocess_state_init (_speex_frame_size,_clockRate); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enable); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable); -#endif - */ - } ~Speex() { @@ -119,9 +92,6 @@ class Speex : public AudioCodec speex_bits_destroy (&_speex_enc_bits); speex_encoder_destroy (_speex_enc_state); _speex_enc_state = 0; - - speex_preprocess_state_destroy( _preprocess_state); - _preprocess_state = NULL; } virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) { @@ -137,13 +107,6 @@ class Speex : public AudioCodec virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) { speex_bits_reset (&_speex_enc_bits); - /* -#ifdef HAVE_SPEEXDSP_LIB - - speex_preprocess_run (_preprocess_state, src); -#endif - */ - speex_encode_int (_speex_enc_state, src, &_speex_enc_bits); int nbBytes = speex_bits_write (&_speex_enc_bits, (char*) dst, size); @@ -157,7 +120,6 @@ class Speex : public AudioCodec void *_speex_dec_state; void *_speex_enc_state; int _speex_frame_size; - SpeexPreprocessState *_preprocess_state; }; // the class factories diff --git a/sflphone-common/src/audio/codecs/speexcodec_ub.cpp b/sflphone-common/src/audio/codecs/speexcodec_ub.cpp index 738b32331e..47494fb99c 100644 --- a/sflphone-common/src/audio/codecs/speexcodec_ub.cpp +++ b/sflphone-common/src/audio/codecs/speexcodec_ub.cpp @@ -32,7 +32,6 @@ #include "audiocodec.h" #include <cstdio> #include <speex/speex.h> -#include <speex/speex_preprocess.h> class Speex : public AudioCodec { @@ -45,8 +44,7 @@ class Speex : public AudioCodec _speex_enc_bits(), _speex_dec_state(), _speex_enc_state(), - _speex_frame_size(), - _preprocess_state() { + _speex_frame_size() { _clockRate = 32000; _frameSize = 640; // 20 ms at 32 kHz _channel = 1; @@ -78,30 +76,6 @@ class Speex : public AudioCodec speex_encoder_ctl (_speex_enc_state,SPEEX_SET_SAMPLING_RATE,&_clockRate); speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); - - /* -#ifdef HAVE_SPEEXDSP_LIB - - int enable = 1; - int complex = 10; - int attenuation = -10; - - speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VAD, &enable); - speex_encoder_ctl (_speex_enc_state, SPEEX_SET_DTX, &enable); - // speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality); - speex_encoder_ctl (_speex_enc_state, SPEEX_SET_COMPLEXITY, &complex); - - // Init the decoder struct - speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_frameSize); - - // Init the preprocess struct - _preprocess_state = speex_preprocess_state_init (_frameSize,_clockRate); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enable); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable); -#endif - */ } ~Speex() { @@ -119,8 +93,6 @@ class Speex : public AudioCodec speex_encoder_destroy (_speex_enc_state); _speex_enc_state = 0; - speex_preprocess_state_destroy( _preprocess_state); - _preprocess_state = NULL; } virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) { @@ -136,13 +108,6 @@ class Speex : public AudioCodec virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) { speex_bits_reset (&_speex_enc_bits); - /* -#ifdef HAVE_SPEEXDSP_LIB - - speex_preprocess_run (_preprocess_state, src); -#endif - */ - speex_encode_int (_speex_enc_state, src, &_speex_enc_bits); speex_bits_nbytes (&_speex_enc_bits); int nbBytes = speex_bits_write (&_speex_enc_bits, (char*) dst, size); @@ -157,7 +122,6 @@ class Speex : public AudioCodec void *_speex_dec_state; void *_speex_enc_state; int _speex_frame_size; - SpeexPreprocessState *_preprocess_state; }; // the class factories diff --git a/sflphone-common/src/audio/codecs/speexcodec_wb.cpp b/sflphone-common/src/audio/codecs/speexcodec_wb.cpp index 78559ad3fa..d9fda3e3af 100644 --- a/sflphone-common/src/audio/codecs/speexcodec_wb.cpp +++ b/sflphone-common/src/audio/codecs/speexcodec_wb.cpp @@ -32,7 +32,6 @@ #include "audiocodec.h" #include <cstdio> #include <speex/speex.h> -#include <speex/speex_preprocess.h> class Speex : public AudioCodec { @@ -45,8 +44,7 @@ class Speex : public AudioCodec _speex_enc_bits(), _speex_dec_state(), _speex_enc_state(), - _speex_frame_size(), - _preprocess_state() { + _speex_frame_size() { _clockRate = 16000; _frameSize = 320; // 20 ms at 16 kHz _channel = 1; @@ -77,31 +75,6 @@ class Speex : public AudioCodec speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); - /* -#ifdef HAVE_SPEEXDSP_LIB - - int enable = 1; - int quality = 10; - int complex = 10; - int attenuation = -10; - - speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VAD, &enable); - speex_encoder_ctl (_speex_enc_state, SPEEX_SET_DTX, &enable); - speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality); - speex_encoder_ctl (_speex_enc_state, SPEEX_SET_COMPLEXITY, &complex); - - // Init the decoder struct - speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); - - // Init the preprocess struct - _preprocess_state = speex_preprocess_state_init (_speex_frame_size,_clockRate); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enable); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable); - speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable); -#endif - */ - } ~Speex() { @@ -119,8 +92,6 @@ class Speex : public AudioCodec speex_encoder_destroy (_speex_enc_state); _speex_enc_state = 0; - speex_preprocess_state_destroy( _preprocess_state); - _preprocess_state = NULL; } virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) { @@ -137,13 +108,6 @@ class Speex : public AudioCodec virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) { speex_bits_reset (&_speex_enc_bits); - /* -#ifdef HAVE_SPEEXDSP_LIB - - speex_preprocess_run (_preprocess_state, src); -#endif - */ - //printf ("Codec::codecEncode() size %i\n", size); speex_encode_int (_speex_enc_state, src, &_speex_enc_bits); int nbBytes = speex_bits_write (&_speex_enc_bits, (char*) dst, size); @@ -158,7 +122,6 @@ class Speex : public AudioCodec void *_speex_dec_state; void *_speex_enc_state; int _speex_frame_size; - SpeexPreprocessState *_preprocess_state; }; // the class factories diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index c733ade3c7..16eb50f480 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -90,7 +90,6 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _spkrHistoryLength = SPKR_LENGTH / SEGMENT_LENGTH; _nbSegmentPerFrame = _frameLength / SEGMENT_LENGTH; - // #ifdef HAVE_SPEEXDSP_LIB _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); int i=1; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); @@ -110,7 +109,7 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); i = 0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_VAD, &i); - // #endif + memset(_avgSpkrLevelHist, 0, BUFF_SIZE*sizeof(int)); memset(_avgMicLevelHist, 0, BUFF_SIZE*sizeof(int)); @@ -135,9 +134,7 @@ EchoCancel::~EchoCancel() delete _spkrData; _spkrData = NULL; - // #ifdef HAVE_SPEEXDSP_LIB speex_preprocess_state_destroy(_noiseState); - // #endif // micFile->close(); // spkrFile->close(); @@ -189,7 +186,6 @@ void EchoCancel::reset() _spkrData->flushAll(); _spkrDataOut->flushAll(); - // #ifdef HAVE_SPEEXDSP_LIB speex_preprocess_state_destroy(_noiseState); _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); @@ -210,8 +206,6 @@ void EchoCancel::reset() f=0.0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); - // #endif - _spkrStoped = true; _processedByte = 0; @@ -290,12 +284,14 @@ int EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData, int // micFile->write((const char *)_tmpMic, byteSize); // spkrFile->write((const char *)_tmpSpkr, byteSize); - // #ifdef HAVE_SPEEXDSP_LIB +#ifdef HAVE_LIBSPEEX_DSP + + _debug("OK"); // Remove noise if(_noiseActive) speex_preprocess_run(_noiseState, _tmpMic); - // #endif +#endif // Processed echo cancellation performEchoCancel(_tmpMic, _tmpSpkr, _tmpOut); -- GitLab From e519798f9d9e377679efaf234caec1589526cd0b Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Thu, 17 Jun 2010 14:30:04 -0400 Subject: [PATCH 080/197] [#3258] Updating translations --- lang/ar/ar.po | 661 ++++++++++++------------ lang/ast/ast.po | 673 ++++++++++++------------ lang/da/da.po | 681 ++++++++++++------------ lang/de/de.po | 673 ++++++++++++------------ lang/el/el.po | 661 ++++++++++++------------ lang/es/es.po | 777 ++++++++++++++-------------- lang/fr/fr.po | 709 ++++++++++++------------- lang/it/it.po | 663 ++++++++++++------------ lang/ja/ja.po | 673 ++++++++++++------------ lang/ko/ko.po | 1206 ++++++++++++++++++++++--------------------- lang/oc/oc.po | 1205 ++++++++++++++++++++++++++++++++++++++++++ lang/pl/pl.po | 661 ++++++++++++------------ lang/pt/pt.po | 664 ++++++++++++------------ lang/pt_BR/pt_BR.po | 687 ++++++++++++------------ lang/ru/ru.po | 683 ++++++++++++------------ lang/sflphone.pot | 679 ++++++++++++------------ lang/sv/sv.po | 661 ++++++++++++------------ lang/tr/tr.po | 662 ++++++++++++------------ lang/zh_CN/zh_CN.po | 677 ++++++++++++------------ lang/zh_HK/zh_HK.po | 677 ++++++++++++------------ lang/zh_TW/zh_TW.po | 661 ++++++++++++------------ 21 files changed, 8316 insertions(+), 6978 deletions(-) create mode 100644 lang/oc/oc.po diff --git a/lang/ar/ar.po b/lang/ar/ar.po index a72b341b4f..f0094d4da1 100644 --- a/lang/ar/ar.po +++ b/lang/ar/ar.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2009-12-15 16:06+0000\n" "Last-Translator: Zied ABID <ziedabid@gmail.com>\n" "Language-Team: Arabic <ar@li.org>\n" @@ -16,578 +16,578 @@ msgstr "" "Content-Transfer-Encoding: 8bit\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" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "مُسجّل" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "غير مُسجّل" -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "خلل" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "غير صحيح" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "" @@ -640,479 +640,452 @@ msgstr "" msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +msgid "Ringtone" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +msgid "Voice enhancement settings" +msgstr "" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1121,81 +1094,109 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "" diff --git a/lang/ast/ast.po b/lang/ast/ast.po index 665d9180fb..23f9a99f1a 100644 --- a/lang/ast/ast.po +++ b/lang/ast/ast.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2009-12-17 01:18+0000\n" "Last-Translator: Xuacu Saturio <xuacusk8@gmail.com>\n" "Language-Team: Asturian <ast@li.org>\n" @@ -15,64 +15,64 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Rexistráu" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Non rexistráu" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Probando..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Fallu" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Falló n'autenticación" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Rede nun alcanzable" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Host nun alcanzable" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Error na configuración STUN" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Sirvidor STUN inválidu" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Inválidu" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Usando la cuenta" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Nun hai cuentes rexistráes" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -80,28 +80,28 @@ msgstr "" "Nun se puede coneutar col sirvidor SFLphone.\n" "Compruebe qu'el daemon tea funcionando." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Llamada SIP direuta" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -111,7 +111,7 @@ msgstr "" "\n" "Error al abrir el preséu de reproducción" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -121,7 +121,7 @@ msgstr "" "\n" "Error al abrir el preséu de captura" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -131,43 +131,43 @@ msgstr "" "\n" "Pulseaudio nun ta funcionando" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "Hai una llamada en cursu." -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Hai llamaes en cursu." -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "¿Entá quier salir?" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "Error SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "El par %s nun sofita ZRTP\n" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "La comunicación segura nun ta disponible" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Siguir" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Terminar llamada" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -176,11 +176,11 @@ msgstr "" "Un error de %s fizo que la llamada con %s pasara a mou ensin encriptar.\n" "Razón esauta: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "Falló la negociación ZRTP" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -189,50 +189,50 @@ msgstr "" "%s quier dexar d'usar comunicación segura. Confirmar reaniciará la " "conversación ensin SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Confirmar mou en claro" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Confirmar" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s cuenta : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>De</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d mensaxe de voz" msgstr[1] "%d mensaxes de voz" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Llamando cola cuenta %s <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Cuenta actual" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Nun hai cuentes configuraes" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Nun tien denguna cuenta rexistrada" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -241,370 +241,370 @@ msgstr "" "<i>Con:</i> %s\n" "usando %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s nun tien sofitu pa ZRTP." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "Falló la negociación ZRTP con %s" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>Con:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Volume d'altavoces" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Volume del micrófonu" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "Amo_sar ventana principal" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "_Colgar" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Buzón de voz" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Nun s'escoyó una llibreta de direiciones" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Llibreta de direiciones" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "Buzón de voz (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" "SFLphone ye un programa de VoIP compatible colos protocolos SIP ya IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "Tocante a SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "Llamada" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "Llamada _Nueva" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "Facer una llamada nueva" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Descolgar" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "Contestar la llamada" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "Finar la llamada" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "_N'espera" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "Poner la llamada n'espera" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "_Salir d'espera" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "Sacar la llamada d'espera" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "_Asistente de configuración" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Executar l'asistente de configuración" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "Llamar al buzón de voz" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "_Zarrar" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "Minimizar na bandexa de sistema" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "_Colar" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Colar del programa" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Editar" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "_Copiar" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Copiar la seleición" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "A_pegar" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "Pegar el conteníu del cartafueyu" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Llimpiar _hestorial" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Llimpiar l'hestorial de llamáes" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Cuentes" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Editar les sos cuentes" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "_Preferencies" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "Camudar les sos preferencies" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Ver" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Aida" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Conteníu" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "Abrir el manual" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "Tocante a esta aplicación" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "_Tresferir" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "Tresferir la llamada" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "G_rabar" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "Grabar la conversación actual" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "Amo_sar ferramientes" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "Amuesa la barra de ferramientes" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "_Tecláu" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "Amosar el tecláu pa marcar" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "_Controles de volume" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Amuesa los controles de volume" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "_Hestorial" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Hestorial de llamáes" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Llibret_a de direiciones" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "_N'espera" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "Tornar _Llamada" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Editar númberu de teléfonu" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Editar el númberu de teléfonu enantes de llamar" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Parámetros de cuenta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "Nom_atu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protocolu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Desconocíu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "Nome del _host" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "Nome d'_usuariu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "Cont_raseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Amosar contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "Númberu del buzón de _voz" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Autenticación" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Secretu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Credencial" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Nome d'autenticación" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Seguridá" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "Usar tresporte TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "Intercambéu de clave SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Desactiváu" @@ -657,40 +657,40 @@ msgstr "Afitar direición y puertu espublizaos:" msgid "Published port" msgstr "Puertu espublizáu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "Códecs" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Axustes de la cuenta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Básicu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Avanzáu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -700,95 +700,95 @@ msgstr "" "URI sip como <b>sip:parremotu</b>. Los parámetros que conseñe equí, tamién " "van usase si una llamada entrante o saliente nun concasa con cuenta dala." -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "El sirvidor devolvió \"%s\" (%d)" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protocolu" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Estáu" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Cuentes" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Cuentes Configuraes" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "Hai %d cuenta activa" msgstr[1] "Hai %d cuentes actives" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "Nun hai denguna cuenta activada" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Xeneral" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Usar llibreta de direiciones d'Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Llende de descarga:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "tarxetes" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "Amosar foto _del contautu, si ta disponible" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Campos de les llibretes de direiciones d'Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Trabayu" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Casa" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Movil" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Llibretes de direiciones" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Esbille les llibretes de direiciones d'Evolution a usar" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Nome" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "Esti asistente yá finó." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -796,347 +796,322 @@ msgstr "" "Puede comprobar en cualisquier momentu l'estáu del rexistru, o camudar los " "parámetros de les cuentes de so, na ventana Opciones/Cuentes." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Nomatu" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Sirvidor" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Nome d'usuariu" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Seguridá: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Denguna" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "Asistente SFLphone de creación de cuentes" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "¡Bienllegáu al asistente de creación de cuentes de SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" "Esti asistente d'instalación echara-y un gabitu pa configurar una cuenta." -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Escueya una triba de cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Escueya una de les siguientes opciones" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Crear una cuenta SIP/IAX2 de baldre en sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Rexistrar una cuenta SIP o IAX2 esistente" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Axustes de cuenta SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Conseñe la información siguiente" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Comunicación segura con _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Corréu ellectrónicu opcional" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" "Estes señes de corréu van usase pa unviar los mensaxes del buzón de voz." -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_Corréu" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Axustes de cuenta IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Conversión de Direición de Rede (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "Seique tenga qu'activar esto si ta tres d'un torgafueos." -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "A_ctivar STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_Sirvidor STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Rexistru de cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "¡Norabona!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frecuencia" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Tasa de bits" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Anchor de banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "Complementu ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Salida" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Entrada" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" -msgstr "Detección d'actividá de _voz" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Tonos de llamada" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "Ame_norgar ruíu (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Xestor de soníu" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "Axustes de ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Grabaciones" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Carpeta de destín" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Seleicione una carpeta" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "_Activar tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Escueya un tono de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Ficheros de soníu" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Axustes de la cuenta" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "URL Argumentu" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Ordes personalizáes pa llamáes entrantes con URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s va trocase pola URL pasada." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Disparador pa una cabecera _SIP determinada" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Disparador pa una URL _IAX2" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "O_rde a executar" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Reescritura de númberu telefónicu" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "_Prefixar los númberos marcaos con" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Notificaciones nel escritoriu" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "_Activar notificaciones" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Iconu de la bandexa del sistema" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "_Estenderexar ventana principal al recibir llamada" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "_Nunca estenderexar ventana principal" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "Anubrir _ventana SFLphone nel entamu" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Hestóricu de llamaes" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "_Guardar el mio hestóricu polo menos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "díes" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Preferencies" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Soníu" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Llibreta de direiciones" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Enganches" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "Opciones ZRTP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "Unviar Hash de Hello en S_DP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "Pidir al usuariu que confirme SAS" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "A_visar si nun hai sofitu ZRTP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "Amosar SAS una vegada pa eventos n'espera" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "Opciones avanzaes pa TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "Tresporte TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1150,81 +1125,115 @@ msgstr "" "pa cada cuenta. Por embargu, caún d'ellos va executase nun puertu dedicáu,\n" "diferentes ente sigo.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "Llista de Certificaos d'Autoridá" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "Escueya un ficheru de llista de CA (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "Ficheru de certificáu de par públicu" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "Escueye un certificáu públicu de par (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "Escueye un ficheru de clave privada (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "Contraseña de la clave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "Métodu del protocolu TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "Llista de cifráu TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "Nome de sirvidor pa la conexón TLS saliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "Tiempu de negociación (seg:mseg)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "Comprobar certificaos entrantes, como un sirvidor" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "Comprobar certificaos de la respuesta, como un cliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "Requerir certificáu pa les conexones TLS entrantes" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "Opciones ZRTP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "Unviar Hash de Hello en S_DP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "Pidir al usuariu que confirme SAS" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "A_visar si nun hai sofitu ZRTP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "Amosar SAS una vegada pa eventos n'espera" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Guetar todos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Calque equí pa camudar el tipu de gueta" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Guetar por llamaes perdíes" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Guetar por llamaes entrantes" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Guetar por llamaes salientes" + +#~ msgid "_Voice Activity Detection" +#~ msgstr "Detección d'actividá de _voz" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "Ame_norgar ruíu (Narrow-Band Companding)" diff --git a/lang/da/da.po b/lang/da/da.po index 80b4a05279..df489d7787 100644 --- a/lang/da/da.po +++ b/lang/da/da.po @@ -7,72 +7,72 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" -"PO-Revision-Date: 2010-03-30 20:01+0000\n" -"Last-Translator: AJenbo <anders@jenbo.dk>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-05-01 01:15+0000\n" +"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n" "Language-Team: Danish <da@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registreret" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Ikke registreret" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Forsøger..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Fejl" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Godkendelse mislykkedes" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Netværk kan ikke nås" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Vært kan ikke nås" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Stun konfigureringsfejl" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Stun server ugyldig" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Ugyldig" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Benytter konto" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Ingen registrerede konti" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -80,28 +80,28 @@ msgstr "" "Forbindelse til SFLphone serveren kan ikke oprettes.\n" "Sørg for at server-dæmonen kører." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Direkte IP opkald" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -111,7 +111,7 @@ msgstr "" "\n" "Fejl opstod mens afspilningsenhed blev åbnet" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -121,7 +121,7 @@ msgstr "" "\n" "Fejl opstod mens optageenhed blev åbnet" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -131,43 +131,43 @@ msgstr "" "\n" "PulseAudio er tilgængelig" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "Et igangværende opkald eksisterer" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Igangværende opkald eksisterer" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Ønsker du stadig at afslutte" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "SFLphone fejl" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP er ikke understøttet af modtageren %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Sikker kommunikation ikke tilgængelig" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Fortsæt" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Afslut opkald" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -177,11 +177,11 @@ msgstr "" "tilstand.\n" "Den præcise årsag: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "ZRTP-forhandling mislykkedes" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -190,50 +190,50 @@ msgstr "" "%s ønsker at afslutte brugen af sikker kommunikation. Ved at godkende vil " "samtalen fortætte uden SRTP\n" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Godkend sikkerhedsændring" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Godkend" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s konto : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>Fra</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d indtalt besked" msgstr[1] "%d indtalte beskeder" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Kalder op med %s konto <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Nuværende konto" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Du har ingen oprettede konti" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Du har ingen registrerede konti" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -242,369 +242,369 @@ msgstr "" "<i>Med:</i> %s \n" "benyttende %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s understøtter ikke ZRTP." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "ZRTP forhandling mislykkedes med %s" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>Med:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Højtaler lydstyrke" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Mikrofon lydstyrke" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "_Vis hovedvindue" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "_Læg på" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Talebesked" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Ingen adressebog er valgt" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Adressebog" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "Talebesked" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone er en VoIP-klient kompatibel med SIP og IAX2 protokoller" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "Om SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "Afslut opkald" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Nyt opkald" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "Lav et nyt opkald" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Svar" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "Besvar opkaldet" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "Afslut opkaldet" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "I _venteposition" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "Sæt opkaldet i venteposition" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "F_jern fra venteposition" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "Fjern opkaldet fra venteposition" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "Konfigurationsfil" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Stun konfigureringsfejl" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d indtalt besked" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "_Luk" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "Minimere til systembakken" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "_Afslut" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Afslut programmet" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Rediger" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "_Kopier" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Kopier det valgte" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "Inds_æt" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "Indsæt indholdet af udklipsholderen" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Opkaldshistorik" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Opkaldshistorik" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "Konti" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Nuværende konto" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Indstillinger" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "Ændr dine indstillinger" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Vis" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Hjælp" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Fortsæt" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "Åbn manualen" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "Godkendelse" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "_Overfør" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "Overfør opkaldet" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "_Optag" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "Optag den aktuelle samtale" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "_Vis værktøjslinie" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "Vis værktøjslinien" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "_Nummertastatur" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "Vis nummertastaturet" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "Vis _lydstyrke indstillinger" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Vis lydstyrke indstillingerne" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Opkaldshistorik" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Opkaldshistorik" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Adressebog" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "I _venteposition" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "_Besvar opkald" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Ændre telefonnummer" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Ændre telefonnummeret før opkald" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Kontoparametre" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protokol" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Ukendt" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "_Værtsnavn" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "_Brugernavn" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Adgangskode" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Adgangskode" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "_Nummer for talebesked" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Godkendelse" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Hemmelig" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Legitimationsoplysning" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Godkendelsesnavn" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Adgangskode" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Sikkerhed" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "Benyt TLS transport (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "SRTP-nøgleudveksling" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Deaktiveret" @@ -657,40 +657,40 @@ msgstr "Konfigurer offentliggjort adresse og port:" msgid "Published port" msgstr "Offentliggjort port" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" -msgstr "" +msgstr "SIP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Kontoindstillinger" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Grundlæggende" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" -msgstr "Advanceret" +msgstr "Avanceret" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "Netværk" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -701,95 +701,95 @@ msgstr "" "du definerer her vil også benyttes hvis ingen konto kan tilknyttes et " "indgående eller udgående opkald." -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "Server svarede \"" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protokol" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Status" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Konti" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Oprettede konti" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "aktiv konto" msgstr[1] "aktiv konto" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "Der er ingen aktive konti" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Generelt" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Benyt Evolution adressekartotek" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Download begrænsning :" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "kort" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "Vis _kontaktbillede hvis tilgængeligt" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Felter fra Evolutions adressekartotek" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Arbejde" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Hjem" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Mobil" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Adressekartoteker" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Vælg hvilke af Evolutions adressekartoteker skal benyttes" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Navn" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "Denne vejledning er nu fuldført" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -797,346 +797,321 @@ msgstr "" "Du kan til enhver tid undersøge din registrering eller ændre dine kontis " "parametre i vinduet Indstillinger/Konti" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Server" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Brugernavn" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Sikkerhed: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Ingen" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "SFLphone-guiden til oprettelse af konto" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Velkommen til kontooperettelsesvejledning for SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" "Denne installeringsvejledning vil hjælpe dig med at konfigurere en konto" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "VoIP protokoller" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Vælg en kontotype" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Vælg en af følgende indstillinger" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Opret en gratis SIP/IAX2 konto hos sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Registrer en eksisterende SIP eller IAX2 konto" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "SIP kontoindstillinger" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Udfyld venligst følgende information" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Sikker kommunikation med _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Valgfri emailadresse" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "Denne emailadresse vil blive brugt til at sende dig indtalte beskeder" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_Emailadresse" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "IAX2 kontoindstillinger" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "Du opfordres til at aktivere dette hvis du er bag en firewall" -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "_Benyt STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_STUN server" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Kontoregistrering" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Tillykke!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frekvens" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Bithastighed" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Båndbredde" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "ALSA plugin" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Uddata" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Inddata" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" -msgstr "_Detektering af taleaktivitet" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Ringetoner" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "_Støjreducering (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Lydhåndtering" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_PulseAudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "ALSA indstillinger" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Optagelser" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Destinationsmappe" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Vælg en mappe" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Ringetoner" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "Aktiver _ringetoner" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Vælg en ringetone" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Lydfiler" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Kontoindstillinger" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "Adresseargument" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Brugerdefinerede kommandoer ved indgående opkald med webadresse" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s vil blive erstattet med den givne webadresse." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Udløse ved specifik _SIP protokolhoved" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Udløse ved _IAX2 webadresse" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "Kommando som skal _kaldes" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Omskrivning af telefonnummer" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "_Præfiks for indtastede numre" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Meddelelser" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "_Aktiver meddelelser" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Systembakke-ikon" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "_Vis hovedvindue ved indgående opkald" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "Aldrig _pop-op hovedvindue" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "Skjul SFLphone vinduet ved _start" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Opkaldshistorik" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "_Gem min historik i mindst" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "dage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Indstillinger" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Adressebog" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Hooks" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "ZRTP indstillinger" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "Send \"Hello Hash\" i S_DP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "_Spørg bruger om at godkende SAS" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "_Advar hvis ZRTP ikke understøttes" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "_Vis SAS en enkelt gang for vente-hændelser" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "Advancerede indstillinger for TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "TLS transport" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1149,85 +1124,119 @@ msgstr "" "TLS transporter for de enkelte konti. Bemærk dog at de hver vil benytte\n" "en dedikeret port forskellig fra hinanden.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "Autoritetscertifikatsliste" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "Vælg en fil med en autoritetscertifikatsliste (valgfri)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "Offentlig endpoint certifikatsfil" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "Vælg et offentligt endpoint-certifikat (valgfri)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "Vælg en privat nøglefil (valgfri)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "Adgangskode for den private nøgle" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "TLS protokolmetode" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "TLS cifferliste" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "Server navneinstans for udgående TLS forbindelse" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "Forhandlingstimeout" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "Udfør kontrol af indgående certifikater, som en server" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "Udfør kontrol af certifikater fra svar, som en klient" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "Kræv certifikat for indgående TLS forbindelser" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "ZRTP indstillinger" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "Send \"Hello Hash\" i S_DP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "_Spørg bruger om at godkende SAS" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "_Advar hvis ZRTP ikke understøttes" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "_Vis SAS en enkelt gang for vente-hændelser" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Søg alle" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Klik her for at ændre søgningstypen" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Søg i ubesvarede opkald" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Søg i indgående opkald" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Søg i udgående opkald" +#~ msgid "_Voice Activity Detection" +#~ msgstr "_Detektering af taleaktivitet" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "_Støjreducering (Narrow-Band Companding)" + #~ msgid "SIP Port" #~ msgstr "SIP Port" diff --git a/lang/de/de.po b/lang/de/de.po index 7c3122b07b..1ef5bedaa9 100644 --- a/lang/de/de.po +++ b/lang/de/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2010-04-03 16:49+0000\n" "Last-Translator: Jakob Kramer <Unknown>\n" "Language-Team: SavoirFaire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -15,64 +15,64 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registriert" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Nicht registriert" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Am versuchen..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Fehler" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Authentifizierung fehlgeschlagen" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Kein netzwerk" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Host unerreichbar" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Stun: Konfigurationsfehler" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Ungültiger Stun server" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Ungültig" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Mit Konto" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Kein registriertes Konto" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -80,28 +80,28 @@ msgstr "" "SFLphone Server kann nicht verbunden werden. Stellen Sie sicher, dass der " "Dämon läuft." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Direkter SIP-Anruf" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "heute um %R" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "gestern um %R" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -111,7 +111,7 @@ msgstr "" "\n" "Fehler während Öffnen des \"playback device\"" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -121,7 +121,7 @@ msgstr "" "\n" "Fehler während Öffnen des \"capture device\"" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -131,43 +131,43 @@ msgstr "" "\n" "Pulseaudio nicht gestartet" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "Laufender Anruf." -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Laufende Anrufe." -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Bitte bestätigen, dass Sie die Anwendung beenden möchten" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "SFLphone Fehler" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP wird vom Nutzer %s nicht unterstützt\n" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Sichere Verbindung nicht verfügbar" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Weiter" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Anruf beenden" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -176,11 +176,11 @@ msgstr "" "Ein %s Fehler verhinderte die Verschlüsselung des Telefonats mit %s.\n" "Genauer Grund: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "ZRTP Übertragung fehlgeschlagen" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -189,50 +189,50 @@ msgstr "" "%s will die sichere Kommunikation beenden. Das Gespräch wird dann ohne SRTP " "fortgesetzt.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Bestätigen" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "Konto %s : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>Von</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d Voice Nachricht" msgstr[1] "%d Voice Nachricht" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Mit %s Konto <i>%s</i> anrufen" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Aktuelles Konto" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Sie haben noch kein Konto eingestellt" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Sie haben noch kein registriertes Konto" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -241,369 +241,369 @@ msgstr "" "<i>Mit:</i> %s \n" "unter Verwendung von %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s unterstützt ZRTP nicht." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "ZRTP-Übertragung mit %s schlug fehl" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>Mit:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Lautsprecher Lautstärke" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Mikro Lautstärke" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "_Hauptfenster anzeigen" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "A_uflegen" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "%i aktiver Account" msgstr[1] "%i aktive Accounts" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Voicemail" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Adressbuch" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Adressbuch" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "Voicemail (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone ist ein VoIP Client (kompatibel mit SIP und IAX2 Protokolle)" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "Über SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "_Anruf" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Neuer Anruf" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "Einen neuen Anruf tätigen" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Abnehmen" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "Auf den Anruf antworten" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "Den Anruf beenden" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "in _Warteschleife" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "Einrichtungsdatei" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Stun: Konfigurationsfehler" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d Voice Nachricht" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "_Beenden" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Das Programm beenden" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Editieren" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Entfernen Sie das ausgewählte Konto" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Liste der vorherigen Anrufen _leeren" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Vorherigen Anrufen leeren" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Konten" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Aktuelles Konto" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Einstellungen" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "Ihre Einstellungen ändern" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Anzeigen" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Hilfe" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Weiter" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "Authentifizierung" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Weiterleiten" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "Weiterleiten zu :" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "_Gespräch aufzeichnen" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "Das momentane Gespräch aufnehmen" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "_Zeige Werkzeugleiste" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "_Wählscheibe" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "Lautstärke-Regler anzeigen" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Lautstärke-Regler anzeigen" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Vorherige Anrufe" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Liste der vorherigen Anrufen" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Adressbuch" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "in _Warteschleife" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "_Zurückrufen" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Nummer editieren" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Nummer vor dem Anruf editieren" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Konto parameter" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protokoll" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Unbekannt" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "_Hostname" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "_Benutzername" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Passwort" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Passwort" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "_Voicemail Nummer" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Authentifizierung" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Geheim" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Authentifizierung Name" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Passwort" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Sicherheit" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Deaktiviert" @@ -656,135 +656,135 @@ msgstr "" msgid "Published port" msgstr "Veröffentlichter Port" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "SIP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Kontoeinstellungen" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Allgemein" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Erweitert" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "Netzwerk" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protokoll" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Status" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Konten" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Konfigurierten Konten" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "aktive Konten" msgstr[1] "aktive Konten" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "Sie haben kein aktives Konto" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Allgemein" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "Addressbuch von Evolution verwenden" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Herunterladen Grenze :" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "Karten" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "Wenn verfügbar, _Bild anzeigen" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Felder vom Evolution Adressbuch" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Arbeit" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Heim" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Handy" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Adressbücher" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Adressbücher von Evolution zum verwenden auswählen" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Name" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "Assistent beendet." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -792,347 +792,322 @@ msgstr "" "Sie können jederzeit Ihres Registrierungsstatus überprüfen oder " "IhreKontoparameter ändern (Optionen/Konten)." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Server" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Benutzername" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Sicherheit: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Nichts" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "SFLphone Konto (Konfigurationsassistent)" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Wilkommen zu SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" "The Installationsassistent wird Ihnen helfen, ein Konto zu konfigurieren." -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "VoIP Protokoll" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Kontotyp auswählen" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterisk Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Bitte eine Option auswählen" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "SIP/IAX2 Konto bei sflphone.org erstellen lassen" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Existierendes SIP/IAX2 Konto registrieren" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Konfiguration des SIP Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Folgende Informationen bitte ausfühlen" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Sichere Kommunikation mit _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Fakultative E-mail-Adresse" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" "Diese E-mail-Adresse wird benutzt, um Ihnen voicemail Meldungen zu schicken." -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_Email" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Konfiguration des IAX2 Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "Sie sollten dieses einschalten, falls Sie hinter einer Firewall sind." -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "STUN Ei_nschalten" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_STUN Server" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Konto Registrierung" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Gratulation!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frequenz" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Bandbreite" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "ALSA Plugin" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Ausgabe" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Eingabe" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" -msgstr "\"Voice Activity\" Erkennung" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Klingeltöne" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "_Geräuschreduzierung (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Sound Manager" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "ALSA Konfiguration" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Aufnahmen" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Zielverzeichnis" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Verzeichnis auswählen" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Klingeltöne" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "Klingeltöne _einschalten" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Klingelton auswählen" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Audio Dateien" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Kontoeinstellungen" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "URL Argument" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Spezielle Befehle bei eingehender Anrufen mit URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s wird mit gegebener URL ersetzt." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Bewirkung beim spezifischen _SIP Header" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Bewirkung bei _IAX2 URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "Befehl _auszuführen" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Telefonnummer umformen" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "_Präfix vor Nummern einfügen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Desktopbenachrichtigungen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "Benachrichtigungen _einschalten" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Benachrichtigungsfeld (\"System Tray\") Icon" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "Hauptfenster anzeigen wenn eingehendes Gespräch" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "_Hauptfenster nie anzeigen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "_Unsichtbar beim Start" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Liste der vorherigen Anrufen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "Tage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Einstellungen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Adressbuch" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Hooks" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "ZRTP Optionen" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "Den Benutzer bitten, SAS zu bestätigen" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "_Warnung wenn ZRTP nicht unterstüzt" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "SDES Optionen" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "Erweiterte Optionen für TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "TLS Transport" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1141,85 +1116,119 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "TLS-Protokol-Methode" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "Bestätige eingehende Zertifikate als einen Server" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "Bestätige eingehende Zertifikate als einen Client" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "Benötige Zertifikat für eingehende TLS-Verbindungen" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "ZRTP Optionen" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "Den Benutzer bitten, SAS zu bestätigen" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "_Warnung wenn ZRTP nicht unterstüzt" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "SDES Optionen" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Suche alle" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Klicken Sie hier, um Suchtyp zu wechseln" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Suche nach Anruf in Abwesenheit" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Suche nach eingehenden Anruf" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Suche nach ausgehenden Anru" +#~ msgid "_Voice Activity Detection" +#~ msgstr "\"Voice Activity\" Erkennung" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "_Geräuschreduzierung (Narrow-Band Companding)" + #~ msgctxt "account state" #~ msgid "Error" #~ msgstr "Fehler" diff --git a/lang/el/el.po b/lang/el/el.po index 968ee7bb5b..14bd861c86 100644 --- a/lang/el/el.po +++ b/lang/el/el.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2010-01-13 02:45+0000\n" "Last-Translator: jarlaxl lamat <sztaasz@gmail.com>\n" "Language-Team: Greek <el@li.org>\n" @@ -15,64 +15,64 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Εγγεγραμμένος" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Μη εγγεγραμμένος" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Προσπαθώ..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Σφάλμα" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Αποτυχία πιστοποίησης" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Μη προσβάσιμο δίκτυο" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Μη προσβάσιμος υπολογιστής" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Σφάλμα ρύθμισης εξυπηρετητή STUN" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Ακυρος εξυπηρετητής STUN" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Μη έγκυρο" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Χρήση λογαριασμού" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Μη πιστοποιημένοι λογαριασμοί" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -80,28 +80,28 @@ msgstr "" "Αδυναμία σύνδεσης στον εξυπηρετητη του SFLphone\n" "Σιγουρευτείτε οτι τρέχει ο daemon" -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Κλήση κατευθείαν SIP" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -111,7 +111,7 @@ msgstr "" "\n" "Σφάλμα κατα το άνοιγμα της συσκευής αναπαραγωγής" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -121,7 +121,7 @@ msgstr "" "\n" "Σφάλμα κατα το άνοιγμα της συσκευής λήψης ήχου" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -131,43 +131,43 @@ msgstr "" "\n" "Tο Pulseaudio δεν τρέχει" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "Υπάρχει μια κλήση εν εξελίξει" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Υπάρχουν κλήσεις εν εξελίξει" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Να κλείσω σιγουρα;" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "Σφάλμα SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "Το πρωτόκολλο ZRTP δεν υποσττηρίζεται απο το peer %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Κρυπτογραφημένη επικοινωνια μη διαθέσιμη" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Συνέχεια" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Τερματισμός κλήσης" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -177,11 +177,11 @@ msgstr "" "μορφή.\n" "Ακριβής λόγος: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "Η διαπραγμάτευση ZRTP απέτυχε" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -190,50 +190,50 @@ msgstr "" "Ο/Η %s θέλει να σταματησει να χρησιμοποιεί κρυπτογραφημένη επικοινωνία. Η " "επιβεβαιωση θα συνεχίσει τη συζήτηση αλλα χωρις κρυπτογράφηση\n" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Επιβεβαίωση Φύγε Καθαρισμός" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Επιβεβαίωση" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s λογαριασμός %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>Από</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d Μηνυμα τηλεφωνητή" msgstr[1] "%d Μηνυματα τηλεφωνητή" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Κλήση μέ %s λογαριασμό <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Τρέχων λογαριασμός" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Δεν έχετε θέσει λογαριασμούς" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Δεν έχετε κατοχυρομένους λογαριασμούς" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -242,371 +242,371 @@ msgstr "" "<i>Με:</i> %s \n" "χρηση: %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "Ο %s δεν υποστηρίζει ZRTP" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "Η ZRTP διαπραγμάτευση απέτυχε με %s" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>Με:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Ένταση ηχείων" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Ενταση μικροφώνου" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "Δείξε το βα_σικό παράθυρο" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "Κλείστο _Η" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Τηλεφωνητής" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Κανένα βιβλίο διευθύνσεω δεν έχει επιλεχθεί" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Βιβλίο διευθύνσεων" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "Τηλεφωνητής (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" "Το SFLphone ειναι ένα προγραμμα πελάτης VoIP συμβατό με SIP και ΙΑΧ2 " "πρωτόκολλα" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "Σχετικά με το SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "Κλήση" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Νέα κλήση" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "Κάντε μια νέα κλήση" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "Σήκωστο _Π" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "Σηκώστε το τηλέφωνο" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "Κλέιστε το τηλέφωνο" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "Σε α_ναμονή" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "Βάλτε την κλήση σε αναμονή" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "Επανα_φορά" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "Επαναφέρετε την κλήση σε αναμονή" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "Οδηγός Ρυθμίσεων _Α" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Εκτέλεση του οδηγού ρύθμισης" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "Κλήση προς τον τηλεφωνητή σας" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "_Κλείσιμο" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "Ελαχιστοποίηση στη περιοχή ειδοποιήσεων" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "Έξοδος" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Τερματισμός του προγράμματος" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Επεξεργασία" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "Αντέγρα_ψε" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Αντιγραφή της επιλογής" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "Ε_πικόλληση" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "Επικόλληση των περιεχομένων του προχείρου (clipboard)" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Καθαρισμός ιστορικού κλ_ησεων" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Καθαρισμός του ιστορικού κλησεων" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "Λογαρι_ασμοί" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Επεξεργασία των λογαριασμών σας" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "_Προτιμήσεις" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "Αλλαγή των προτιμήσεων σας" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Προβολή" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Βο_ηθεια" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Περιεχόμενα" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "Άνοιγμα του εγχειριδίου" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "Περί αυτής της εφαρμογής" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Με_ταφορά" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "Μεταφορά της κλήσης" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "Καταγ_ραφή" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "Καταγραψτε τη τρέχουσα συνομιλία" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "Εμφάνι_ση γραμμής εργαλείων" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "Εμφάνιση της γραμμής εργαλείων" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "Πληκτρολόγιο _δ" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "Εμφάνιση του πληκτρολογίου" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "Ένταση ήχων" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Δείξε τις ρυθμίσεις για την ένταση ήχων" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Ιστορικό _Η" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Ιστορικό κλήσεων" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Βιβλίο διευθύνσεων _Α" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "Κλ_ηση σε αναμονή" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "Κλήση" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Επεξεργσία τηελφωνικού αριθμού" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Επεξεργσία τηελφωνικού αριθμού προ της κλήσης" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Παράμετροι λογαρισμού" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "Ψευδώνυμο" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Πρωτοκολλο" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "'Αγνωστο" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "Εξυπηρετητής παρόχου" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "Ονομα χρήστη" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "Συνθηματικό" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Εμφάνιση συνθηματικού" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "Αριθμός τηλεφωνητή" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Ταυτοποίηση" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Απόρρητο" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Πιστοποιητικό" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Όνομα εξακρίβωσης" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Συνθηματικό" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Ασφάλεια" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "Χρήση TLS" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "Ανταλλαγή κλειδιών SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Απενεργοποιημένο" @@ -659,479 +659,452 @@ msgstr "" msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +msgid "Ringtone" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +msgid "Voice enhancement settings" +msgstr "" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1140,81 +1113,109 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "" diff --git a/lang/es/es.po b/lang/es/es.po index 7313bad08d..75d66eafa6 100644 --- a/lang/es/es.po +++ b/lang/es/es.po @@ -9,180 +9,180 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" -"PO-Revision-Date: 2009-12-17 23:18+0000\n" -"Last-Translator: Jorge E. Gómez <jorge@jorgee.net>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-06-17 16:12+0000\n" +"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registrado" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "No registrado" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Intentando..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Error" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Falló la autenticación" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" -msgstr "Red Inaccesible" +msgstr "Red inaccesible" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" -msgstr "_Parte del servidor" +msgstr "Servidor inaccesible" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" -msgstr "Error de configuración Stun" +msgstr "Error de configuración de Stun" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" -msgstr "Servidor stun inválido" +msgstr "Servidor Stun no válido" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" -msgstr "" +msgstr "Listo" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" -msgstr "Inválido" +msgstr "No válido" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Usando la cuenta" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" -msgstr "Ninguna cuenta registrada" +msgstr "No hay ninguna cuenta registrada" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -"Incapaz de conectar con el servidor SFLphone.\n" -" Asegúrese que el demonio esté funcionando." +"No se pudo conectar con el servidor de SFLphone.\n" +"Asegúrese de que el demonio está en ejecución." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" -msgstr "Llamadas IP directas" +msgstr "Llamada SIP directa" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" -msgstr "" +msgstr "hoy a las %R" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" -msgstr "" +msgstr "ayer a las %R" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" -msgstr "" +msgstr "%A a las %R" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" -msgstr "" +msgstr "%x a las %R" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -"<b>Notificación ALSA</b>\n" +"Notificación ALSA\n" "\n" "Error al abrir el dispositivo de reproducción" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -"<b>Notificación ALSA</b>\n" +"Notificación ALSA\n" "\n" "Error al abrir el dispositivo de captura" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" -"<b>Notificación de Pulseaudio</b>\n" +"Notificación de Pulseaudio\n" "\n" "Pulseaudio no está funcionando" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." -msgstr "Hay una llamada en curso" +msgstr "Hay una llamada en curso." -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Hay llamadas en curso." -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "¿Aún quiere salir?" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" -msgstr "Error SFLphone" +msgstr "Error de SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" -msgstr "ZRTP no es compatible con %s\n" +msgstr "El nodo %s no soporta ZRTP\n" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Comunicación segura no disponible" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" -msgstr "Seguir" +msgstr "Continuar" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Terminar llamada" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -"Un error de %s obliga la llamada con %s a caer bajo un modo decifrado.\n" +"Un error de %s obliga a la llamada con %s a realizarse en modo no cifrado.\n" "Razón exacta: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" -msgstr "Negociación ZRTP fracasada" +msgstr "Falló la negociación ZRTP" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -191,50 +191,50 @@ msgstr "" "%s quiere parar la comunicación segura. Confirmar reanudará la conversación " "sin SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Confirmar" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Confirmar" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s cuenta : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>De</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d mensaje de voz" msgstr[1] "%d mensajes de voz" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Llamando con la cuenta %s <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Cuenta actual" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" -msgstr "Ninguna cuenta configurada" +msgstr "No tiene configurada ninguna cuenta" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "No tiene ninguna cuenta registrada" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -243,369 +243,369 @@ msgstr "" "<i>Con:</i> %s\n" "usando %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." -msgstr "%s no es compatible con ZRTP." +msgstr "%s no soporta ZRTP" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" -msgstr "Negociación ZRTP fracasada con %s" +msgstr "La negociación ZRTP ha fracasado con %s" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>Con:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" -msgstr "Volumen de altavoces" +msgstr "Volumen de los altavoces" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Volumen del micrófono" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" -msgstr "Mostrar ventana principal" +msgstr "Mostrar _ventana principal" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "_Colgar" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i cuenta activa" +msgstr[1] "%i cuentas activas" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Mensaje de voz" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" -msgstr "Libreta de contactos" +msgstr "No se ha seleccionado ninguna libreta de direcciones" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" -msgstr "Libreta de contactos" +msgstr "Libreta de direcciones" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "Mensaje de voz (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "SFLphone es un teléfono VoIP compatible con los protocolos SIP y IAX2" +msgstr "SFLphone es un cliente VoIP compatible con los protocolos SIP e IAX2" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" -msgstr "Sobre SFLphone" +msgstr "Acerca de SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" -msgstr "_Llamar" +msgstr "Llamar" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Nueva llamada" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "Realizar un nuevo llamado" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Descolgar" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "Responder el llamado" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "Finalizar el llamado" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "En _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "Poner el llamado en espera" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "Seguir" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "Sacar el llamado de espera" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "Archivo de configuración" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Error de configuración Stun" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d mensaje de voz" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "_Cerrar" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "Minimizar al área de notificación" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" -msgstr "_Editar" +msgstr "_Salir" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Salir del programa" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Editar" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "_Copiar" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Eliminar la cuenta seleccionada" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "_Pegar" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "Pegar el contenido del portapapeles" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "_Limpiar historial" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Limpiar historial" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Cuentas" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Cuenta actual" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Preferencias" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "Cambiar sus preferencias" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Ver" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Ayuda" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Seguir" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "Abrir el manual" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "Autentificación" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Transferir" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "Transferir a :" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "G_rabar" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "Grabar la conversación actual" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "_Mostrar barra de herramientas" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "Mostrar barra de herramientas" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" -msgstr "Desactivado" +msgstr "_Teclado" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "Mostrar el teclado de marcado" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "_Controles de volumen" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "_Controles de volumen" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Historia de Llamada" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Historia de Llamada" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Libreta de contactos" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "En _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "_Llamar" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Editar número de teléfono" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Editar el número de teléfono antes de llamar" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Parámetros de cuenta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protocolo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Desconocido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "_Nombre de equipo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "_Usuario" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "_Número de buzón de voz" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" -msgstr "" +msgstr "Agente de _usuario" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Autentificación" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Secreto" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Informaciónes" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Nombre de autentificación" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Seguridad" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "Usa transporte TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "Intercambió de clave SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Desactivado" @@ -658,40 +658,40 @@ msgstr "Publicar dirección y puerto:" msgid "Published port" msgstr "Puerto publicado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "Códecs" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" -msgstr "" +msgstr "DTMF" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" -msgstr "" +msgstr "RTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "SIP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Configuración de cuentas" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Básico" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Avanzado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "Red" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -702,95 +702,95 @@ msgstr "" "usted define aqui serán también utilizados si ninguná cuenta puede ser " "igualada a una llamada entrante o saliente." -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" -msgstr "El servidor contesta \"%s\" (%d)" +msgstr "El servidor ha devuelto «%s» (%d)" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protocolo" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Estado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Cuentas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Cuentas Configuradas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "Hay %d cuenta activada" msgstr[1] "Hay %d cuentas activadas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "No tienes ninguna cuenta activada" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "General" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Usar libreta de contactos de Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Limite de descarga :" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "tarjetas" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "_Mostrar fotos de contactos, si están disponibles" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Usar los siguientes campos de la libreta de direcciones de Evolution:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "P_rofesional" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Personal" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Movil" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Libretas de contactos" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Seleccione la libreta de contactos de Evolution a usar" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Nombre" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "El asistente ha finalizado" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -798,345 +798,322 @@ msgstr "" "Puede comprobar en cualquier momento su estado de registro o modificar la " "configuración de sus cuentas en la ventana de Opciones/Cuentas." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Servidor" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Usuario" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Seguridad: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Ninguno" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "Asistente de creación de cuentas" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "¡Bienvenido al asistente de creación de cuentas de SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "Este asistente de instalación le ayudará a configurar una cuenta." -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Escoja un tipo de cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Por favor, elija una de las siguientes opciones" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Crear una cuenta SIP/IAX2 gratis en sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Registrar una cuenta SIP o IAX2 existente" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Configuración de cuenta SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Por favor, ingrese la siguiente información" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Comunicación segura con _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Dirección de correo opcional" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "Esta dirección de correo se usará para mandar sus mensajes de voz" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_Correo" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Configuración de cuenta IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Conversión de Dirección de Red (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "Probablemente tiene que activar esto si está detrás de un cortafuegos." -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "A_ctivar STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_Servidor STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Registro de cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "¡Enhorabuena!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frecuencia" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Tasa de transferencia" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Ancho de banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Salida" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Entrada" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" -msgstr "_Detección de actividad de voz" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "_Reducción de ruido" +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Gestor de audio" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "Configuración de ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Grabaciones" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Carpeta de destino" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Seleccione una carpeta" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "_Habilitar tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Elija un tono de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Archivos de Audio" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Configuración de cuentas" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "Argumento de URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Comandos personalizados en llamada entrante con URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s se remplazará por la URL." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Disparador en una cabecera _SIP específica" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Disparador con una URL _IAX2" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "_Comando a ejecutar" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Reescritura de número de teléfono" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "_Prefijar los números marcados con" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Notificación de escritorio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "_Activar notificaciones" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Icono de bandeja del sistema" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" -msgstr "" +msgstr "Mostrar SFLphone en la barra de tareas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "_Popup ventana principal al recibir llamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "_Nunca mostrar ventana principal" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "Esconder SFLphone al principio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Historia de llamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "_Guardar mi historia por lo menos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "días" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Preferencias" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Sonido" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Libreta de Direcciones" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Disparadores" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" -msgstr "" +msgstr "Accesos directos" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" +"Tenga cuidado: estos accesos directos podrían reemplazar los accesos " +"directos de todo sistema." -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "Opciones ZRTP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "Enviar Hello Hash en S_DP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "Preguntar al usuario de confirmar SAS" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "_Prevenir si ZRTP no es compatible" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "Presentar SAS una vez para eventos en espera" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "Opciones avanzadas para TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "Transporte TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1149,85 +1126,119 @@ msgstr "" "diferente transporte TLS para cada cuenta. De cualquier forma, cada uno de " "ellos usará un puerto dedicado, diferente el uno del otro.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" -msgstr "" +msgstr "Escuchador TLS global (todas cuentas)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "Lista de Certificados de Autoridad" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "Escoge un archivo de lista de CA (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "Archivo del certificado del par público" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "Escoge un certificado de par público (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "Escoge un archivo de clave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "Contraseña de clave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "Método de protocolo TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "Lista de cifrado TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "Nombre del servidor para la conexión TLS saliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "Negociación expirada (seg:mseg)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "Checar certificados entrantes, como un servidor" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "Checar certificados de la respuesta, como cliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "Requiere certificado para conexiones TLS entrantes" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "Opciones ZRTP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "Enviar Hello Hash en S_DP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "Preguntar al usuario de confirmar SAS" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "_Prevenir si ZRTP no es compatible" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "Presentar SAS una vez para eventos en espera" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "Opciones SDES" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Buscar todos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" -msgstr "Pulse aqui para cambiar el tipo de busqueda" +msgstr "Pulse aquí para cambiar el tipo de búsqueda" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Buscar en llamadas pérdidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Buscar en llamadas entrantes" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Buscar en llamadas salientes" +#~ msgid "_Voice Activity Detection" +#~ msgstr "_Detección de actividad de voz" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "_Reducción de ruido" + #~ msgctxt "account state" #~ msgid "Registered" #~ msgstr "Registrado" @@ -1843,8 +1854,8 @@ msgstr "Buscar en llamadas salientes" #~ "Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ," #~ "Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad " #~ "Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad Contributions:," -#~ "Andres Mujica,Jorge E. Gómez,Maxime Chambreuil,Nicolás M. Zahlut,Xuacu " -#~ "Saturio" +#~ "Andres Mujica,Daniel Mustieles,Jorge E. Gómez,Maxime Chambreuil,Nicolás " +#~ "M. Zahlut,Xuacu Saturio" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" @@ -1853,5 +1864,5 @@ msgstr "Buscar en llamadas salientes" #~ "chambreuil@gmail.com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail." #~ "com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres." #~ "mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres.mujica@seaq.com." -#~ "co,jorge@jorgee.net,maxime.chambreuil@gmail.com,nzahlut@live.com," -#~ "xuacusk8@gmail.com" +#~ "co,daniel.mustieles@gmail.com,jorge@jorgee.net,maxime.chambreuil@gmail." +#~ "com,nzahlut@live.com,xuacusk8@gmail.com" diff --git a/lang/fr/fr.po b/lang/fr/fr.po index a6001b51c9..f790d7fe8a 100644 --- a/lang/fr/fr.po +++ b/lang/fr/fr.po @@ -7,74 +7,74 @@ # POT-Creation-Date: 2008-01-13 01:39+0100\n msgid "" msgstr "" -"Project-Id-Version: SFLphone 0.9.4\n" +"Project-Id-Version: SFLphone 0.9.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" -"PO-Revision-Date: 2010-04-19 19:52+0000\n" -"Last-Translator: Alexandre Savard <alexandre.savard@savoirfairelinux.com>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-04-29 08:48+0000\n" +"Last-Translator: Christophe CATARINA <Unknown>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Enregistré" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Non Enregistré" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "En cours..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Erreur" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Erreur d'authentification" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Réseau non trouvé" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Serveur introuvable" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Erreur de configuration Stun" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Serveur Stun invalide" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" -msgstr "" +msgstr "Prêt" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Non valide" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Utilise le compte" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Pas de compte enregistré" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -82,28 +82,28 @@ msgstr "" "Impossible de se connecter au serveur SFLphone.\n" " Assurez-vous que le démon est lancé." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Appel direct SIP" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" -msgstr "" +msgstr "Aujourd'hui, à %R" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" -msgstr "" +msgstr "Hier, à %R" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" -msgstr "" +msgstr "%A, à %R" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" -msgstr "" +msgstr "%x, à %R" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -113,7 +113,7 @@ msgstr "" "\n" "Erreur lors de l'ouverture du périphérique de sortie" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -123,7 +123,7 @@ msgstr "" "\n" "Erreur lors de l'ouverture du périphérique d'entrée" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -133,43 +133,43 @@ msgstr "" "\n" "Pulseaudio n'est pas lancé" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "Vous avez un appel en cours." -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Vous avez des appels en cours." -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Voulez-vous quitter?" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "Erreur SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP n'est pas supporté par %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Communications sécurisées non disponibles" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Continuer" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Arrêter l'appel" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -178,11 +178,11 @@ msgstr "" "L'appel avec %s est passé en mode non-crypté à cause d'une erreur %s.\n" "Raison exacte: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "Erreur d'authentification" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -191,50 +191,50 @@ msgstr "" "%s ne désire plus utiliser la communication sécurisée. Confirmer que vous " "voulez continuer sans ZRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Confirmer Communication en clair" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Confirmer" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s account : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>De</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d message vocal" msgstr[1] "%d messages vocaux" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Appel avec le compte %s <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Compte courant" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Vous n'avez pas configuré de compte" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Vous n'avez aucun compte enregistré" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -243,370 +243,370 @@ msgstr "" "<i>Avec:</i> %s\n" "using %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s ne supporte pas ZRTP." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "La négociation ZRTP avec %s a échoué" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>De:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Volume des hauts-parleurs" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Volume du micro" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "_Afficher la fenêtre principale" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "_Raccrocher" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i compte actif" +msgstr[1] "%i comptes actifs" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Boite vocale" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Aucun carnet d'adresses sélectionné" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Carnet d'adresses" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "Boite vocale (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" "SFLphone est un client VoIP compatible avec les protocoles SIP et IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "A propos de SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "Actions" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Nouvel appel" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "Appeler" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Décrocher" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "Répondre à l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "Terminer l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "Mettre en attente" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "Mettre l'appel en attente" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "Reprendre" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "Reprendre l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "_Assistant de configuration" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Lancer l'assistant de configuration" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "Appeler la boite vocale" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "_Fermer" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "Minimiser dans la barre des tâches" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "_Quitter" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Quitter le programme" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Editer" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "_Copier" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Copier la sélection" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "C_oller" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "Coller le contenu du presse-papiers" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Effacer l'_historique" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Effacer l'historique" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "Co_mptes" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Éditer les comptes" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Préférences" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "Modifier les préférences" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "A_ffichage" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "A_ide" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Sommaire" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "Ouvrir le manuel" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "À propos de cette application" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Transférer" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "Transférer à :" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "Enregistrer" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "Enregistrer la conversation courante" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "Afficher la _barre d'outil" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "Afficher la barre d'outil" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "_Clavier" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "Afficher le clavier" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "Contrôle du _volume" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Afficher les controles du volume" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Historique" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Historique d'appels" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Carnet d'adresses" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "_Mettre en attente" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "_Rappeler" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Éditer le numéro" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Éditer le numéro de téléphone avant d'appeler" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Paramètres du Compte" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "A_lias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "P_rotocole" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Inconnu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "_Serveur" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "Usa_ger" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Afficher le mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "_Boite vocale #" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" -msgstr "" +msgstr "_User-agent" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Identification" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Informations" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Nom d'authentification" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Sécurité" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "Utiliser un transport TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "Échange de clé SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Désactivé" @@ -659,40 +659,40 @@ msgstr "Configurer l'adresse et le port à publier" msgid "Published port" msgstr "Port de publication" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" -msgstr "" +msgstr "DTMF" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" -msgstr "" +msgstr "RTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "SIP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Paramètre des comptes" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Général" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Avancé" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "Réseau" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -703,95 +703,95 @@ msgstr "" "sont aussi utilisé si aucun compte ne peut être attribué à un appel entrant " "ou sortant." -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "Le serveur a répondu \"%s\" (%d)" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protocole" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Statut" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Comptes" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Comptes Configurés" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "%d compte actif" msgstr[1] "%d comptes actifs" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "Vous n'avez aucun compte actif" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Général" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Utiliser les carnets d'adresse d'Évolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Limite de téléchargement :" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "entrées" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "_Afficher la photo si disponible" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Utiliser les champs suivants des carnets d'adresse d'Évolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Professionnels" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "P_ersonnels" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Mobiles" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Carnets d'adresses" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Sélectionnez les carnets d'adresses d'Evolution à utiliser" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Nom" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "Cet assistant est maintenant terminé." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -799,347 +799,322 @@ msgstr "" "Vous pouvez à tout moment vérifier votre état d'enregistrement ou modifier " "les paramètres de vos comptes dans la fenêtre Options/Comptes." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Serveur" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Nom d'utilisateur" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Sécurité: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Aucun" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "Assistant de création de compte de SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Bienvenue dans l'assistant de création de compte de SFLphone !" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "Cet assistant vous guidera dans la configuration d'un compte." -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "Protocoles VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Sélectionnez un type de compte" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Compte" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Veuillez sélectionner une des options suivantes" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Créer un compte SIP/IAX2 gratuit sur sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Enregistrer un compte SIP ou IAX2 existant" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Paramètres de compte SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Veuillez remplir les champs suivants" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Communications sécurisées avec _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Adresse courriel optionnelle" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "Vos messages vocaux seront envoyés par courriel à cette adresse." -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "A_dresse courriel" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Paramètres de compte IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" "Vous devriez probablement activer cette option si vous vous trouvez derrière " "un pare-feu." -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "A_ctiver STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "S_erveur STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Enregistrement du compte" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Félicitations!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Fréquence" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Bande passante" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "Greffon ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Sortie" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Entrée" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" -msgstr "Détection de l'activité de la voix" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +msgid "Ringtone" +msgstr "Sonneries" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "Réduction du bruit (Compresseur extenseur LBR)" +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Interface Audio" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "Paramètres ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Enregistrements" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Dossier de destination" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Choisissez un dossier" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Sonneries" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "_Activer les sonneries" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Sélectionner une sonnerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Fichier Audio" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Paramètre des comptes" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "Argument URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Commandes personnalisées lors d'appels entrants avec une URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s sera remplacé par l'URL passé en argument." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Déclencher sur un entête _SIP spécifique" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Déclencher en _IAX2" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "Commande à e_xécuter" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Réécriture des numéros appelés" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "_Préfixer les numéros composés par" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Notifications de Bureau" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "_Activer les notifications" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Icône dans la barre des tâches" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "Montrer SFLphone dans la barre des tâches" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "Faire apparaître la fenêtre _principale lors d'appel entrant" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "Ne _jamais afficher la fenêtre principale" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "_Cacher la fenêtre de SFLphone au démarrage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Historique des appels" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "Garder mon historique au moins" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "jours" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Préférences" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Carnet d'adresse" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Ancrage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" -msgstr "" +msgstr "Raccourcis claviers" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" +"Soyez prudent; ces raccourcis peuvent entrer en conflit avec ceux du système." -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "Options de ZRTP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "Envoyer le hash de Hello dans S_DP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "Demander à l'utilisateur de confirmer le SAS" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "_Avertir si ZRTP n'est pas supporté" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "Afficher le SAS seulement une fois sur les mises en attente" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "Options avancées TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "Transport TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1152,85 +1127,119 @@ msgstr "" "TLS différent pour chaque compte. Cependant, chacun écoutera sur un port " "différent.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" -msgstr "" +msgstr "Port TLS global (pour tous les comptes)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "Liste des autorités de certification" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "Choisir une liste d'AC (optionnel)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "Fichier de certificats de l'extrémité public" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "Sélectionner le certificat de l'extrémité public" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "Choisir une clé privée (optionnel)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "Mot de passe pour la clé privée" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "Méthode pour TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "Liste de cryptogramme TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "Instance du serveur pour les connections TLS sortantes" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "Expiration de la négociation" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "En tant que serveur, vérifier les certificats entrants" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "En tant que client, vérifier les certificats dans les réponses" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "Exiger un certificat pour les connexions TLS entrantes" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "Options de ZRTP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "Envoyer le hash de Hello dans S_DP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "Demander à l'utilisateur de confirmer le SAS" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "_Avertir si ZRTP n'est pas supporté" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "Afficher le SAS seulement une fois sur les mises en attente" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "Options SDES" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "Recourrir à RTP si SDES échoue" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Rechercher dans tous" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Cliquez ici pour changer le type de recherche" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Rechercher dans les appels manqués" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Rechercher dans les appels entrants" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Rechercher dans les appels sortants" +#~ msgid "_Voice Activity Detection" +#~ msgstr "Détection de l'activité de la voix" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "Réduction du bruit (Compresseur extenseur LBR)" + #~ msgctxt "account state" #~ msgid "Registered" #~ msgstr "Enregistré" @@ -1885,8 +1894,8 @@ msgstr "Rechercher dans les appels sortants" #~ "Jérémy Quentin, ,Launchpad Contributions:,Emmanuel Milou,Maxime " #~ "Chambreuil, ,Launchpad Contributions:,Emmanuel Milou,Maxime Chambreuil, ," #~ "Launchpad Contributions:,Emmanuel Milou,Maxime Chambreuil, ,Launchpad " -#~ "Contributions:,Alexandre Savard,Emmanuel Milou,Maxime Chambreuil,Pierre " -#~ "Slamich" +#~ "Contributions:,Alexandre Savard,Christophe CATARINA,Emmanuel Milou,Maxime " +#~ "Chambreuil,Pierre Slamich" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" @@ -1894,6 +1903,6 @@ msgstr "Rechercher dans les appels sortants" #~ "jeremy.quentin@savoirfairelinux.com,,,emmanuel.milou@savoirfairelinux.com," #~ "maxime.chambreuil@gmail.com,,,emmanuel.milou@savoirfairelinux.com,maxime." #~ "chambreuil@gmail.com,,,emmanuel.milou@savoirfairelinux.com,maxime." -#~ "chambreuil@gmail.com,,,alexandre.savard@savoirfairelinux.com,emmanuel." +#~ "chambreuil@gmail.com,,,alexandre.savard@savoirfairelinux.com,,emmanuel." #~ "milou@savoirfairelinux.com,maxime.chambreuil@gmail.com,pierre." #~ "slamich@gmail.com" diff --git a/lang/it/it.po b/lang/it/it.po index 25652db0e7..f9e4a8ddbc 100644 --- a/lang/it/it.po +++ b/lang/it/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2010-03-21 18:30+0000\n" "Last-Translator: Milo Casagrande <milo@casagrande.name>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -15,64 +15,64 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registrato" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Non registrato" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Registrazione in corso..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Errore" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Autenticazione fallita" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Rete irraggiungibile" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Host non raggiungibile" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Errore di configurazione STUN" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Server STUN non valido" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Non valido" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Account in uso:" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Nessun account registrato" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -80,28 +80,28 @@ msgstr "" "Impossibile connettersi al server SFLphone.\n" "Accertarsi che il demone sia in esecuzione." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Chiamata SIP diretta" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -110,7 +110,7 @@ msgstr "" "Notifica ALSA\n" "Errore nell'apertura del dispositivo di riproduzione" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -119,7 +119,7 @@ msgstr "" "Notifica ALSA\n" "Errore nell'apertura del dispositivo di registrazione" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -128,473 +128,473 @@ msgstr "" "Notifica PulseAudio\n" "PulseAudio non è in esecuzione" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "C'è una chiamata in corso." -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Ci sono chiamate in corso." -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Vuoi veramente uscire?" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "Errore SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Termina la chiamata" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "Negoziazione ZRTP fallita" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "Account %s: %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>Da</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d messaggio vocale" msgstr[1] "%d messaggi vocali" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Chiamata tramite account %s <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Account attivo" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Nessun account configurato" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Nessun account registrato" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s non supporta ZRTP." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "Negoziazione ZRTP fallita con %s" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>Con:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Volume altoparlante" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Volume microfono" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "Mostra la finestra principale" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "_Chiudi" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Segreteria telefonica" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Rubrica" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Rubrica" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "Segreteria telefonica (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone è un client VoIP compatibile con i protocolli SIP e IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "Informazioni su SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "_Chiama" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "Chiama" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "Effettua una nuova chiamata" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "Rispondi" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "Rispondi alla chiamata" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "Termina la chiamata" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "Attesa" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "Metti in attesa la chiamata" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Errore di configurazione STUN" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d messaggio vocale" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "_Esci" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Esce dal programma" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Modifica" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Elimina l'account selezionato" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Cancella la cronologia" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Cancella la cronologia" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Account" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Account attivo" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Preferen_ze" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "Modifica le preferenze" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Visualizza" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Aiuto" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Inoltra" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "Inoltra a:" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "_Registra" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "Regista la conversazione in corso" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "Mostra tastiera" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "Mostra la tastiera" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "Mostra i controlli del volume" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Mostra i controlli del volume" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Cronologia" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Cronologia chiamate" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Rubrica" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "Attesa" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Parametri account" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Pseudonimo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protocollo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Sconosciuto" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "Nome _host" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "Nome _utente" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Password" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Password" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "Numero segreteria telefonica" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Autenticazione" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Password" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "" @@ -647,482 +647,457 @@ msgstr "" msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "Codec" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "SIP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Impostazioni dell'account" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Generale" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Avanzate" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "Rete" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protocollo" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Stato" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Account" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Account configurati" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Usa la rubrica di Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "tessere" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "Mostra la foto del contatto se disponibile" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Campi dalla rubrica di Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Lavoro" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Home" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "Cellulare" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Rubriche indirizzi" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Selezionare la rubrica di Evolution da usare" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Nome" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "La procedura guidata è terminata." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Pseudonimo" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Server" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Nome utente" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" "Benvenuti alla procedura guidata per la creazione di un account SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "Questa procedura permetterà di configurare un account." -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "Protocolli VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Selezionare un tipo di account" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Account" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Scegliere una delle seguenti opzioni" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Creare un account SIP/IAX2 gratuito su sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Registrare un account SIP o IAX2 esistente" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Impostazioni account SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Indirizzo email opzionale" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" "L'indirizzo email sarà usato per l'invio dei messaggi della segreteria " "telefonica." -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "Indirizzo _email" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Impostazioni account IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "Dovrebbe essere abilitato se ci si trova dietro ad un firewall." -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "Abilita STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "Server STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Registrazione account" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Congratulazioni!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frequenza" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Uscita" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Ingresso" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Suonerie" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "Impostazioni ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Registrazioni" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Cartella di destinazione" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Seleziona una cartella" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Suonerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "Abilita suonerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Selezionare una suoneria" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "File audio" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Impostazioni dell'account" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Rileva header SIP specifico" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Rileva URL su IAX2" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "Comando da eseguire" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Riscrittura numero telefonico" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "Prefisso da aggiungere ai numeri da chiamare" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Notifiche" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "Abilita notifiche" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Icona per area di notifica" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "Mostra la finestra principale all'arrivo delle chiamate" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "Non mostrare mai la finestra principale" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "Nascondi la finestra di SFLphone all'avvio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Cronologia chiamate" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "Mantieni la cronologia per almeno" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "giorni" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Preferenze" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Rubrica" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1131,82 +1106,110 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Cerca tra tutte le chiamate" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Fare clic qui per cambiare il tipo di ricerca" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Cerca tra le chiamate perse" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Cerca tra le chiamate ricevute" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Cerca tra le chiamate effettuate" diff --git a/lang/ja/ja.po b/lang/ja/ja.po index 3559bb0c70..a435c05234 100644 --- a/lang/ja/ja.po +++ b/lang/ja/ja.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2009-12-23 22:50+0000\n" "Last-Translator: Launchpad Translations Administrators <rosetta@launchpad." "net>\n" @@ -16,64 +16,64 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "登録しました" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "登録できません" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "検索中..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "エラー" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "認証に失敗" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "ネットワークに接続できません" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "ホストに接続できません" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "構成エラー" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "サーバー無効" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "無効" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "アカウント使用中" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "アカウント登録されていません" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -81,28 +81,28 @@ msgstr "" "SFLphoneサーバに接続できません\n" "デーモンを確認してください。" -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "ダイレクトSIPコール" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -112,7 +112,7 @@ msgstr "" "\n" "再生デバイスエラー" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -122,7 +122,7 @@ msgstr "" "\n" "再生ディバイスエラー" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -132,43 +132,43 @@ msgstr "" "\n" "Pulseaudioが動いていません。" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "呼び出し中" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "呼び出し中" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "キャンセルしますか?" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "SFLphoneエラー" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTPが%sにサポートされていません。\n" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "安全なコミュニケーションが利用できません。" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "次へ" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "電話をやめてください" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -177,11 +177,11 @@ msgstr "" "A %s エラーは非暗号化されているため%sの呼び出しを強制終了しました。\n" "正確な理由:%s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "ZRTP交渉失敗" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -190,49 +190,49 @@ msgstr "" "%sはセキュリティーで保護された通信を使うのをやめてください。SRTPなしで会話が" "再開するのを確認してください。\n" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "クリアを確認してください。" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "確認" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s アカウント: %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "</i> %sから <i>" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d ボイスメール" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "%s アカウント<i>%s</i>を呼び出し中" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "現在のアカウント" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "アカウントが設定されていません" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "アカウント登録されていません" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -241,369 +241,369 @@ msgstr "" "<i>で:</i> %s\n" " %sを使ってください。" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s はZRTPをサポートできていません。" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "ZRTP交渉%sで失敗しました" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>With:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "スピーカーの音量" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "マイク音量" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "メインウィンドウを開く" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "通話を切る(_H)" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLフォン" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "ボイスメール" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "アドレス帳が選択されていません" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "アドレス帳" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "ボイスメール(%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLフォンはVoIPクライアントとSIP、IAX2プロトコルと互換性があります" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "SFLフォンに関して" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "呼び出し" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "通話先" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "発信します" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "選択" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "応答する" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "通話終了" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "保留" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "保留中" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "保留解除" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "保留を解除する" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "構成アシスタント" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "構成アシスタントを起動します" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "ボイスメールに電話をしてください" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "閉じる(_C)" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "システムトレイを最小化する" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "終了(_Q)" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "プログラムの終了" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "編集(_E)" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "コピー(_C)" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "選択範囲をコピー" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "貼り付け(_P)" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "クリップボードに貼り付け" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "履歴消去" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "通話履歴消去" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "アカウント(_A)" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "アカウント編集" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "基本設定" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "基本設定の変更" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "表示(_V)" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "ヘルプ(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "目次" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "手動で開く" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "アプリケーションについて" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "転送" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "通話転送" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "録音(_R)" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "現在の会話を録音中" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "ツールバーの表示" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "ツールバーの表示" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "ダイアルパッド(_D)" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "ダイヤルパッドの表示" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "ボリュームコントロール" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "音量調整の表示" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "履歴(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "通話履歴" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "アドレス帳" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "保留中" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "折り返し電話をする" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "電話番号の編集" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "電話をする前に電話番号の編集をする" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "アカウントパラメーター" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "別名(_A)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "プロトコル" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "不明" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "ホスト名" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "ユーザー名" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "パスワード(_P):" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "パスワードを表示" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "ボイスメールの番号" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "認証" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "シークレット" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "資格情報" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "名前の認証" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "パスワード" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "セキュリティ" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "TLS トランスポートを使用" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "SRTP キー交換" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "無効" @@ -656,40 +656,40 @@ msgstr "公開アドレスとポートの設定" msgid "Published port" msgstr "公開ポート" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "コーデック" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "アカウントの設定" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "基本設定" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "詳細設定" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -699,94 +699,94 @@ msgstr "" "にこのプロファイルが使用可能\r\n" "着信通話または発信通話を照合できないアカウントであれば設定も可能" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "サーバーが\"%s\" (%d)を返しました" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "プロトコル" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "状態" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "アカウント" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "アカウント設定済み" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "%dアクティブアカウント" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "アクティブアカウントが存在しません" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "全般" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "展開アドレス帳の使用" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "ダウンロードの制限" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "カード" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "可能であれば連絡先の写真を表示" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "展開アドレス帳の項目" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "勤務先" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "自宅" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "携帯" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "アドレス帳" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "展開アドレス帳使用の選択" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "名前" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "アシスタントは現在終了" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -794,345 +794,320 @@ msgstr "" "登録状況の確認またはオプション/アカウントウィンドウでアカウントパラメータを変" "更できます" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "別名" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "サーバー" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "ユーザー名" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "セキュリティー " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP草稿" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "なし" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "SFLフォンアカウント作成ウィザード" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "SFLフォンのアカウント作成ウィザードへようこそ" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "このインストールウィザードはアカウント作成を助けます" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "VoIPプロトコル" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "勘定タイプの選択" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP(セッション開始プロトコル)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2(アスタリスク変換)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "アカウント" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "オプションに従い1つ選択してください" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "無料SIP/IAX2アカウントをsflフォン組織に作成" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "SIPまたは IAX2アカウントの存在を登録" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "SIPアカウント設定" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "情報を入力してください" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "ZRTPセキュリティーで保護された通信" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "任意のメールアドレス" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "このメールアドレスはボイスメールメッセージに送られます" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "Eメールアドレス" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "IAX2アカウント設定" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "ネットワークアドレス変換(NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "ファイアウォールの内側であれば接続できます" -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "STUN有効(E)" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "STUNサーバー" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "アカウント登録" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "設定完了" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "周波数" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "ビットレート" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "帯域幅" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "ALSAプラグイン" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "出力" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "入力" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" -msgstr "ボイスアクティビティ検出" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "着信音" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "ノイズ除去" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "サウンドマネージャー" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "パルスオーディオ" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "ALSA設定" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "録音" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "インストール先フォルダ" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "フォルダの選択" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "着信音" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "着信音可能" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "着信音選択" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "音声ファイル" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "アカウントの設定" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "URL 引数" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "URL着信履歴ユーザー設定コマンド" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%sはURLに置き換え" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "特定SIPヘッダーのトリガ" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "IAX2 URLのトリガ" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "実行するコマンド" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "電話番号書き換え" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "プレフィックス番号" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "デスクトップ通知" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "通知可能" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "システムトレイアイコン" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "着信通話のポップアップメインウィンドウ" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "ポップアップメインウィンドウ非表示" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "起動SFLphoneウィンドウ非表示" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "着信履歴" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "最後の着信履歴の保護" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "曜日" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "基本設定" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "音声" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "アドレス帳" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "フック" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "ZRTPオプション" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "SDPでハローハッシュ送信" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "ユーザーへSAS確認" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "ZRTPがサポートされているかどうか警告" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "イベント管理のためSAS表示" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "TLSの詳細設定オプション" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "TLS転送" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1145,85 +1120,119 @@ msgstr "" "それぞれのアカウントでTLS転送を確認してください。そうするとそれぞれ専用ポー" "ト、異なったものに実行できます。\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "j証明機関の一覧" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "CAリストファイルの選択" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "公式エンドポイント証明ファイル" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "公式エンドポイント証明の選択" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "個人キーファイルの選択" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "プライベートキーのパスワード" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "TLSプロトコルメソッド" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "TLS暗号一覧" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "TLS接続発信サーバー名インスタンス" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "ネゴシエーションタイムアウト" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "サーバーの証明受信の確認" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "クライアント応答証明の確認" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "受信tls接続のための証明要求" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "ZRTPオプション" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "SDPでハローハッシュ送信" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "ユーザーへSAS確認" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "ZRTPがサポートされているかどうか警告" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "イベント管理のためSAS表示" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "すべて検索" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "検索の種類を変更するにはここをクリックしてください" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "不在着信の検索" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "受信通話の検索" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "発信通話の検索" +#~ msgid "_Voice Activity Detection" +#~ msgstr "ボイスアクティビティ検出" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "ノイズ除去" + #~ msgid "IP call - %s" #~ msgstr "IP 電話 -%s" diff --git a/lang/ko/ko.po b/lang/ko/ko.po index c4a7dd1f61..295226ea7a 100644 --- a/lang/ko/ko.po +++ b/lang/ko/ko.po @@ -7,1111 +7,1103 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" -"PO-Revision-Date: 2009-12-03 18:10+0000\n" -"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-05-18 03:37+0000\n" +"Last-Translator: Bundo <bundo@bundo.biz>\n" "Language-Team: Korean <ko@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "등록했습니다" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" -msgstr "" +msgstr "등록되지 않았습니다" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." -msgstr "" +msgstr "시도중..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" -msgstr "" +msgstr "오류" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" -msgstr "" +msgstr "인증이 실패했습니다" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" -msgstr "" +msgstr "네트워크에 접근할 수 없습니다" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" -msgstr "" +msgstr "호스트에 접근할 수 없습니다" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" -msgstr "" +msgstr "Stun 구성 오류" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" -msgstr "" +msgstr "Stun 서버 사용" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" -msgstr "" +msgstr "준비" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" -msgstr "" +msgstr "무효" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" -msgstr "" +msgstr "사용중인 계정" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" -msgstr "" +msgstr "등록되지 않은 계정" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" +"SFLphone 서버에 연결할 수 없습니다.\n" +"데몬이 실행중인지 확인하십시오." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" -msgstr "" +msgstr "직접 SIP 호출" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" -msgstr "" +msgstr "%R 오늘" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" -msgstr "" +msgstr "%R 어제" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" -msgstr "" +msgstr "%A at %R" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" -msgstr "" +msgstr "%x 에 %R" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" "Error while opening playback device" msgstr "" +"ALSA 알림\n" +"\n" +"재생 장치 오류" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" "Error while opening capture device" msgstr "" +"ALSA 알림\n" +"\n" +"캡쳐 장치 열기 중 오류" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" +"Pulseaudio 알림\n" +"\n" +"펄스오디오가 실행중이지 않습니다" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." -msgstr "" +msgstr "호출 진행중" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." -msgstr "" +msgstr "호출 진행중" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" -msgstr "" +msgstr "종료 하시겠습니까?" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" -msgstr "" +msgstr "SFLphone 오류" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" -msgstr "" +msgstr "ZRTP %s에서 지원되지 않습니다\n" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" -msgstr "" +msgstr "안전한 커뮤니케이션을 사용할 수 없습니다." -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" -msgstr "" +msgstr "계속" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" -msgstr "" +msgstr "호출 정지" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" +"A %s 오류가 아닌 암호화된있어 %s에 대한 호출을 종료했습니다.\n" +"정확한 이유 : %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" -msgstr "" +msgstr "ZRTP 협상 실패" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" +"%s는 보안으로 보호되는 통신을 사용하는 것을 금합니다. SRTP 없이 대화를 재개" +"할 것인지 확인하십시오.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" -msgstr "" +msgstr "삭제를 확인하십시오." -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" -msgstr "" +msgstr "확인" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" -msgstr "" +msgstr "%s 계정 : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" -msgstr "" +msgstr "<i>From</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d 음성 메일" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" -msgstr "" +msgstr "%s 계정 <i> %s </i>를 호출하는 동안" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" -msgstr "" +msgstr "현재 계정" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" -msgstr "" +msgstr "계정이 설정되지 않았습니다" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" -msgstr "" +msgstr "계정이 등록되어 있지 않습니다" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" +"<i>작성자:</i> %s\n" +"%s을(를) 사용하세요." -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." -msgstr "" +msgstr "%s ZRTP를 지원하지 않습니다." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" -msgstr "" +msgstr "ZRTP 협상 %s에서 실패했습니다." -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" -msgstr "" +msgstr "<i>With:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" -msgstr "" +msgstr "스피커 볼륨" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" -msgstr "" +msgstr "마이크 볼륨" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" -msgstr "" +msgstr "메인 창 보기(_S)" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" -msgstr "" +msgstr "통화 끊기(_H)" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" -msgstr "" +msgstr "SFL폰" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i 활성된 계정" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" -msgstr "" +msgstr "음성 메일" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" -msgstr "" +msgstr "주소록이 선택되어 있지 않습니다" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" -msgstr "" +msgstr "주소록" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" -msgstr "" +msgstr "음성 메일 (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "" +msgstr "SFL폰은 VoIP클라이언트와 SIP, IAX2 프로토콜과 호환 가능합니다." -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" -msgstr "" +msgstr "SFL폰 정보" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" -msgstr "" +msgstr "호출" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" -msgstr "" +msgstr "새 통화(_N)" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" -msgstr "" +msgstr "새로 호출합니다" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" -msgstr "" +msgstr "선택(_P)" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" -msgstr "" +msgstr "호출 응답" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" -msgstr "" +msgstr "호출 끝내기" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" -msgstr "" +msgstr "보류(_N)" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" -msgstr "" +msgstr "호출을 보류합니다" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" -msgstr "" +msgstr "보류 해제(_F)" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" -msgstr "" +msgstr "보류를 해제합니다." -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" -msgstr "" +msgstr "설정 도우미(_A)" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" -msgstr "" +msgstr "설정 도우미를 실행합니다" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" -msgstr "" +msgstr "음성 전화를 합니다." -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" -msgstr "" +msgstr "닫기(_C)" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" -msgstr "" +msgstr "시스템 트레이에 최소화" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" -msgstr "" +msgstr "끝내기(_Q)" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" -msgstr "" +msgstr "프로그램을 끝냅니다" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" -msgstr "" +msgstr "편집(_E)" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" -msgstr "" +msgstr "복사(_C)" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" -msgstr "" +msgstr "선택한 사항을 복사합니다" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" -msgstr "" +msgstr "붙여넣기(_P)" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" -msgstr "" +msgstr "클립보드의 내용을 붙여넣습니다" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" -msgstr "" +msgstr "기록 지우기(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" -msgstr "" +msgstr "호출 기록을 지웁니다" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" -msgstr "" +msgstr "계정(_A)" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" -msgstr "" +msgstr "계정을 편집합니다" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" -msgstr "" +msgstr "기본 설정(_P)" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" -msgstr "" +msgstr "기본 설정을 바꿉니다" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" -msgstr "" +msgstr "보기(_V)" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" -msgstr "" +msgstr "도움말(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" -msgstr "" +msgstr "차례" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" -msgstr "" +msgstr "설명서를 엽니다" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" -msgstr "" +msgstr "이 프로그램 정보" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" -msgstr "" +msgstr "전송(_T)" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" -msgstr "" +msgstr "호출 전송" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" -msgstr "" +msgstr "녹음(_R)" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" -msgstr "" +msgstr "현재 대화를 녹음합니다" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" -msgstr "" +msgstr "도구모음 표시(_S)" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" -msgstr "" +msgstr "도구모음 표시합니다" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" -msgstr "" +msgstr "다이얼패드(_D)" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" -msgstr "" +msgstr "숫자키패드 표시" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" -msgstr "" +msgstr "볼륨 조정(_V)" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" -msgstr "" +msgstr "볼륨 조정을 표시 합니다" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" -msgstr "" +msgstr "기록(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" -msgstr "" +msgstr "호출 기록" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" -msgstr "" +msgstr "주소록(_A)" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" -msgstr "" +msgstr "보류(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" -msgstr "" +msgstr "다시 호출(_C)" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" -msgstr "" +msgstr "폰 번호 편집" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" -msgstr "" +msgstr "전화를 하기 전에 전화 번호를 편집합니다" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" -msgstr "" +msgstr "계정 매개 변수" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" -msgstr "" +msgstr "별칭(_A)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" -msgstr "" +msgstr "프로토콜(_P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" -msgstr "" +msgstr "알 수 없음" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" -msgstr "" +msgstr "호스트 이름(_H)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" -msgstr "" +msgstr "사용자 이름(_U)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" -msgstr "" +msgstr "암호(_P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" -msgstr "" +msgstr "암호 보기" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" -msgstr "" +msgstr "음성메일 번호(_V)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" -msgstr "" +msgstr "인증" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" -msgstr "" +msgstr "비밀" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" -msgstr "" +msgstr "자격 증명" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" -msgstr "" +msgstr "이름 인증" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" -msgstr "" +msgstr "암호" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" -msgstr "" +msgstr "보안" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" -msgstr "" +msgstr "TLS 전송을 사용" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" -msgstr "" +msgstr "SRTP 키 교환" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" -msgstr "" +msgstr "사용 안 함" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949 msgid "Registration" -msgstr "" +msgstr "등록" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953 msgid "Registration expire" -msgstr "" +msgstr "등록 기간 없음" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962 msgid "_Comply with RFC 3263" -msgstr "" +msgstr "RFC 3263 준수(_C)" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981 msgid "Network Interface" -msgstr "" +msgstr "네트워크 인터페이스" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994 msgid "Local address" -msgstr "" +msgstr "로컬 주소" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061 msgid "Local port" -msgstr "" +msgstr "로컬 포트" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131 msgid "Published address" -msgstr "" +msgstr "주소 공개" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102 msgid "Using STUN" -msgstr "" +msgstr "STUN 사용" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109 msgid "STUN server URL" -msgstr "" +msgstr "STUN 서버 URL" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117 msgid "Same as local parameters" -msgstr "" +msgstr "몇개의 로컬 매개 변수" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120 msgid "Set published address and port:" -msgstr "" +msgstr "공개 주소 및 포트 설정:" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140 msgid "Published port" -msgstr "" +msgstr "공개된 포트" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" -msgstr "" +msgstr "코덱" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" -msgstr "" +msgstr "DTMF" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" -msgstr "" +msgstr "RTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" -msgstr "" +msgstr "SIP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" -msgstr "" +msgstr "계정 설정" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" -msgstr "" +msgstr "기본 설정" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" -msgstr "" +msgstr "고급 설정" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" -msgstr "" +msgstr "네트워크" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" +"<b>sip:remotepeer</b>. 같은 sip URI를 입력하여 간단하게 원격 피어를 달성하고 " +"싶을 때 이 프로필 사용 가능합니다. 걸려오는 전화 또는 발신 통화가 일치되지 않" +"는 계정이라도 설정이 가능합니다." -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" -msgstr "" +msgstr "서버에 \"%s\" (%d)가 발생했습니다" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" -msgstr "" +msgstr "프로토콜" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" -msgstr "" +msgstr "상태" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" -msgstr "" +msgstr "계정" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" -msgstr "" +msgstr "계정을 설정했습니다" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d 활성 계정" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" -msgstr "" +msgstr "현재 계정이 존재하지 않습니다" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" -msgstr "" +msgstr "일반" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" -msgstr "" +msgstr "에볼류션 주소록 사용(_U)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" -msgstr "" +msgstr "다운로드 제한 :" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" -msgstr "" +msgstr "카드" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" -msgstr "" +msgstr "가능하면 연락처의 사진보기(_D)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" -msgstr "" +msgstr "에볼류션 주소록에서의 항목" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" -msgstr "" +msgstr "업무(_W)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" -msgstr "" +msgstr "홈(_H)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" -msgstr "" +msgstr "핸드폰(_M)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" -msgstr "" +msgstr "주소록" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" -msgstr "" +msgstr "에볼류션 주소록 사용하여 선택" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" -msgstr "" +msgstr "이름" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." -msgstr "" +msgstr "지원자는 현재 종료되었습니다." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." -msgstr "" +msgstr "등록 상황을 확인하거나 옵션/계정 창에서 계정 매개 변수를 변경합니다." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" -msgstr "" +msgstr "별명" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" -msgstr "" +msgstr "서버" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" -msgstr "" +msgstr "사용자 이름" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " -msgstr "" +msgstr "보안: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" -msgstr "" +msgstr "SRTP/ZRTP 초안" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" -msgstr "" +msgstr "없음" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" -msgstr "" +msgstr "SFL폰 계정 만들기 마법사" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" -msgstr "" +msgstr "SFL폰 계정 만들기 마법사에 오신걸 환영합니다!" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." -msgstr "" +msgstr "이 설치 마법사는 계정 생성을 돕습니다" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" -msgstr "" +msgstr "VoIP 프로토콜" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" -msgstr "" +msgstr "계정 유형 선택" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" -msgstr "" +msgstr "SIP (세션 초기화 프로토콜)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" -msgstr "" +msgstr "IAX2 (별표 변환)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" -msgstr "" +msgstr "계정" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" -msgstr "" +msgstr "옵션에 따라서 1개를 선택" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" -msgstr "" +msgstr "무료 SIP/IAX2 계정을 sflphone.org에 만들기" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" -msgstr "" +msgstr "SIP 또는 IAX2 계정이 등록되어 있습니다" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" -msgstr "" +msgstr "SIP 계정 설정" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" -msgstr "" +msgstr "정보를 입력하세요." -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" -msgstr "" +msgstr "ZRTP 보안으로 보호된 통신(_Z)" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" -msgstr "" +msgstr "임의의 이메일 주소" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." -msgstr "" +msgstr "이 이메일 주소는 음성메일 메시지로 보내집니다" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" -msgstr "" +msgstr "이메일 주소(_E)" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" -msgstr "" +msgstr "IAX2 계정 설정" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" -msgstr "" +msgstr "네트워크 주소 변환 (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." -msgstr "" +msgstr "방화벽을 하고 있으면 연결할 수 있습니다" -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" -msgstr "" +msgstr "STUN 가능(_N)" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" -msgstr "" +msgstr "STUN 서버(_S)" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" -msgstr "" +msgstr "계정 등록" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" -msgstr "" +msgstr "축하합니다!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" -msgstr "" +msgstr "주파수" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" -msgstr "" +msgstr "전송률" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" -msgstr "" +msgstr "대역폭" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" -msgstr "" +msgstr "ALSA 플러그인" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" -msgstr "" +msgstr "출력" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" -msgstr "" +msgstr "입력" + +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "착신음" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" -msgstr "" +msgstr "사운드 관리자" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" -msgstr "" +msgstr "펄스오디오(_P)" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" -msgstr "" +msgstr "알사(_A)" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" -msgstr "" +msgstr "알사 설정" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" -msgstr "" +msgstr "녹화" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" -msgstr "" +msgstr "대상 폴더" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" -msgstr "" +msgstr "폴더 선택" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" -msgstr "" +msgstr "착신음" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" -msgstr "" +msgstr "착신음 가능(_E)" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" -msgstr "" +msgstr "착신음 선택" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" -msgstr "" +msgstr "오디오 파일" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "계정 설정" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" -msgstr "" +msgstr "URL 인수" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" -msgstr "" +msgstr "URL 수신 기록 사용자 지정 명령" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." -msgstr "" +msgstr "%s URL로 바꿉니다." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" -msgstr "" +msgstr "특정 SIP 헤더 트리거(_S)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" -msgstr "" +msgstr "IAX2 URL 트리거(_I)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" -msgstr "" +msgstr "실행 명령(_R)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" -msgstr "" +msgstr "전화 번호 재작성 중" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" -msgstr "" +msgstr "접두사와 전화 번호를 다이얼(_P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" -msgstr "" +msgstr "바탕 화면 알림" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" -msgstr "" +msgstr "알림 사용가능(_E)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" -msgstr "" +msgstr "시스템 트레이 아이콘" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" -msgstr "" +msgstr "SFL폰을 시스탬 트레이에 보여줍니다" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" -msgstr "" +msgstr "착신 통화 메인 창 띄움(_P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" -msgstr "" +msgstr "메인창을 절대 띄우지 않음(_V)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" -msgstr "" +msgstr "시작 시에 SFL폰 창 숨기기(_S)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" -msgstr "" +msgstr "호출 기록" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" -msgstr "" +msgstr "마지막 통화 기록을 보호(_K)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" -msgstr "" +msgstr "일" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" -msgstr "" +msgstr "기본 설정" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" -msgstr "" +msgstr "오디오" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" -msgstr "" +msgstr "주소록" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" -msgstr "" +msgstr "후크" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" -msgstr "" +msgstr "바로 가기" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" +msgstr "주의: 이 단축키는 시스템-전체의 단축키를 무시할 수 있습니다." -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" -msgstr "" +msgstr "TLS의 고급설정" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" -msgstr "" +msgstr "TLS 전송" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1119,97 +1111,135 @@ msgid "" "dedicated\n" "port, different one from each other\n" msgstr "" +"통화는 보안으로 보호되는 SIP 트랜잭션의 요구에 따라\n" +"TLS 전송은 UDP를 사용할 수 있습니다.\n" +"각각의 계정에서 TLS 전송을 확인합니다.\n" +"그러면 각각 전용 포트, 다른 한개에 수행할 수 있습니다.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" -msgstr "" +msgstr "글로벌 TLS를 수신기 (모든 계정)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" -msgstr "" +msgstr "인증 기관 목록" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" -msgstr "" +msgstr "CA 목록 파일 선택 (임의의)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" -msgstr "" +msgstr "공공의 끝점 인증서 파일" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" -msgstr "" +msgstr "공공의 끝점 인증서 파일을 선택 (임의의)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" -msgstr "" +msgstr "개인 키 파일 선택(임의의)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" -msgstr "" +msgstr "개인키를 위한 암호" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" -msgstr "" +msgstr "TLS 프로토콜 방법" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" -msgstr "" +msgstr "TLS 암호화 목록" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" -msgstr "" +msgstr "TLS 연결 발신 서버 네임 인스턴스" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" -msgstr "" +msgstr "협상 시간 초과(초:밀리초)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" -msgstr "" +msgstr "서버에서 인증서 수신 확인" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" -msgstr "" +msgstr "클라이언트에서 응답 증명서 확인" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" +msgstr "수신 tls 연결에 대한 인증 요청" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "ZRTP 설정" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "사용자에 SAS 확인 질문" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "ZRTP을 지원하는지 여부 경고(_W)" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "이벤트 관리를위한 SAS보기" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "SDES 설정" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "RTP에 SDES 대체 실패" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" -msgstr "" +msgstr "전체 검색" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" -msgstr "" +msgstr "검색 종류를 바꾸려면 여기를 누르십시오" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" -msgstr "" +msgstr "부재중 온 전화 검색" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" -msgstr "" +msgstr "수신 통화 검색" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" -msgstr "" +msgstr "발신 통화 검색" + +#~ msgid "_Voice Activity Detection" +#~ msgstr "음성 활성화 검색(_V)" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "노이즈 제거 (Narrow-Band Companding)(_N)" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" #~ ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou," #~ "Scion, ,Launchpad Contributions:,Emmanuel Milou,Scion, ,Launchpad " -#~ "Contributions:,Emmanuel Milou,Scion, ,Launchpad Contributions:,Emmanuel " -#~ "Milou,Scion" +#~ "Contributions:,Emmanuel Milou,Scion, ,Launchpad Contributions:,Bundo," +#~ "Emmanuel Milou,Scion" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" #~ ",,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel." #~ "milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.com,,,," -#~ "emmanuel.milou@savoirfairelinux.com," +#~ "bundo@bundo.biz,emmanuel.milou@savoirfairelinux.com," diff --git a/lang/oc/oc.po b/lang/oc/oc.po new file mode 100644 index 0000000000..16dce26f07 --- /dev/null +++ b/lang/oc/oc.po @@ -0,0 +1,1205 @@ +# Occitan (post 1500) translation for sflphone +# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 +# This file is distributed under the same license as the sflphone package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: sflphone\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-04-21 19:31+0000\n" +"Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#: ../sflphone-client-gnome/src/accountlist.c:181 +msgid "Registered" +msgstr "Enregistrat" + +#: ../sflphone-client-gnome/src/accountlist.c:184 +msgid "Not Registered" +msgstr "Pas Enregistrat" + +#: ../sflphone-client-gnome/src/accountlist.c:187 +msgid "Trying..." +msgstr "En cors..." + +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 +msgid "Error" +msgstr "Error" + +#: ../sflphone-client-gnome/src/accountlist.c:193 +msgid "Authentication Failed" +msgstr "Fracàs de l'autentificacion" + +#: ../sflphone-client-gnome/src/accountlist.c:196 +msgid "Network unreachable" +msgstr "Ret inaccessibla" + +#: ../sflphone-client-gnome/src/accountlist.c:199 +msgid "Host unreachable" +msgstr "Òste inaccessible" + +#: ../sflphone-client-gnome/src/accountlist.c:202 +msgid "Stun configuration error" +msgstr "Error de configuracion Stun" + +#: ../sflphone-client-gnome/src/accountlist.c:205 +msgid "Stun server invalid" +msgstr "Servidor Stun invalid" + +#: ../sflphone-client-gnome/src/accountlist.c:208 +msgid "Ready" +msgstr "Prèst" + +#: ../sflphone-client-gnome/src/accountlist.c:211 +msgid "Invalid" +msgstr "Invalid" + +#: ../sflphone-client-gnome/src/actions.c:125 +msgid "Using account" +msgstr "Utiliza lo compte" + +#: ../sflphone-client-gnome/src/actions.c:132 +msgid "No registered accounts" +msgstr "Pas de compte enregistrat" + +#: ../sflphone-client-gnome/src/actions.c:319 +msgid "" +"Unable to connect to the SFLphone server.\n" +"Make sure the daemon is running." +msgstr "" + +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 +msgid "Direct SIP call" +msgstr "Sonada dirècta SIP" + +#: ../sflphone-client-gnome/src/callable_obj.c:390 +msgid "today at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:393 +msgid "yesterday at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:395 +msgid "%A at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:399 +msgid "%x at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/errors.c:40 +msgid "" +"ALSA notification\n" +"\n" +"Error while opening playback device" +msgstr "" + +#: ../sflphone-client-gnome/src/errors.c:43 +msgid "" +"ALSA notification\n" +"\n" +"Error while opening capture device" +msgstr "" + +#: ../sflphone-client-gnome/src/errors.c:46 +msgid "" +"Pulseaudio notification\n" +"\n" +"Pulseaudio is not running" +msgstr "" + +#: ../sflphone-client-gnome/src/mainwindow.c:105 +msgid "There is one call in progress." +msgstr "" + +#: ../sflphone-client-gnome/src/mainwindow.c:109 +msgid "There are calls in progress." +msgstr "" + +#: ../sflphone-client-gnome/src/mainwindow.c:114 +msgid "Do you still want to quit?" +msgstr "Volètz quitar ?" + +#: ../sflphone-client-gnome/src/mainwindow.c:337 +msgid "SFLphone Error" +msgstr "Error SFLphone" + +#: ../sflphone-client-gnome/src/mainwindow.c:456 +#, c-format +msgid "ZRTP is not supported by peer %s\n" +msgstr "" + +#: ../sflphone-client-gnome/src/mainwindow.c:458 +msgid "Secure Communication Unavailable" +msgstr "" + +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 +msgid "Continue" +msgstr "Contunhar" + +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 +msgid "Stop Call" +msgstr "Arrestar la sonada" + +#: ../sflphone-client-gnome/src/mainwindow.c:486 +#, c-format +msgid "" +"A %s error forced the call with %s to fall under unencrypted mode.\n" +"Exact reason: %s\n" +msgstr "" + +#: ../sflphone-client-gnome/src/mainwindow.c:488 +msgid "ZRTP negotiation failed" +msgstr "Error d'autentificacion" + +#: ../sflphone-client-gnome/src/mainwindow.c:506 +#, c-format +msgid "" +"%s wants to stop using secure communication. Confirm will resume " +"conversation without SRTP.\n" +msgstr "" + +#: ../sflphone-client-gnome/src/mainwindow.c:508 +msgid "Confirm Go Clear" +msgstr "" + +#: ../sflphone-client-gnome/src/mainwindow.c:510 +msgid "Confirm" +msgstr "Confirmar" + +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 +#, c-format +msgid "%s account : %s" +msgstr "%s account : %s" + +#: ../sflphone-client-gnome/src/sflnotify.c:86 +#, c-format +msgid "<i>From</i> %s" +msgstr "<i>De</i> %s" + +#: ../sflphone-client-gnome/src/sflnotify.c:105 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d messatge vocal" +msgstr[1] "%d messatges vocals" + +#: ../sflphone-client-gnome/src/sflnotify.c:122 +#, c-format +msgid "Calling with %s account <i>%s</i>" +msgstr "" + +#: ../sflphone-client-gnome/src/sflnotify.c:126 +msgid "Current account" +msgstr "Compte corrent" + +#: ../sflphone-client-gnome/src/sflnotify.c:141 +msgid "You have no accounts set up" +msgstr "" + +#: ../sflphone-client-gnome/src/sflnotify.c:158 +msgid "You have no registered accounts" +msgstr "" + +#: ../sflphone-client-gnome/src/sflnotify.c:201 +#, c-format +msgid "" +"<i>With:</i> %s \n" +"using %s" +msgstr "" +"<i>Amb :</i> %s\n" +"using %s" + +#: ../sflphone-client-gnome/src/sflnotify.c:216 +#, c-format +msgid "%s does not support ZRTP." +msgstr "" + +#: ../sflphone-client-gnome/src/sflnotify.c:231 +#, c-format +msgid "ZRTP negotiation failed with %s" +msgstr "" + +#: ../sflphone-client-gnome/src/sflnotify.c:246 +#, c-format +msgid "<i>With:</i> %s" +msgstr "<i>De :</i> %s" + +#: ../sflphone-client-gnome/src/sliders.c:173 +msgid "Speakers volume" +msgstr "" + +#: ../sflphone-client-gnome/src/sliders.c:175 +msgid "Mic volume" +msgstr "" + +#: ../sflphone-client-gnome/src/statusicon.c:139 +msgid "_Show main window" +msgstr "" + +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 +msgid "_Hang up" +msgstr "" + +#: ../sflphone-client-gnome/src/statusicon.c:200 +msgid "SFLphone" +msgstr "SFLphone" + +#: ../sflphone-client-gnome/src/statusicon.c:201 +#, c-format +msgid "%i active account" +msgid_plural "%i active accounts" +msgstr[0] "" +msgstr[1] "" + +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 +msgid "Voicemail" +msgstr "Messatjariá Vocala" + +#: ../sflphone-client-gnome/src/uimanager.c:133 +msgid "No address book selected" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 +msgid "Address book" +msgstr "Quasernet d'adreças" + +#: ../sflphone-client-gnome/src/uimanager.c:338 +#, c-format +msgid "Voicemail (%i)" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:406 +msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:408 +msgid "About SFLphone" +msgstr "A prepaus de SFLphone" + +#: ../sflphone-client-gnome/src/uimanager.c:817 +msgid "Call" +msgstr "Sonar" + +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 +msgid "_New call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:819 +msgid "Place a new call" +msgstr "Efectuar una sonada novèla" + +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 +msgid "_Pick up" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:821 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:823 +msgid "Finish the call" +msgstr "Acabar la sonada" + +#: ../sflphone-client-gnome/src/uimanager.c:824 +msgid "O_n hold" +msgstr "Metre en espèra" + +#: ../sflphone-client-gnome/src/uimanager.c:825 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:826 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:827 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:828 +msgid "Configuration _Assistant" +msgstr "_Assistent de configuracion" + +#: ../sflphone-client-gnome/src/uimanager.c:829 +msgid "Run the configuration assistant" +msgstr "Aviar l'assistent de configuracion" + +#: ../sflphone-client-gnome/src/uimanager.c:832 +msgid "Call your voicemail" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:833 +msgid "_Close" +msgstr "_Tampar" + +#: ../sflphone-client-gnome/src/uimanager.c:834 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:835 +msgid "_Quit" +msgstr "_Quitar" + +#: ../sflphone-client-gnome/src/uimanager.c:836 +msgid "Quit the program" +msgstr "Quitar lo programa" + +#: ../sflphone-client-gnome/src/uimanager.c:839 +msgid "_Edit" +msgstr "_Editar" + +#: ../sflphone-client-gnome/src/uimanager.c:840 +msgid "_Copy" +msgstr "_Copiar" + +#: ../sflphone-client-gnome/src/uimanager.c:841 +msgid "Copy the selection" +msgstr "Copiar la seleccion" + +#: ../sflphone-client-gnome/src/uimanager.c:842 +msgid "_Paste" +msgstr "Em_pegar" + +#: ../sflphone-client-gnome/src/uimanager.c:843 +msgid "Paste the clipboard" +msgstr "Empegar lo contengut del quichapapièr" + +#: ../sflphone-client-gnome/src/uimanager.c:844 +msgid "Clear _history" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:845 +msgid "Clear the call history" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:846 +msgid "_Accounts" +msgstr "_Comptes" + +#: ../sflphone-client-gnome/src/uimanager.c:846 +msgid "Edit your accounts" +msgstr "Modificar vòstres comptes" + +#: ../sflphone-client-gnome/src/uimanager.c:848 +msgid "_Preferences" +msgstr "_Preferéncias" + +#: ../sflphone-client-gnome/src/uimanager.c:849 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:852 +msgid "_View" +msgstr "_Afichatge" + +#: ../sflphone-client-gnome/src/uimanager.c:855 +msgid "_Help" +msgstr "_Ajuda" + +#: ../sflphone-client-gnome/src/uimanager.c:856 +msgid "Contents" +msgstr "Ensenhador" + +#: ../sflphone-client-gnome/src/uimanager.c:857 +msgid "Open the manual" +msgstr "Dobrir lo manual" + +#: ../sflphone-client-gnome/src/uimanager.c:858 +msgid "About this application" +msgstr "A prepaus d'aquesta aplicacion" + +#: ../sflphone-client-gnome/src/uimanager.c:866 +msgid "_Transfer" +msgstr "_Transferir" + +#: ../sflphone-client-gnome/src/uimanager.c:867 +msgid "Transfer the call" +msgstr "Transferir a :" + +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 +msgid "_Record" +msgstr "En_registrar" + +#: ../sflphone-client-gnome/src/uimanager.c:869 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:870 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:871 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:872 +msgid "_Dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:873 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:874 +msgid "_Volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:875 +msgid "Show the volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:876 +msgid "_History" +msgstr "_Istoric" + +#: ../sflphone-client-gnome/src/uimanager.c:877 +msgid "Calls history" +msgstr "Istoric de las sonadas" + +#: ../sflphone-client-gnome/src/uimanager.c:878 +msgid "_Address book" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 +msgid "On _Hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1251 +msgid "_Call back" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1407 +msgid "Edit phone number" +msgstr "Editar lo numèro" + +#: ../sflphone-client-gnome/src/uimanager.c:1419 +msgid "Edit the phone number before making a call" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 +msgid "Account Parameters" +msgstr "Paramètres del Compte" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 +msgid "_Alias" +msgstr "_Aliàs" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 +msgid "_Protocol" +msgstr "P_rotocòl" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 +msgid "Unknown" +msgstr "Desconegut" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 +msgid "_Host name" +msgstr "_Servidor" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 +msgid "_User name" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 +msgid "_Password" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 +msgid "Show password" +msgstr "Afichar lo senhal" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 +msgid "_Voicemail number" +msgstr "_Bóstia vocala #" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 +msgid "_User-agent" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 +msgid "Authentication" +msgstr "Autentificacion" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 +msgid "Secret" +msgstr "Secret" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 +msgid "Credential" +msgstr "Informacions" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 +msgid "Authentication name" +msgstr "Nom d'autentificacion" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 +msgid "Password" +msgstr "Senhal" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 +msgid "Security" +msgstr "Seguretat" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 +msgid "Use TLS transport (sips)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 +msgid "SRTP key exchange" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 +msgid "Disabled" +msgstr "Desactivat" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949 +msgid "Registration" +msgstr "Enregistrament" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953 +msgid "Registration expire" +msgstr "Expiracion d'enregistrament" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962 +msgid "_Comply with RFC 3263" +msgstr "Respectar RFC 3263" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981 +msgid "Network Interface" +msgstr "Interfàcia de ret" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994 +msgid "Local address" +msgstr "Adreça locala" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061 +msgid "Local port" +msgstr "Pòrt local" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131 +msgid "Published address" +msgstr "Adreça de publicacion" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102 +msgid "Using STUN" +msgstr "Utilizar STUN" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109 +msgid "STUN server URL" +msgstr "URL del servidor STUN" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117 +msgid "Same as local parameters" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120 +msgid "Set published address and port:" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140 +msgid "Published port" +msgstr "Pòrt de publicacion" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 +msgid "Codecs" +msgstr "Codecs" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 +msgid "DTMF" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 +msgid "RTP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 +msgid "SIP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 +msgid "Account settings" +msgstr "Configuracion del compte" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +msgid "Basic" +msgstr "Basic" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 +msgid "Advanced" +msgstr "Avançat" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 +msgid "Network" +msgstr "Ret" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 +msgid "" +"This profile is used when you want to reach a remote peer simply by typing a " +"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " +"also be used if no account can be matched to an incoming or outgoing call." +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 +#, c-format +msgid "Server returned \"%s\" (%d)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 +msgid "Protocol" +msgstr "Protocòl" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 +msgid "Status" +msgstr "Estatut" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 +msgid "Accounts" +msgstr "Comptes" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 +msgid "Configured Accounts" +msgstr "Comptes Configurats" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 +#, c-format +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] "%d compte actiu" +msgstr[1] "%d comptes actius" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 +msgid "You have no active account" +msgstr "" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 +msgid "General" +msgstr "General" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 +msgid "_Use Evolution address books" +msgstr "" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 +msgid "Download limit :" +msgstr "" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 +msgid "cards" +msgstr "cartas" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 +msgid "_Display contact photo if available" +msgstr "" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 +msgid "Fields from Evolution's address books" +msgstr "" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 +msgid "_Work" +msgstr "_Trabalh" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 +msgid "_Home" +msgstr "_Dorsièr personal" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +msgid "_Mobile" +msgstr "" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 +msgid "Address Books" +msgstr "Quasernets d'adreças" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 +msgid "Select which Evolution address books to use" +msgstr "" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 +msgid "Name" +msgstr "Nom" + +#: ../sflphone-client-gnome/src/config/assistant.c:86 +#, c-format +msgid "This assistant is now finished." +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:88 +msgid "" +"You can at any time check your registration state or modify your accounts " +"parameters in the Options/Accounts window." +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:91 +msgid "Alias" +msgstr "Aliàs" + +#: ../sflphone-client-gnome/src/config/assistant.c:95 +msgid "Server" +msgstr "Servidor" + +#: ../sflphone-client-gnome/src/config/assistant.c:99 +msgid "Username" +msgstr "Nom d'utilizaire" + +#: ../sflphone-client-gnome/src/config/assistant.c:103 +msgid "Security: " +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:105 +msgid "SRTP/ZRTP draft-zimmermann" +msgstr "SRTP/ZRTP draft-zimmermann" + +#: ../sflphone-client-gnome/src/config/assistant.c:107 +msgid "None" +msgstr "Pas cap" + +#: ../sflphone-client-gnome/src/config/assistant.c:241 +msgid "SFLphone account creation wizard" +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:267 +msgid "Welcome to the Account creation wizard of SFLphone!" +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:268 +msgid "This installation wizard will help you configure an account." +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:282 +msgid "VoIP Protocols" +msgstr "Protocòls VoIP" + +#: ../sflphone-client-gnome/src/config/assistant.c:282 +msgid "Select an account type" +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:284 +msgid "SIP (Session Initiation Protocol)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:286 +msgid "IAX2 (InterAsterix Exchange)" +msgstr "IAX2 (InterAsterix Exchange)" + +#: ../sflphone-client-gnome/src/config/assistant.c:300 +msgid "Account" +msgstr "Compte" + +#: ../sflphone-client-gnome/src/config/assistant.c:300 +msgid "Please select one of the following options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:302 +msgid "Create a free SIP/IAX2 account on sflphone.org" +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:304 +msgid "Register an existing SIP or IAX2 account" +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:318 +msgid "SIP account settings" +msgstr "Paramètres de compte SIP" + +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 +msgid "Please fill the following information" +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 +msgid "Secure communications with _ZRTP" +msgstr "Comunicacions securizadas amb _ZRTP" + +#: ../sflphone-client-gnome/src/config/assistant.c:401 +msgid "Optional email address" +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:401 +msgid "This email address will be used to send your voicemail messages." +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:409 +msgid "_Email address" +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:431 +msgid "IAX2 account settings" +msgstr "Paramètres de compte IAX2" + +#: ../sflphone-client-gnome/src/config/assistant.c:508 +msgid "Network Address Translation (NAT)" +msgstr "Network Address Translation (NAT)" + +#: ../sflphone-client-gnome/src/config/assistant.c:508 +msgid "You should probably enable this if you are behind a firewall." +msgstr "" + +#: ../sflphone-client-gnome/src/config/assistant.c:517 +msgid "E_nable STUN" +msgstr "A_ctivar STUN" + +#: ../sflphone-client-gnome/src/config/assistant.c:524 +msgid "_STUN server" +msgstr "S_ervidor STUN" + +#: ../sflphone-client-gnome/src/config/assistant.c:538 +msgid "Account Registration" +msgstr "Enregistrament del compte" + +#: ../sflphone-client-gnome/src/config/assistant.c:538 +msgid "Congratulations!" +msgstr "Òsca !" + +#: ../sflphone-client-gnome/src/config/audioconf.c:709 +msgid "Frequency" +msgstr "Frequéncia" + +#: ../sflphone-client-gnome/src/config/audioconf.c:714 +msgid "Bitrate" +msgstr "Debit" + +#: ../sflphone-client-gnome/src/config/audioconf.c:719 +msgid "Bandwidth" +msgstr "Benda passanta" + +#: ../sflphone-client-gnome/src/config/audioconf.c:838 +msgid "ALSA plugin" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:860 +msgid "Output" +msgstr "Sortida" + +#: ../sflphone-client-gnome/src/config/audioconf.c:882 +msgid "Input" +msgstr "Entrada" + +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Sonariás" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:991 +msgid "Sound Manager" +msgstr "Interfàcia Àudio" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 +msgid "_Pulseaudio" +msgstr "_Pulseaudio" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 +msgid "_ALSA" +msgstr "_ALSA" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 +msgid "ALSA settings" +msgstr "Paramètres ALSA" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 +msgid "Recordings" +msgstr "Enregistraments" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 +msgid "Destination folder" +msgstr "Dorsièr de destinacion" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 +msgid "Select a folder" +msgstr "Seleccionar un dorsièr" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 +msgid "Ringtones" +msgstr "Sonariás" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 +msgid "_Enable ringtones" +msgstr "_Activar las sonariás" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 +msgid "Choose a ringtone" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 +msgid "Audio Files" +msgstr "Fichièrs àudio" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Configuracion del compte" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +msgid "URL Argument" +msgstr "Argument URL" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 +msgid "Custom commands on incoming calls with URL" +msgstr "" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 +#, c-format +msgid "%s will be replaced with the passed URL." +msgstr "" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 +msgid "Trigger on specific _SIP header" +msgstr "" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 +msgid "Trigger on _IAX2 URL" +msgstr "Desenclavar en _IAX2" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 +msgid "Command to _run" +msgstr "" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 +msgid "Phone number rewriting" +msgstr "" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 +msgid "_Prefix dialed numbers with" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 +msgid "Desktop Notifications" +msgstr "Notificacions de Burèu" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 +msgid "_Enable notifications" +msgstr "_Activar las notificacions" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 +msgid "System Tray Icon" +msgstr "Icòna de la barra d'estat sistèma" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 +msgid "Show SFLphone in the system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 +msgid "_Popup main window on incoming call" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 +msgid "Ne_ver popup main window" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 +msgid "Hide SFLphone window on _startup" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 +msgid "Calls History" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 +msgid "_Keep my history for at least" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 +msgid "days" +msgstr "jorns" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 +msgid "Preferences" +msgstr "Preferéncias" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 +msgid "Audio" +msgstr "Àudio" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +msgid "Address Book" +msgstr "Quasernet d'adreças" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 +msgid "Hooks" +msgstr "Ancoratge" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 +msgid "Shortcuts" +msgstr "" + +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 +msgid "Be careful: these shortcuts might override system-wide shortcuts." +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 +msgid "Advanced options for TLS" +msgstr "Opcions avançadas TLS" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 +msgid "TLS transport" +msgstr "Transpòrt TLS" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 +msgid "" +"TLS transport can be used along with UDP for those calls that would\n" +"require secure sip transactions (aka SIPS). You can configure a different\n" +"TLS transport for each account. However, each of them will run on a " +"dedicated\n" +"port, different one from each other\n" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 +msgid "Global TLS listener (all accounts)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 +msgid "Certificate of Authority list" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 +msgid "Choose a CA list file (optional)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 +msgid "Public endpoint certificate file" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 +msgid "Choose a public endpoint certificate (optional)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 +msgid "Choose a private key file (optional)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 +msgid "Password for the private key" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 +msgid "TLS protocol method" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 +msgid "TLS cipher list" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 +msgid "Server name instance for outgoing TLS connection" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 +msgid "Negotiation timeout (sec:msec)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 +msgid "Verify incoming certificates, as a server" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 +msgid "Verify certificates from answer, as a client" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 +msgid "Require certificate for incoming tls connections" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "Opcions de ZRTP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "Opcions SDES" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +msgid "Search all" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 +msgid "Click here to change the search type" +msgstr "Clicatz aicí per modificar lo tipe de recèrca" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 +msgid "Search by missed call" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +msgid "Search by incoming call" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 +msgid "Search by outgoing call" +msgstr "" diff --git a/lang/pl/pl.po b/lang/pl/pl.po index ad0446933f..dc2d030d0e 100644 --- a/lang/pl/pl.po +++ b/lang/pl/pl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2009-12-03 18:09+0000\n" "Last-Translator: Mariusz Bednarz <mbednarz@bedmar.pl>\n" "Language-Team: Polish <pl@li.org>\n" @@ -16,64 +16,64 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Zarejestrowany" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Nie zarejestrowany" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Próbuję ..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Błąd" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Autoryzacja nie powiodła się" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Sieć niedostępna" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Wybrany host jest niedostępny" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Niepoprawny" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Używane konto" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Brak zarejestrowanych kont" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -81,28 +81,28 @@ msgstr "" "Nie można połączyć się z serwerem SFLphone.\n" "Upewnij się, że został uruchomiony daemon SFLphone" -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -111,7 +111,7 @@ msgstr "" "Informacja ALSA\n" "Błąd otwarcia urządzenia do odtwarzania dźwięku" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -120,7 +120,7 @@ msgstr "" "Informacja ALSA\n" "Błąd otwarcia urządzenia do przechwytywania" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -129,473 +129,473 @@ msgstr "" "Informacja Pulseaudio\n" "Pulseaudio nie zostało uruchomione" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d głosowa wiadomość" msgstr[1] "%d głosowych wiadomości" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d głosowa wiadomość" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Brak zarejestrowanych kont" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "" @@ -648,479 +648,452 @@ msgstr "" msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +msgid "Ringtone" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +msgid "Voice enhancement settings" +msgstr "" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1129,82 +1102,110 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "" diff --git a/lang/pt/pt.po b/lang/pt/pt.po index 9e6550c474..949459ff96 100644 --- a/lang/pt/pt.po +++ b/lang/pt/pt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2009-12-03 18:09+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -15,578 +15,578 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registado" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Não Registado" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Erro" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Autenticação Falhou" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "A rede está inacessível" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "A máquina está inacessível" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Inválido" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "conta %s : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "_Desligar" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Correio de voz" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Livro de endereços" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Livro de endereços" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "Correio de voz (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "_Chamar" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "_Editar" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Editar" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Remover a conta seleccionada" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Histórico de chamadas" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Histórico de chamadas" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Contas" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Preferências" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Ver" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Ajuda" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Transferir" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "Transferir" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "_Gravar" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "Marca_dor" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Histórico" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Histórico de chamadas" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Livro de endereços" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Nomear" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protocolo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Desconhecido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "" @@ -639,479 +639,453 @@ msgstr "" msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "SIP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Configurações da conta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Básico" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Avançado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "Rede" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protocolo" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Estado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Contas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Geral" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "cartões" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Emprego" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Livros de Endereços" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Nome" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Nome Alternativo" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Servidor" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Utilizador" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Conta" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Endereço de email opcional" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_Servidor STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Parabéns!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frequência" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Taxa de Dados" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Largura de Banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Saída" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Entrada" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +msgid "Ringtone" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Gravações" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Pasta de destino" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Seleccione uma pasta" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Ficheiros Áudio" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Configurações da conta" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Ícone de Notificação" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Histórico de Chamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "dias" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Preferências" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Áudio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Livro de Endereços" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1120,82 +1094,110 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Clique aqui para alterar o tipo de procura" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "" @@ -1289,7 +1291,7 @@ msgstr "" #~ ",Launchpad Contributions:,Maxime Chambreuil, ,Launchpad Contributions:," #~ "Maxime Chambreuil,Tiago Silva, ,Launchpad Contributions:,Maxime " #~ "Chambreuil,Tiago Silva, ,Launchpad Contributions:,Maxime Chambreuil,Tiago " -#~ "Silva, ,Launchpad Contributions:,Maxime Chambreuil,Tiago Silva" +#~ "Silva, ,Launchpad Contributions:,Maxime Chambreuil,Tiago" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" diff --git a/lang/pt_BR/pt_BR.po b/lang/pt_BR/pt_BR.po index 137970db2a..42a553a175 100644 --- a/lang/pt_BR/pt_BR.po +++ b/lang/pt_BR/pt_BR.po @@ -7,72 +7,72 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" -"PO-Revision-Date: 2010-03-04 13:55+0000\n" -"Last-Translator: Teylo Laundos Aguiar <teylo.aguiar@gmail.com>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-06-02 08:31+0000\n" +"Last-Translator: Gustavo Guidorizzi <Unknown>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registrado" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Não Registrado" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Tentando..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Erro" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "A autenticação falhou" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "A rede está inacessível" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "A máquina está inacessível" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Erro de configuração no stun" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Servidor stun inválido" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "Pronto" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Inválido" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Utilizando conta" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Sem contas registradas" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -80,28 +80,28 @@ msgstr "" "Incapaz de conectar ao servidor SFLphone.\n" "Tenha certeza de que o daemon está rodando." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Ligações IP diretas" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "hoje às %R" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "ontem às %R" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "%A às %R" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "%x às %R" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -111,7 +111,7 @@ msgstr "" "\n" "Erro ao abrir o dispositivo de reprodução" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -121,7 +121,7 @@ msgstr "" "\n" "Erro ao abrir o dispositivo de captura" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -131,43 +131,43 @@ msgstr "" "\n" "Pulseaudio não está rodando" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "Existe uma ligação em progresso" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Existem ligações em progresso" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Você ainda deseja sair?" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "Erro no SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP não é suportado pelo peer %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Comunicação Segura Indisponível" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Continuar" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Finalizar Chamada" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -176,11 +176,11 @@ msgstr "" "Um erro %s forçou a ligação com %s a mudar para um modo não encriptado.\n" "Motivo exato: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "Negociação ZRTP falhou" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -189,50 +189,50 @@ msgstr "" "%s deseja finalizar a utilização de comunicação segura. A confirmação irá " "retomar sem SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Confirmar Vá Limpar" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Confirmar" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s conta : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>De</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d mensagem de voz" msgstr[1] "%d mensagens de voz" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Ligando com %s conta <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Conta atual" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Você não tem contas configuradas" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Você não tem contas registradas" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -241,369 +241,369 @@ msgstr "" "<i>Com:</i>%s \n" "utilisando %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s não suporta ZRTP." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "Negociação ZRTP falhou com %s" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>Com:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Volume dos auto-falantes" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Volume do microfone" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "_Apresentar janela principal" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "_Desligar" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "%i conta ativa" msgstr[1] "%i contas ativas" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Correio de voz" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Catálogo de endereços" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Catálogo de endereços" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "Correio de voz (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone é um cliente VoIP compatível com os protocolos SIP e IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "Sobre o SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "_Chamar" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Nova ligação" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "Faz uma nova chamada" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Atender" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "Responder a chamada" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "Terminar a chamada" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "Em _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "Colocar a chamada em espera" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "Encerrar a chamada em espera" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "Arquivo de Configuração" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Erro de configuração no stun" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d mensagem de voz" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "_Fechar" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "Minimizar para a bandeja do sistema" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "_Sair" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Sair do programa" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Editar" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "_Copiar" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Remover a conta selecionada" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "_Colar" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "Colar o conteúdo da Área de Transferência" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Limpar _histórico" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Limpar histórico" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Contas" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Conta atual" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Preferências" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "Altera as suas preferências" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Exibir" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Ajuda" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Continuar" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "Abrir o manual" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "Autenticação" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Transferir" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "Transfirir para:" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "_Gravar" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "Gravar a conversação atual" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "_Exibir barra de ferramentas" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "Mostra a barra de ferramentas" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "Desabilitado" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "_Controle de Volumes" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Exibir controles de volume" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Histórico" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Histórico de chamadas" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Catálogo de endereços" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "Em _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "_Ligar de volta" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Editar número de telefone" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Edite o número de telefone antes de fazer uma ligação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Parâmetros de conta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Apelido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protocolo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Desconhecido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "_Nome do host" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "_Nome do usuário" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "_Senha da caixa postal de voz" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Autenticação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Segredo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Credencial" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Nome de autenticação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Segurança" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "Use transporte TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "Troca de chave SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Desabilitado" @@ -656,40 +656,40 @@ msgstr "Indique endereço e portas publicadas" msgid "Published port" msgstr "Porta publicada" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "SIP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Configurações da conta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Básico" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Avançado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "Rede" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -700,95 +700,95 @@ msgstr "" "configurações que você definir aqui também serão utilizadas se nenhuma conta " "puder ser combinada a uma chamada de entrada ou de saída." -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "O Servidor retornou \"%s\" (%d)" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protocolo" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Estado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Contas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Contas Configuradas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "conta ativa" msgstr[1] "conta ativa" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "Você não possui uma conta ativa" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Geral" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Use o catálogo de endereços do Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Limite de download :" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "cartões" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "_Apresentar foto de contato caso disponível" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Campos do catálogo de endereços do Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Trabalho" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Casa" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Celular" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Catálogos de endereços" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Selecione qual catálogo de endereços do Evolution deseja utilizar" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Nome" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "Este assistente está finalizado." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -796,348 +796,325 @@ msgstr "" "Você pode a qualquer momento checar seu estado de registro ou modificar seus " "parâmetros de conta na janela Opções/Contas." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Apelido" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Servidor" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Nome de usuário" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Segurança: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP rascunho-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Nenhum" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "Assistente de criação de contas do SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Bem vindo ao assistente de criação de contas do SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "Este assistente de instalação irá lhe ajudar a configurar uma conta." -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Selecione um tipo de conta" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Conta" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Por favor, selecione uma das seguintes opções" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Criar uma conta gratuita SIP/IAX2 em sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Registrar uma conta SIP ou IAX2 existente" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Configurações de conta SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Por favor, preencha as informações a seguir" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Comunicações seguras com _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Endereço de e-mail opcional" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" "Este endereço de email será utilizado para enviar as mensagens de voz em sua " "caixa postal." -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_endereço de email" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Configurações de conta IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" "Você provavelmente precise habilitar isto se estiver por trás de um firewall." -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "Ha_bilitar STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_Servidor STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Registro de conta" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Parabéns!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frequência" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Taxa de bits" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Largura de banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Saída" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Entrada" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" -msgstr "_Detecção de atividade de voz" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Ringtones" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "_Redução de ruído (Utilização de banda-estreita)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Gerenciador de Som" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "Configurações do ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Gravações" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Pasta de destino" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Selecione uma pasta" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Ringtones" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "_Habilitar ringtones" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Escolha um ringtone" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Arquivos de Áudio" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Configurações da conta" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "Argumento da URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Comandos padrões de ligações recebidas com URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s será substituído pela URL fornecida." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Gancho em um cabeçalho _SIP específico" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Gancho em uma URL _IAX2" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "Comando a _executar" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Reescrevendo número do telefone" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "_Prefixo de números discados com" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Notificações de Desktop" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "_Habilitar notificações" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Ícone da bandeja do sistema" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "_Popup na janela principal ao receber ligação" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "Nu_nca apresentar popup na janela principal" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "Esconder o SFLphone na _inicialização" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Histórico de Chamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "_Manter meu histórico por pelo ao menos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "dias" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Preferências" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Áudio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Catálogo de endereços" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Ganchos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" -msgstr "" +msgstr "Atalhos" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" +"Tenha cuidado: estes atalhos podem predominar sobre atalhos definidos " +"globalmente." -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "Opções ZRTP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "Enviar um Hash Olá no S_DP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "Pergunta ao Usuário para Confirmar SAS" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "_Alerta se o ZRTP não é suportado" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "Apresenta o SAS uma vez para realizar eventos" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "Opções do SDES" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "Opções avançadas para o TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "Transporte TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1152,85 +1129,119 @@ msgstr "" "funcionar em uma\n" "porta dedicada, uma diferente da outra\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "Certificado da lista de Autoridades" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "Escolha um arquivo de lista CA (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "Arquivo certificado endpoint público" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "Escolha um certificado endpoint público (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "Escolha um arquivo de chave privada (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "Senha para a chave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "Método do protocolo TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "Lista de cifras TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "Instância de nome do servidor para saída da conexão TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "Tempo de negociação expirado (seg:mseg)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "Verificar os certificados de entrada, como um servidor" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "Verificar certificados de resposta, como um cliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "Requer certificado para conexões tls entrantes" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "Opções ZRTP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "Enviar um Hash Olá no S_DP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "Pergunta ao Usuário para Confirmar SAS" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "_Alerta se o ZRTP não é suportado" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "Apresenta o SAS uma vez para realizar eventos" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "Opções do SDES" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Buscar todos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Clique aqui para alterar o tipo de pesquisa" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Buscar por ligações perdidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Buscar por ligações recebidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Buscar por ligações feitas" +#~ msgid "_Voice Activity Detection" +#~ msgstr "_Detecção de atividade de voz" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "_Redução de ruído (Utilização de banda-estreita)" + #~ msgid "Stun Server" #~ msgstr "Servidor STUN" @@ -1557,8 +1568,8 @@ msgstr "Buscar por ligações feitas" #~ ",Launchpad Contributions:,Maxime Chambreuil,kalib, ,Launchpad " #~ "Contributions:,Maxime Chambreuil,kalib, ,Launchpad Contributions:,Maxime " #~ "Chambreuil,kalib, ,Launchpad Contributions:,Maxime Chambreuil,kalib, ," -#~ "Launchpad Contributions:,André Gondim,Maxime Chambreuil,Ricardo Martins," -#~ "Thaynã Moretti,kalib" +#~ "Launchpad Contributions:,André Gondim,Gustavo Guidorizzi,Maxime " +#~ "Chambreuil,Ricardo Martins,Thaynã Moretti,kalib" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" @@ -1566,5 +1577,5 @@ msgstr "Buscar por ligações feitas" #~ ",,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,,maxime." #~ "chambreuil@gmail.com,kalibslack@gmail.com,,,maxime.chambreuil@gmail.com," #~ "kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,," -#~ "andregondim@ubuntu.com,maxime.chambreuil@gmail.com,ricardo.macedo@yahoo." +#~ "andregondim@ubuntu.com,,maxime.chambreuil@gmail.com,ricardo.macedo@yahoo." #~ "com.br,,kalibslack@gmail.com" diff --git a/lang/ru/ru.po b/lang/ru/ru.po index 9124d9226b..ddb7901327 100644 --- a/lang/ru/ru.po +++ b/lang/ru/ru.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" -"PO-Revision-Date: 2010-03-05 12:41+0000\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-05-11 07:48+0000\n" "Last-Translator: DMG <Unknown>\n" "Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" @@ -16,64 +16,64 @@ msgstr "" "Content-Transfer-Encoding: 8bit\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" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Зарегистрирован" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Не зарегистрирован" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Пытаюсь..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Ошибка" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Аутентификация не удалась" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Сеть недоступна" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Узел недоступен" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Ошибка конфигурации Stun" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Неверный сервер Stun" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "Готово" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Неверный" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Использовать аккаунт" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "У вас нет зарегистрированных аккаунтов" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -81,28 +81,28 @@ msgstr "" "Невозможно подключиться к SFLphone-серверу.\n" "Убедитесь что он работает." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Прямые IP-звонки" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "сегодня в %R" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "вчера в %R" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "%A в %R" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "%x в %R" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -112,7 +112,7 @@ msgstr "" "\n" "Ошибка при попытке открытия устройства воспроизведения звука" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -122,7 +122,7 @@ msgstr "" "\n" "Ошибка при попытке открытия устройства захвата звука" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -132,43 +132,43 @@ msgstr "" "\n" "Pulseaudio не запущен" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "Звонок ещё не окончен." -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Несколько звонков ещё не окончены." -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Вы уверенны что хотите выйти?" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "Ошибка SFLphone." -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP не поддерживается устройством %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Зашифрованная связь недоступна." -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Продолжить" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Завершить вызов" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -178,11 +178,11 @@ msgstr "" "режим.\n" "Точная причина: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "Неудачный обмен информации ZRTP" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -191,26 +191,26 @@ msgstr "" "%s хочет отказаться от использования зашифрованной связи. В случае " "подтверждения разговор продолжится без SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Подтвердить переход на незашифрованную связь" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Подтвердить" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s аккаунт: %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>От:</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" @@ -218,24 +218,24 @@ msgstr[0] "%d голосовое письмо" msgstr[1] "%d голосовые письма" msgstr[2] "%d голосовые письма" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Вызов %s с помощью аккаунта <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Текущий аккаунт" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "У вас нет настроенных аккаунтов" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "У вас нет зарегистрированных аккаунтов" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -244,45 +244,45 @@ msgstr "" "<i>с:</i> %s\n" "используя %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s не поддерживает ZRTP." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "Обмен информации ZRTP не удался (%s)" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>с</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Громкость" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Чувствительность микрофона" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "_Показать главное окно" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "_Положить трубку" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" @@ -290,324 +290,324 @@ msgstr[0] "%i активный аккаунт" msgstr[1] "%i активных аккаунтов" msgstr[2] "%i active accounts" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Голосовая почта" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Адресная книга не выбрана" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Адресная книга" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "Голосовая почта (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone - SIP и IAX2-совместимый VoIP-клиент" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "О программе SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "_Вызов" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Новый вызов" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "Сделать новый вызов" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Взять трубку" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "Ответить на вызов" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "Завершить вызов" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "_Удерживать вызов" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "Поставить вызов на удержание" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "_Снять вызов с удержания" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "Поставить вызов на удержание" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "Мастер настройки" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Запустить мастер настройки" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "Прослушивание голосовой почты" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "_Закрыть" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "Свернуть в трей" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "В_ыход" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Выйти из программы" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Правка" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "_Копировать" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Копировать выделенное" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "В_ставить" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "Вставить из буфера обмена" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Очистить журнал" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Очистить журнал вызовов" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Аккаунты" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Нстройка аккаунта" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "_Настройки" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "Изменить ваши настройки" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Вид" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Помощь" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Содержание" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "Открыть руководство пользователя" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "О программе" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Переадресация вызова" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "Переадресовать вызов" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "_Запись" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "Записать текущий разговор" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "Показать _панель инструментов" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "Показывать панель инструментов" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "_Номеронабиратель" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "Показывать _номеронабиратель" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "Настройки _громкости" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Показывать настройки _громкости" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Журнал вызовов" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "История вызовов" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Адресная книга" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "_Удерживать звонок" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "Обратный вызов" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Изменить номер телефона" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Изменить номер телефона перед вызовом" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Параметры учетной записи" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Псевдоним" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "Пр_отокол" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Неизвестный" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "Имя или IP-адрес _сервера" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "Имя пользователя" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "Па_роль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Показать пароль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "Номер _голосовой почты" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "_Агент-пользователя" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Аутентификация" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Пароль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Параметры доступа" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Имя для аутентификации" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Пароль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Безопасность" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "Использовать протокол TLS" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "Обмен ключами SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Отключен" @@ -660,40 +660,40 @@ msgstr "Настроить публичный адрес и порт:" msgid "Published port" msgstr "Публичный порт" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "Кодеки" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" -msgstr "" +msgstr "DTMF" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" -msgstr "" +msgstr "RTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "SIP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Настройки аккаунта" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Основные" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Дополнительно" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "Сеть" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -704,28 +704,28 @@ msgstr "" "будут использованы если не будет подходящего аккаунта для входящего или " "исходящего вызова." -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "Ответ сервера \"%s\" (%d)" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Протокол" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Статус" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Аккаунты" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Настройка аккаунтов" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" @@ -733,67 +733,67 @@ msgstr[0] "%d активный аккаунт" msgstr[1] "%d активных аккаунтов" msgstr[2] "действующий аккаунт" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "У вас нет активного аккаунта" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Общие настройки" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Использовать адресную книгу Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Ограничение скорости скачивания:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "карточек" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "_Показать фотографию контакта (если имеется):" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Использовать следующие поля из адресной книги Evolution:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Рабочий" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Домашний" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Мобильный" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Адресная книга" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Выбрать адресную книгу Evolution:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Имя" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "Мастер закончил настройку." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -801,348 +801,323 @@ msgstr "" "Вы можете в любое время проверить статус регистрации или изменить параметры " "ваших аккаунтов в меню Правка / Аккаунты." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Псевдоним" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Сервер" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Имя пользователя" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Безопасность " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Нет" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "Мастер создания аккаунта SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Добро пожаловать в мастер создания аккаунта SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "VoIP-протоколы" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Выберите тип аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Аккаунт" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Выберите одну из следующих возможностей" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Использовать существующий SIP или IAX2 аккаунт" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Настройка SIP-аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Введите пожалуйста следующие данные" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Защищëнная связь с _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "e-mail" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" "Этот электронный адрес будет использоваться для отправки сообщений голосовой " "почты" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_Адрес эл. почты" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Настройка IAX2-аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" "Возможно нужно выбрать эту опцию если вы находитесь за сетевым экраном." -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "Включить STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_STUN-сервер" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Регистрация аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Поздравляем!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Частота" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Битрейт" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Полоса пропускания" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "ALSA-плагин" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Аудиовыход" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Аудиовход" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" -msgstr "Детектор тишины (VAD)" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Рингтоны" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "Шумоподавление" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Менеджер звука" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "Настройка ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Записи" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Сохранять в" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Выберите каталог" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Рингтоны" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "Включить рингтон" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Выберать рингтон" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Аудио файлы" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Настройки аккаунта" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "Передача URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Пользовательская команда при входящих вызовах с URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s будет заменена на переданную URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Запустить при определëнном SIP-заголовке" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Запустить при наличии URL _IAX2" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "_Выполнить команду:" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Префикс" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "Добавить префикс перед номером" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Всплывающие уведомления" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "Показывать всплывающие уведомления" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Значок в системном трее" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "Показывать SFLphone в системном трее" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "_Показать главное окно при входящем вызове" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "_Никогда не показывать главное окно" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "Скрывать SFLphone при запуске в трей" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Журнал вызовов" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "_Хранить журнал вызовов в течении" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "дней" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Настройка" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Аудио" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Адресная книга" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Прочее" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" -msgstr "" +msgstr "Горячие клавиши" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "Опции ZRTP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "Послать hello-хэш в S_DP" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "Попросить пользователя подтвердить пароль SAS" +msgstr "ВНИМАНИЕ: эти комбинации могут заменить системные комбинации клавиш" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "_Предупредить если ZRTP не пддерживается" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "Показать SAS один раз" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "Настройка SDES" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "Использовать RTP при сбое SDES" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "Дополнительные настройки для TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "Транспорт TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1155,85 +1130,119 @@ msgstr "" "каждого аккаунта (но каждый из них будет использовать свой выделенный " "порт).\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "Global TLS listener (для всех аккаунтов)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "Список центров сертификации" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "Выберите файл Центра сертификации (необязательно)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "Файл с публичным сертификатом" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "Выберите публичный сертификат (необязательно)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "Выберите файл с приватным ключом (необязательно)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "Пароль для приватного ключа" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "Метод протокола TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "Список шифров TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "Имя сервера для исходящих TLS-подключений" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "Время ожидания соединения (сек:мсек)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "Проверять входящие сертификаты как сервер" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "Проверять входящие сертификаты как клиент" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "Требовать сертификат для входящих TLS-подключений" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "Опции ZRTP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "Послать hello-хэш в S_DP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "Попросить пользователя подтвердить пароль SAS" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "_Предупредить если ZRTP не пддерживается" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "Показать SAS один раз" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "Настройка SDES" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "Использовать RTP при сбое SDES" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Искать все" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Нажмите сюда, чтобы изменить тип поиска" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Поиск в пропущенных вызовах" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Поиск в входящих вызовах" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Поиск в исходящих вызовах" +#~ msgid "_Voice Activity Detection" +#~ msgstr "Детектор тишины (VAD)" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "Шумоподавление" + #~ msgid "Account creation wizard" #~ msgstr "Мастер настройки SFLphone" diff --git a/lang/sflphone.pot b/lang/sflphone.pot index d98c2e8d7f..6238be246f 100644 --- a/lang/sflphone.pot +++ b/lang/sflphone.pot @@ -1,591 +1,591 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# SFLphone translation template +# Copyright (C) Savoir-faire Linux 2005 2006 2007 2008 2009 2010 +# This file is distributed under the same license as the sflphone package. +# Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>. # -#, fuzzy + msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: 0.9.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-06-17 14:00\n" +"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" +"Language-Team: SFLphone Team <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "" @@ -638,479 +638,452 @@ msgstr "" msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +msgid "Ringtone" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +msgid "Voice enhancement settings" +msgstr "" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1119,81 +1092,109 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "" diff --git a/lang/sv/sv.po b/lang/sv/sv.po index 562ba5c16d..92791abe54 100644 --- a/lang/sv/sv.po +++ b/lang/sv/sv.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2010-04-12 13:20+0000\n" "Last-Translator: Gabriel Thörnblad <Unknown>\n" "Language-Team: Swedish <sv@li.org>\n" @@ -15,64 +15,64 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registrerad" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Ej registrerad" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Autentisering misslyckades" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Nätverket kan inte nås" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Fel i STUN -konfigurering" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "STUN-server ej giltig" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "Redo" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Ogiltigt" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Använder konto" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Inga registrerade konton" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -80,515 +80,515 @@ msgstr "" "Kan inte ansluta till SFLphone-servern.\n" "Se till att daemonen är igång." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "idag klockan %R" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "igår klockan %R" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "" @@ -641,479 +641,452 @@ msgstr "" msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +msgid "Ringtone" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +msgid "Voice enhancement settings" +msgstr "" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1122,81 +1095,109 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "" diff --git a/lang/tr/tr.po b/lang/tr/tr.po index d4cd322e0b..f2f576438b 100644 --- a/lang/tr/tr.po +++ b/lang/tr/tr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2009-12-30 08:56+0000\n" "Last-Translator: zeugma <Unknown>\n" "Language-Team: Turkish <tr@li.org>\n" @@ -15,578 +15,578 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Kayıtlı" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Hata" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Kimlik Doğrulama Başarısız" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Ağ erişilemez durumda" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Geçersiz" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Devam et" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Onayla" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Sesli mesaj" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Adres Defteri" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "Çağrı" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Yeni çağrı" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "Aramayı sonlandır" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Yapılandırma sihirbazını çalıştır" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "_Kapat" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "Sistem çubuğuna küçült" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "_Çık" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Programdan çık" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Düzenle" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "_Kopyala" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "_Yapıştır" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Hesaplar" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Hesaplarınızı düzenleyin" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "_Tercihler" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "Tercihlerinizi değiştirin" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Göster" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Yardım" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "İçerikler" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "Bu uygulama hakkında" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "_Transfer" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "_Kayıt" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "Araç çubuğunu göster" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "_Geçmiş" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Arama geçmişi" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "_Adres defteri" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Bilinmiyor" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "_Kullanıcı adı" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Parola" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Parolayı göster" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Kimlik Doğrulama" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Gizli" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Parola" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Güvenlik" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "" @@ -639,479 +639,453 @@ msgstr "" msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "Çözücüler" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Hesap ayarları" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Basit" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Gelişmiş" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "İletişim Kuralları" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Durum" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Hesaplar" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Genel" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_İş" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Başlangıç" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Hareketli" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Adres Defterleri" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "İsim" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Rumuz" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Sunucu" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Kullanıcı adı" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Hiçbiri" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Hesap" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "isteğe bağlı e-posta adresi" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_E-Posta adresi" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Tebrikler!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frekans" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Veri akış hızı" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Band Genişliği" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Çıkış" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Giriş" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +msgid "Ringtone" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Kayıtlar" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Bir klasör seç" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Ses Dosyaları" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Hesap ayarları" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Sistem Tepsisi Simgesi" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "gün" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Tercihler" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Ses" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Adres Defteri" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1120,81 +1094,109 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Arama türünü değiştirmek için buraya tıklayın" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "" diff --git a/lang/zh_CN/zh_CN.po b/lang/zh_CN/zh_CN.po index 543b7ea3de..d2df50e47a 100644 --- a/lang/zh_CN/zh_CN.po +++ b/lang/zh_CN/zh_CN.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2010-02-28 01:32+0000\n" "Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -16,64 +16,64 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "已注册" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "未注册" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "正在连接..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "注册失败" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "认证失败" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "网络连接失败" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "服务器连接失败" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Stun配置有误" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Stun服务器无效" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "无效" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "使用账户" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "没有已注册帐户" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -81,28 +81,28 @@ msgstr "" "连接SFLphone服务器失败.\n" "请检查daemon是否还在运行." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -112,7 +112,7 @@ msgstr "" "\n" "打开回放设备时出错" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -122,7 +122,7 @@ msgstr "" "\n" "打开采集设备时出错" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -132,472 +132,472 @@ msgstr "" "\n" "Pulseaudio未运行" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "有一个电话正在处理" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "有电话正在处理中" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "确认要退出?" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "SFLphone出错" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "安全通信不可用" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "继续" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "停止呼叫" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "确认" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s 帐户: %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>拨入方</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d 个语音信息" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "使用%s帐户<i>%s</i>呼叫" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "当前帐户" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "你没有设置任何账户" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "未发现已注册帐户" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s 不支持 ZRTP。" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "扬声器音量" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "话筒音量" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "显示主窗口(S)" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "挂断(_H)" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "语音信箱" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "语音信箱 (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone是一个VoIP客户端,它兼容SIP和IAX2协议." -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "关于SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "电话(_C)" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "新电话(_N)" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "接听(_P)" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "保持(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "恢复通话" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Stun配置有误" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d 个语音信息" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "退出(_Q)" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "编辑(_E)" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "删除所选账户" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "清空历史记录(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "清空历史记录" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "账户(_A)" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "当前帐户" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "首选项(_P)" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "更改您的首选项" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "查看(_V)" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "帮助(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "继续" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "身份验证" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "转接" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "转给:" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "录音(_R)" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "禁用" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "音量控制(V)" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "音量控制(V)" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "历史" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "呼叫记录" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "保持(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "回叫(_C)" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "编辑电话号码" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "拨出电话前编辑电话号码" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "帐户相关参数" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "别名(A)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "协议(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "未知" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "主机名(H)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "用户名(U)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "密码(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "密码" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "语音信箱号码(V)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "身份验证" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "密码" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "安全" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "禁用" @@ -650,479 +650,455 @@ msgstr "" msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "Codecs编码" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "SIP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "帐户设置" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "网络" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "协议" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "状态" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "帐户" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "已配置帐户" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "常用配置" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "使用Evolution地址薄(U)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "下载上限:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "卡" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "如果可行则显示联系人照片(D)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "使用Evolution地址薄中的如下字段:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "单位电话(W)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "家庭电话(H)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "移动电话(M)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "选择使用如下Evolution地址薄" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "名称" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "配置完成." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "你可以随时在 选项/帐户 窗口中查看注册状态或者修改帐户参数." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "别名" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "服务器" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "用户名" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "SFLphone账户创建向导" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "欢迎使用SFLphone帐户创建向导!" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "安装向导将帮助您配置帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "VoIP协议" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "选择帐户类型" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP(会话初始化协议)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2(Asterisk内部交换协议)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "请选择以下选项中的一个" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "在sflphone.org上创建免费的SIP/IAX2帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "注册已存在的SIP或IAX2帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "SIP帐户设置" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "请填写以下信息" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "可选邮件地址" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "这个邮件地址将被用来发送您的语音邮箱消息" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "邮件地址(E)" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "IAX2帐户设置" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "网络地址解析(NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "如果你使用网络使用防火墙,你很有可能需要设定此项." -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "使用STUN(n)" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "STUN服务器(S)" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "帐户注册" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "恭喜!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "频率" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "比率" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "带宽" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "ALSA插件" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "输出" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "输入" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" -msgstr "声音状态检测(V)" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "铃声" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "降噪处理-窄频压缩(N)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +#, fuzzy +msgid "_Noise Reduction" +msgstr "降噪" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "音频管理器" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "ALSA设置" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "记录" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "目标文件夹" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "选择文件夹" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "铃声" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "启用铃声(E)" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "选择铃声" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "音频文件" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "帐户设置" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "URL参数" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "定制对带有URL的来电的处理" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "传输的URL会被替换成%s." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "激活指定的SIP头(S)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "激活IAX2 URL(I)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "运行命令(r)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "重设电话号码" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "号码前缀(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "桌面提示" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "启用提示(E)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "系统托盘图标" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "来电时弹出主窗口(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "从不弹出主窗口(v)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "在启动时隐藏SFLphone主窗口" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "拨号历史" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "首选项" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "钩键" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1131,85 +1107,119 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "查询所有" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "请点击此处改变查询方式" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "从未接电话中查询" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "从来电中查询" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "从拨出电话中查询" +#~ msgid "_Voice Activity Detection" +#~ msgstr "声音状态检测(V)" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "降噪处理-窄频压缩(N)" + #~ msgid "Account creation wizard" #~ msgstr "帐户创建向导" @@ -1740,9 +1750,6 @@ msgstr "从拨出电话中查询" #~ msgid "%s account- %s" #~ msgstr "%s 帐户- %s" -#~ msgid "Noise reduction" -#~ msgstr "降噪" - #~ msgid "_Destination folder" #~ msgstr "目标文件夹(D)" diff --git a/lang/zh_HK/zh_HK.po b/lang/zh_HK/zh_HK.po index 67a037909e..ef06d0715a 100644 --- a/lang/zh_HK/zh_HK.po +++ b/lang/zh_HK/zh_HK.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2009-12-03 18:09+0000\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -16,64 +16,64 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "已註冊" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "未註冊" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "正在連接..." -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "註冊失敗" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "網路連線失敗" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "伺服器連線失敗" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Stun配置有誤" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Stun伺服器無效" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "無效" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "使用賬戶" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "沒有已註冊帳戶" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -81,28 +81,28 @@ msgstr "" "連接SFLphone伺服器失敗.\n" "請核查daemon是否正在運行." -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -112,7 +112,7 @@ msgstr "" "\n" "打開回放設備時出錯" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -122,7 +122,7 @@ msgstr "" "\n" "打開采集設備時出錯" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -132,472 +132,472 @@ msgstr "" "\n" "Pulseaudio未運行" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "有一個電話正在處理中." -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "有電話正在處理中." -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "確認要退出?" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "SFLphone 出錯" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s 帳戶 : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>撥入方</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d 個語音郵件" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "使用%s帳戶<i>%s</i>呼叫" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "當前帳戶" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "你沒有設置任何賬戶" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "未發現已註冊帳戶" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "揚聲器音量" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "話筒音量" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "顯示主窗口(S)" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "放下(H)" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "語音郵件" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "語音郵件 (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone是一個VoIP客戶端,它兼容SIP和IAX2协议." -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "有關SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "電話" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "新電話(N)" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "撥出(P)" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "待机" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "恢复通話" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Stun配置有誤" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d 個語音郵件" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "編輯(E)" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "編輯(E)" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "刪除所選賬戶" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "清空曆史記錄(C)" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "清空曆史記錄" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "帳戶(A)" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "當前帳戶" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "屬性" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "查看(V)" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "幫助(H)" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "轉接" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "轉給:" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "記錄(R)" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "顯示撥號鍵盤" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "音量控制(V)" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "音量控制(V)" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "歷史" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "呼叫記錄" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "待机" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "回叫(C)" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "編輯電話號碼" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "撥出電話前編輯電話號碼" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "帳戶相關參數" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "別稱(A)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "協議(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "未知" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "主机名稱(H)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "使用者名稱(U)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "密碼(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "密碼" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "語音郵箱(V)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "密碼" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "" @@ -650,479 +650,455 @@ msgstr "" msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "編碼" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "SIP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "帳戶設置" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "協議" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "狀態" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "帳戶" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "已配置帳戶" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "常用配置" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "使用Evolution地址薄(U)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "下載上限:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "卡" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "如果可以則顯示聯繫人照片(D)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "使用Evolution地址薄中的如下字段:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "單位電話(W)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "家庭電話(H)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "移動電話(M)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "選擇使用如下Evolution地址薄" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "名稱" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "配置完成." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "你可以隨時在 選項/帳戶 中查看註冊狀態或者修改帳戶信息." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "別稱" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "伺服器" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "使用者名稱" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "SFLphone賬戶創建嚮導" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "歡迎使用SFLphone帳戶創建嚮導!" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "安裝向導將幫助您配置帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "VoIP協議" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "選擇帳戶類型" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP(會話初始化協議)" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2(Asterisk內部交換協議)" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "請選擇以下選項中的一個" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "在sflphone.org上創建免費的SIP/IAX2帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "註冊已存在的SIP或IAX2帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "SIP帳戶配置" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "請填寫如下信息" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "可選郵件地址" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "這個郵件地址將被用來發送您的語音" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "郵件地址(E)" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "IAX2帳戶配置" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "网络地址解析(NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "如果你使用網路防火牆,你很有可能需要設定該項." -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "啟用STUN(n)" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "STUN伺服器(S)" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "帳戶註冊" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "恭喜!" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "顰律" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "比率" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "顰寬" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "ALSA插件" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "輸出" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "輸入" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" -msgstr "聲音狀態檢測(V)" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "鈴聲" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "降噪處理-窄頻壓縮(N)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +#, fuzzy +msgid "_Noise Reduction" +msgstr "降噪" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "聲音管理器" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "ALSA 配置" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "記錄" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "目標文件夾" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "選擇文件夾" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "鈴聲" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "啟動鈴聲(E)" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "鈴聲選擇" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "音訊檔案" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "帳戶設置" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "URL參數" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "定制對帶有URL的來電的處理" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "傳輸的URL會被替換成%s." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "激活指定的SIP頭(S)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "激活IAX2 URL(I)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "運行命令(r)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "重設電話號碼" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "號碼前綴(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "桌面提示" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "啟動提示(E)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "系統托盤圖標" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "來電話時彈出主視窗(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "從不彈出主視窗(v)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "在啟動時隱藏SFLphone主窗口" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "打電話歷史" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "屬性" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "鉤鍵" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1131,85 +1107,119 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "查詢所有" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "請點擊此處改變查詢方式" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "從未接電話中查詢" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "從來電中查詢" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "從撥出電話中查詢" +#~ msgid "_Voice Activity Detection" +#~ msgstr "聲音狀態檢測(V)" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "降噪處理-窄頻壓縮(N)" + #~ msgid "Account creation wizard" #~ msgstr "帳戶創建向導" @@ -1742,9 +1752,6 @@ msgstr "從撥出電話中查詢" #~ msgid "%s account- %s" #~ msgstr "%s 帳戶- %s" -#~ msgid "Noise reduction" -#~ msgstr "降噪" - #~ msgid "_Destination folder" #~ msgstr "目標文件夾(D)" diff --git a/lang/zh_TW/zh_TW.po b/lang/zh_TW/zh_TW.po index 1e02906fd1..f5c1d80986 100644 --- a/lang/zh_TW/zh_TW.po +++ b/lang/zh_TW/zh_TW.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-19 16:44-0400\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" "PO-Revision-Date: 2009-12-03 18:12+0000\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: Traditional Chinese <zh_TW@li.org>\n" @@ -15,578 +15,578 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:170 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:173 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:176 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:179 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:182 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:185 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:188 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:191 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:194 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:197 +#: ../sflphone-client-gnome/src/accountlist.c:208 msgid "Ready" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:200 +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:114 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:121 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:306 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -#: ../sflphone-client-gnome/src/actions.c:607 -#: ../sflphone-client-gnome/src/actions.c:933 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:379 +#: ../sflphone-client-gnome/src/callable_obj.c:390 msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:382 +#: ../sflphone-client-gnome/src/callable_obj.c:393 msgid "yesterday at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:384 +#: ../sflphone-client-gnome/src/callable_obj.c:395 msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/callable_obj.c:388 +#: ../sflphone-client-gnome/src/callable_obj.c:399 msgid "%x at %R" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:94 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:98 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:103 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:326 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:445 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:447 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:449 -#: ../sflphone-client-gnome/src/mainwindow.c:479 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:450 -#: ../sflphone-client-gnome/src/mainwindow.c:480 -#: ../sflphone-client-gnome/src/mainwindow.c:501 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:475 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:477 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:495 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:497 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:499 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:128 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:811 -#: ../sflphone-client-gnome/src/uimanager.c:1125 -#: ../sflphone-client-gnome/src/uimanager.c:1167 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 msgid "_Hang up" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:189 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:190 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format msgid "%i active account" msgid_plural "%i active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:776 -#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:122 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:145 -#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:327 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:395 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:397 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:806 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:807 -#: ../sflphone-client-gnome/src/uimanager.c:1317 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:808 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:809 -#: ../sflphone-client-gnome/src/uimanager.c:1113 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:810 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:812 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:813 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:814 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:815 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:816 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:817 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:821 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:823 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:824 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:825 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:828 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:829 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:830 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:831 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:832 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:833 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:834 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:835 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:837 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:838 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:841 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:844 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:845 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:846 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:847 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:855 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:856 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:857 -#: ../sflphone-client-gnome/src/uimanager.c:1149 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 msgid "_Record" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:858 +#: ../sflphone-client-gnome/src/uimanager.c:869 msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:859 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:860 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:861 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:862 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:863 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:864 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:865 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:866 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:867 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1137 -#: ../sflphone-client-gnome/src/uimanager.c:1179 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1240 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1396 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1408 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:428 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:436 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334 -#: ../sflphone-client-gnome/src/config/assistant.c:331 -#: ../sflphone-client-gnome/src/config/assistant.c:444 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367 -#: ../sflphone-client-gnome/src/config/assistant.c:347 -#: ../sflphone-client-gnome/src/config/assistant.c:459 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388 -#: ../sflphone-client-gnome/src/config/assistant.c:364 -#: ../sflphone-client-gnome/src/config/assistant.c:474 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393 -#: ../sflphone-client-gnome/src/config/assistant.c:369 -#: ../sflphone-client-gnome/src/config/assistant.c:479 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "" @@ -639,479 +639,452 @@ msgstr "" msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 msgid "Codecs" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 msgid "DTMF" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 msgid "SIP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 msgid "Network" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:595 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:230 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:257 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:275 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:289 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:291 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:293 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:377 -#: ../sflphone-client-gnome/src/config/assistant.c:406 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:390 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:398 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:420 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:506 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:513 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:527 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:600 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:605 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:610 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:688 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:710 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:732 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:767 -msgid "_Voice Activity Detection" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +msgid "Ringtone" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:777 -msgid "_Noise Reduction (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:822 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:826 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:832 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:853 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:857 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:861 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:867 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +msgid "Voice enhancement settings" +msgstr "" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 msgid "Show SFLphone in the system tray" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131 -msgid "SDES Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146 -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156 -msgid "Fallback on RTP on SDES failure" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1120,82 +1093,110 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 msgid "Global TLS listener (all accounts)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 +msgid "ZRTP Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +msgid "Send Hello Hash in S_DP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +msgid "Ask User to Confirm SAS" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 +msgid "_Warn if ZRTP not supported" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 +msgid "Display SAS once for hold events" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "" -- GitLab From fb0defb67b6962a0b170b02739f5d408c7123ac5 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Thu, 17 Jun 2010 14:53:40 -0400 Subject: [PATCH 081/197] [#3258] Merge translations in Gnome client --- lang/copy-in-gnome.sh | 6 +- sflphone-client-gnome/po/da/da.po | 868 +++++++++-------- sflphone-client-gnome/po/de/de.po | 889 ++++++++++-------- sflphone-client-gnome/po/es/es.po | 983 ++++++++++--------- sflphone-client-gnome/po/fr/fr.po | 881 ++++++++++-------- sflphone-client-gnome/po/it/it.po | 819 ++++++++-------- sflphone-client-gnome/po/pt_BR/pt_BR.po | 905 ++++++++++-------- sflphone-client-gnome/po/ru/ru.po | 1139 ++++++++++++----------- sflphone-client-gnome/po/zh_CN/zh_CN.po | 809 ++++++++-------- sflphone-client-gnome/po/zh_HK/zh_HK.po | 798 +++++++++------- 10 files changed, 4389 insertions(+), 3708 deletions(-) diff --git a/lang/copy-in-gnome.sh b/lang/copy-in-gnome.sh index f5e961f6ad..6b3e3e6352 100755 --- a/lang/copy-in-gnome.sh +++ b/lang/copy-in-gnome.sh @@ -1,6 +1,6 @@ -for fichier in `find . -name sflphone.po ` +for fichier in `find . -name *.po ` do locale=`echo $fichier | cut -d / -f2` -cp $fichier ../sflphone-client-gnome/po/$locale/sflphone-client-gnome.po -echo "$fichier copied to ../sflphone-client-gnome/po/$locale/sflphone-client-gnome.po" +cp $fichier ../sflphone-client-gnome/po/$locale/$locale.po +echo "$fichier copied to ../sflphone-client-gnome/po/$locale/$locale.po" done diff --git a/sflphone-client-gnome/po/da/da.po b/sflphone-client-gnome/po/da/da.po index 1c011969ac..df489d7787 100644 --- a/sflphone-client-gnome/po/da/da.po +++ b/sflphone-client-gnome/po/da/da.po @@ -7,68 +7,72 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-03 10:22-0500\n" -"PO-Revision-Date: 2009-11-03 03:52+0000\n" -"Last-Translator: Jonas Fonseca <fonseca@diku.dk>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-05-01 01:15+0000\n" +"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n" "Language-Team: Danish <da@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:175 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registreret" -#: ../sflphone-client-gnome/src/accountlist.c:178 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Ikke registreret" -#: ../sflphone-client-gnome/src/accountlist.c:181 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Forsøger..." -#: ../sflphone-client-gnome/src/accountlist.c:184 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Fejl" -#: ../sflphone-client-gnome/src/accountlist.c:187 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Godkendelse mislykkedes" -#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Netværk kan ikke nås" -#: ../sflphone-client-gnome/src/accountlist.c:193 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Vært kan ikke nås" -#: ../sflphone-client-gnome/src/accountlist.c:196 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Stun konfigureringsfejl" -#: ../sflphone-client-gnome/src/accountlist.c:199 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Stun server ugyldig" -#: ../sflphone-client-gnome/src/accountlist.c:202 +#: ../sflphone-client-gnome/src/accountlist.c:208 +msgid "Ready" +msgstr "" + +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Ugyldig" -#: ../sflphone-client-gnome/src/actions.c:98 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Benytter konto" -#: ../sflphone-client-gnome/src/actions.c:104 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Ingen registrerede konti" -#: ../sflphone-client-gnome/src/actions.c:285 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -76,25 +80,28 @@ msgstr "" "Forbindelse til SFLphone serveren kan ikke oprettes.\n" "Sørg for at server-dæmonen kører." -#: ../sflphone-client-gnome/src/actions.c:589 -#: ../sflphone-client-gnome/src/actions.c:911 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Direkte IP opkald" -#: ../sflphone-client-gnome/src/actions.c:1103 -#, c-format -msgid "" -"<b>Error: No audio codecs found.\n" -"\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" +#: ../sflphone-client-gnome/src/callable_obj.c:390 +msgid "today at %R" msgstr "" -"<b>Fejl: Ingen audio-codec fundet\n" -"\n" -"</b>SFL audio-codecs skal installeres i <i>%s</i> eller i mappen <b>." -"sflphone</b> i dit hjemmekatalog (<i>%s</i>)" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/callable_obj.c:393 +msgid "yesterday at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:395 +msgid "%A at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:399 +msgid "%x at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -104,7 +111,7 @@ msgstr "" "\n" "Fejl opstod mens afspilningsenhed blev åbnet" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -114,7 +121,7 @@ msgstr "" "\n" "Fejl opstod mens optageenhed blev åbnet" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -124,43 +131,43 @@ msgstr "" "\n" "PulseAudio er tilgængelig" -#: ../sflphone-client-gnome/src/mainwindow.c:73 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "Et igangværende opkald eksisterer" -#: ../sflphone-client-gnome/src/mainwindow.c:77 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Igangværende opkald eksisterer" -#: ../sflphone-client-gnome/src/mainwindow.c:86 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Ønsker du stadig at afslutte" -#: ../sflphone-client-gnome/src/mainwindow.c:298 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "SFLphone fejl" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP er ikke understøttet af modtageren %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:393 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Sikker kommunikation ikke tilgængelig" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Fortsæt" -#: ../sflphone-client-gnome/src/mainwindow.c:395 -#: ../sflphone-client-gnome/src/mainwindow.c:417 -#: ../sflphone-client-gnome/src/mainwindow.c:431 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Afslut opkald" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -170,11 +177,11 @@ msgstr "" "tilstand.\n" "Den præcise årsag: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "ZRTP-forhandling mislykkedes" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -183,50 +190,50 @@ msgstr "" "%s ønsker at afslutte brugen af sikker kommunikation. Ved at godkende vil " "samtalen fortætte uden SRTP\n" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Godkend sikkerhedsændring" -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Godkend" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s konto : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>Fra</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d indtalt besked" msgstr[1] "%d indtalte beskeder" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Kalder op med %s konto <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Nuværende konto" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Du har ingen oprettede konti" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Du har ingen registrerede konti" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -235,520 +242,554 @@ msgstr "" "<i>Med:</i> %s \n" "benyttende %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s understøtter ikke ZRTP." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "ZRTP forhandling mislykkedes med %s" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>Med:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Højtaler lydstyrke" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Mikrofon lydstyrke" -#: ../sflphone-client-gnome/src/statusicon.c:96 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "_Vis hovedvindue" -#: ../sflphone-client-gnome/src/statusicon.c:131 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 +msgid "_Hang up" +msgstr "_Læg på" + +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:132 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format -msgid "%i account configured" -msgid_plural "%i accounts configured" -msgstr[0] "%i konto oprettet" -msgstr[1] "%i konti oprettet" - -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:693 -#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "%i active account" +msgid_plural "%i active accounts" +msgstr[0] "" +msgstr[1] "" + +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Talebesked" -#: ../sflphone-client-gnome/src/uimanager.c:117 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" -msgstr "" +msgstr "Ingen adressebog er valgt" -#: ../sflphone-client-gnome/src/uimanager.c:137 -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Adressebog" -#: ../sflphone-client-gnome/src/uimanager.c:279 +#: ../sflphone-client-gnome/src/uimanager.c:338 +#, c-format msgid "Voicemail (%i)" msgstr "Talebesked" -#: ../sflphone-client-gnome/src/uimanager.c:342 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone er en VoIP-klient kompatibel med SIP og IAX2 protokoller" -#: ../sflphone-client-gnome/src/uimanager.c:345 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "Om SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:719 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "Afslut opkald" -#: ../sflphone-client-gnome/src/uimanager.c:720 -#: ../sflphone-client-gnome/src/uimanager.c:1184 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Nyt opkald" -#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" -msgstr "" +msgstr "Lav et nyt opkald" -#: ../sflphone-client-gnome/src/uimanager.c:721 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Svar" -#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:722 -#: ../sflphone-client-gnome/src/uimanager.c:991 -#: ../sflphone-client-gnome/src/uimanager.c:1032 -msgid "_Hang up" -msgstr "_Læg på" +msgstr "Besvar opkaldet" -#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" -msgstr "" +msgstr "Afslut opkaldet" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "I _venteposition" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" -msgstr "" +msgstr "Sæt opkaldet i venteposition" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" -msgstr "" +msgstr "F_jern fra venteposition" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:725 -#: ../sflphone-client-gnome/src/uimanager.c:1015 -msgid "_Record" -msgstr "_Optag" - -#: ../sflphone-client-gnome/src/uimanager.c:725 -msgid "Record the current conversation" -msgstr "" +msgstr "Fjern opkaldet fra venteposition" -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "Konfigurationsfil" -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Stun konfigureringsfejl" -#: ../sflphone-client-gnome/src/uimanager.c:727 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d indtalt besked" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" -msgstr "" +msgstr "_Luk" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" -msgstr "" +msgstr "Minimere til systembakken" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" -msgstr "" +msgstr "_Afslut" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" -msgstr "" +msgstr "Afslut programmet" -#: ../sflphone-client-gnome/src/uimanager.c:732 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" -msgstr "" +msgstr "_Rediger" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" -msgstr "" +msgstr "_Kopier" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" -msgstr "" +msgstr "Kopier det valgte" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" -msgstr "" +msgstr "Inds_æt" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" -msgstr "" +msgstr "Indsæt indholdet af udklipsholderen" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Opkaldshistorik" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Opkaldshistorik" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "Konti" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Nuværende konto" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Indstillinger" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" -msgstr "" +msgstr "Ændr dine indstillinger" -#: ../sflphone-client-gnome/src/uimanager.c:740 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" -msgstr "" +msgstr "_Vis" -#: ../sflphone-client-gnome/src/uimanager.c:743 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" -msgstr "_Hjem" +msgstr "_Hjælp" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Fortsæt" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" -msgstr "" +msgstr "Åbn manualen" -#: ../sflphone-client-gnome/src/uimanager.c:745 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "Godkendelse" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" -msgstr "" +msgstr "_Overfør" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" -msgstr "" +msgstr "Overfør opkaldet" + +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 +msgid "_Record" +msgstr "_Optag" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:869 +msgid "Record the current conversation" +msgstr "Optag den aktuelle samtale" + +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" -msgstr "" +msgstr "_Vis værktøjslinie" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" -msgstr "" +msgstr "Vis værktøjslinien" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" -msgstr "Deaktiveret" +msgstr "_Nummertastatur" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" -msgstr "" +msgstr "Vis nummertastaturet" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" -msgstr "" +msgstr "Vis _lydstyrke indstillinger" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" -msgstr "" +msgstr "Vis lydstyrke indstillingerne" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Opkaldshistorik" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Opkaldshistorik" -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Adressebog" -#: ../sflphone-client-gnome/src/uimanager.c:1003 -#: ../sflphone-client-gnome/src/uimanager.c:1044 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "I _venteposition" -#: ../sflphone-client-gnome/src/uimanager.c:1107 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "_Besvar opkald" -#: ../sflphone-client-gnome/src/uimanager.c:1258 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Ændre telefonnummer" -#: ../sflphone-client-gnome/src/uimanager.c:1269 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Ændre telefonnummeret før opkald" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Kontoparametre" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 -#: ../sflphone-client-gnome/src/config/assistant.c:314 -#: ../sflphone-client-gnome/src/config/assistant.c:427 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protokol" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Ukendt" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:322 -#: ../sflphone-client-gnome/src/config/assistant.c:435 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "_Værtsnavn" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 -#: ../sflphone-client-gnome/src/config/assistant.c:330 -#: ../sflphone-client-gnome/src/config/assistant.c:443 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "_Brugernavn" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 -#: ../sflphone-client-gnome/src/config/assistant.c:346 -#: ../sflphone-client-gnome/src/config/assistant.c:458 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Adgangskode" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 -#: ../sflphone-client-gnome/src/config/assistant.c:363 -#: ../sflphone-client-gnome/src/config/assistant.c:473 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Adgangskode" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 -#: ../sflphone-client-gnome/src/config/assistant.c:368 -#: ../sflphone-client-gnome/src/config/assistant.c:478 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "_Nummer for talebesked" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 +msgid "_User-agent" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Godkendelse" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Hemmelig" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Legitimationsoplysning" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Godkendelsesnavn" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Adgangskode" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Sikkerhed" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "Benyt TLS transport (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "SRTP-nøgleudveksling" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Deaktiveret" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949 msgid "Registration" msgstr "Registrering" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953 msgid "Registration expire" msgstr "Forældelse af registrering" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962 msgid "_Comply with RFC 3263" msgstr "_Overhold RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981 msgid "Network Interface" msgstr "Netværk kan ikke nås" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994 msgid "Local address" msgstr "Lokal adresse" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061 msgid "Local port" msgstr "Lokal port" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131 msgid "Published address" msgstr "Offentliggjort adresse" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102 msgid "Using STUN" -msgstr "Ved brug af STUN " +msgstr "Ved brug af STUN" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109 msgid "STUN server URL" msgstr "STUN serveradresse" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117 msgid "Same as local parameters" msgstr "Samme som lokale parametre" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120 msgid "Set published address and port:" msgstr "Konfigurer offentliggjort adresse og port:" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140 msgid "Published port" msgstr "Offentliggjort port" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 +msgid "Codecs" +msgstr "Codecs" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 +msgid "DTMF" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 +msgid "RTP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 +msgid "SIP" +msgstr "SIP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Kontoindstillinger" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Grundlæggende" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" -msgstr "Advanceret" +msgstr "Avanceret" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 +msgid "Network" +msgstr "Netværk" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 +msgid "" +"This profile is used when you want to reach a remote peer simply by typing a " +"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " +"also be used if no account can be matched to an incoming or outgoing call." +msgstr "" +"Denne profil benyttes når du ønsker at kontakte en ekstern peer ved blot at " +"indtaste en sip-adresse såsom <b>sip:eksternpeer</b>. De indstillinger som " +"du definerer her vil også benyttes hvis ingen konto kan tilknyttes et " +"indgående eller udgående opkald." + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 +#, c-format msgid "Server returned \"%s\" (%d)" msgstr "Server svarede \"" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protokol" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Status" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Konti" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Oprettede konti" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 +#, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" -msgstr[0] " aktiv konto" -msgstr[1] " aktiv konto" +msgstr[0] "aktiv konto" +msgstr[1] "aktiv konto" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "Der er ingen aktive konti" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Generelt" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Benyt Evolution adressekartotek" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Download begrænsning :" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "kort" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "Vis _kontaktbillede hvis tilgængeligt" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Felter fra Evolutions adressekartotek" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Arbejde" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Hjem" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Mobil" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Adressekartoteker" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Vælg hvilke af Evolutions adressekartoteker skal benyttes" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:577 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Navn" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "Denne vejledning er nu fuldført" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -756,318 +797,321 @@ msgstr "" "Du kan til enhver tid undersøge din registrering eller ændre dine kontis " "parametre i vinduet Indstillinger/Konti" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Server" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Brugernavn" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Sikkerhed: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Ingen" -#: ../sflphone-client-gnome/src/config/assistant.c:229 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "SFLphone-guiden til oprettelse af konto" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Velkommen til kontooperettelsesvejledning for SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" "Denne installeringsvejledning vil hjælpe dig med at konfigurere en konto" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "VoIP protokoller" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Vælg en kontotype" -#: ../sflphone-client-gnome/src/config/assistant.c:272 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Vælg en af følgende indstillinger" -#: ../sflphone-client-gnome/src/config/assistant.c:290 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Opret en gratis SIP/IAX2 konto hos sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:292 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Registrer en eksisterende SIP eller IAX2 konto" -#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "SIP kontoindstillinger" -#: ../sflphone-client-gnome/src/config/assistant.c:306 -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Udfyld venligst følgende information" -#: ../sflphone-client-gnome/src/config/assistant.c:376 -#: ../sflphone-client-gnome/src/config/assistant.c:405 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Sikker kommunikation med _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Valgfri emailadresse" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "Denne emailadresse vil blive brugt til at sende dig indtalte beskeder" -#: ../sflphone-client-gnome/src/config/assistant.c:397 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_Emailadresse" -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "IAX2 kontoindstillinger" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "Du opfordres til at aktivere dette hvis du er bag en firewall" -#: ../sflphone-client-gnome/src/config/assistant.c:505 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "_Benyt STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:512 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_STUN server" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Kontoregistrering" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Tillykke!" -#: ../sflphone-client-gnome/src/config/audioconf.c:582 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frekvens" -#: ../sflphone-client-gnome/src/config/audioconf.c:587 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Bithastighed" -#: ../sflphone-client-gnome/src/config/audioconf.c:592 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Båndbredde" -#: ../sflphone-client-gnome/src/config/audioconf.c:670 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "ALSA plugin" -#: ../sflphone-client-gnome/src/config/audioconf.c:692 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Uddata" -#: ../sflphone-client-gnome/src/config/audioconf.c:714 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Inddata" -#: ../sflphone-client-gnome/src/config/audioconf.c:749 -msgid "_Voice Activity Detection" -msgstr "_Detektering af taleaktivitet" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Ringetoner" -#: ../sflphone-client-gnome/src/config/audioconf.c:759 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "_Støjreducering (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:800 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Lydhåndtering" -#: ../sflphone-client-gnome/src/config/audioconf.c:809 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_PulseAudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:819 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "ALSA indstillinger" -#: ../sflphone-client-gnome/src/config/audioconf.c:836 -msgid "Codecs" -msgstr "Codecs" - -#: ../sflphone-client-gnome/src/config/audioconf.c:865 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Optagelser" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Destinationsmappe" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Vælg en mappe" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Ringetoner" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "Aktiver _ringetoner" -#: ../sflphone-client-gnome/src/config/audioconf.c:891 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Vælg en ringetone" -#: ../sflphone-client-gnome/src/config/audioconf.c:897 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Lydfiler" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Kontoindstillinger" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "Adresseargument" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Brugerdefinerede kommandoer ved indgående opkald med webadresse" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s vil blive erstattet med den givne webadresse." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Udløse ved specifik _SIP protokolhoved" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Udløse ved _IAX2 webadresse" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "Kommando som skal _kaldes" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Omskrivning af telefonnummer" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "_Præfiks for indtastede numre" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 -msgid "" -"This profile is used when you want to reach a remote peer simply by typing a " -"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " -"also be used if no account can be matched to an incoming or outgoing call." -msgstr "" -"Denne profil benyttes når du ønsker at kontakte en ekstern peer ved blot at " -"indtaste en sip-adresse såsom <b>sip:eksternpeer</b>. De indstillinger som " -"du definerer her vil også benyttes hvis ingen konto kan tilknyttes et " -"indgående eller udgående opkald." - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Meddelelser" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "_Aktiver meddelelser" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Systembakke-ikon" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 +msgid "Show SFLphone in the system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "_Vis hovedvindue ved indgående opkald" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "Aldrig _pop-op hovedvindue" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "Skjul SFLphone vinduet ved _start" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Opkaldshistorik" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "_Gem min historik i mindst" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "dage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Indstillinger" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Adressebog" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Hooks" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 -msgid "Direct IP calls" -msgstr "Direkte IP opkald" +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 +msgid "Shortcuts" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 +msgid "Be careful: these shortcuts might override system-wide shortcuts." +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "Advancerede indstillinger for TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "TLS transport" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1080,136 +1124,170 @@ msgstr "" "TLS transporter for de enkelte konti. Bemærk dog at de hver vil benytte\n" "en dedikeret port forskellig fra hinanden.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 +msgid "Global TLS listener (all accounts)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "Autoritetscertifikatsliste" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "Vælg en fil med en autoritetscertifikatsliste (valgfri)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "Offentlig endpoint certifikatsfil" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "Vælg et offentligt endpoint-certifikat (valgfri)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "Vælg en privat nøglefil (valgfri)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "Adgangskode for den private nøgle" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "TLS protokolmetode" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "TLS cifferliste" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "Server navneinstans for udgående TLS forbindelse" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "Forhandlingstimeout" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "Udfør kontrol af indgående certifikater, som en server" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "Udfør kontrol af certifikater fra svar, som en klient" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "Kræv certifikat for indgående TLS forbindelser" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 msgid "ZRTP Options" msgstr "ZRTP indstillinger" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "Send Hello Hash in S_DP" msgstr "Send \"Hello Hash\" i S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Ask User to Confirm SAS" msgstr "_Spørg bruger om at godkende SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 msgid "_Warn if ZRTP not supported" msgstr "_Advar hvis ZRTP ikke understøttes" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 msgid "Display SAS once for hold events" msgstr "_Vis SAS en enkelt gang for vente-hændelser" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Søg alle" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Klik her for at ændre søgningstypen" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Søg i ubesvarede opkald" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Søg i indgående opkald" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Søg i udgående opkald" -#~ msgid "IP call - %s" -#~ msgstr "IP opkald - %s" +#~ msgid "_Voice Activity Detection" +#~ msgstr "_Detektering af taleaktivitet" + +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "_Støjreducering (Narrow-Band Companding)" + +#~ msgid "SIP Port" +#~ msgstr "SIP Port" #~ msgid "Codec" #~ msgstr "Kodning" -#~ msgid "Network" -#~ msgstr "Netværk" - -#~ msgid "Manually" -#~ msgstr "Manuelt" +#~ msgid "%i account configured" +#~ msgid_plural "%i accounts configured" +#~ msgstr[0] "%i konto oprettet" +#~ msgstr[1] "%i konti oprettet" #~ msgid "There " #~ msgstr "Der " -#~ msgid "is " -#~ msgstr "er " +#~ msgid "Manually" +#~ msgstr "Manuelt" + +#~ msgid "s" +#~ msgstr "s" #~ msgid "are " #~ msgstr "er " -#~ msgid "s" -#~ msgstr "s" +#~ msgid "is " +#~ msgstr "er " #~ msgid "_Mute other applications during a call" #~ msgstr "_Dæmp andre programmer ved opkald" -#~ msgid "SIP Port" -#~ msgstr "SIP Port" +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Aktiver _talebeskedsmeddelelser" #~ msgid "UDP Transport" #~ msgstr "UDP transport" -#~ msgid "Enable voicemail _notifications" -#~ msgstr "Aktiver _talebeskedsmeddelelser" +#~ msgid "Direct IP calls" +#~ msgstr "Direkte IP opkald" + +#~ msgid "IP call - %s" +#~ msgstr "IP opkald - %s" + +#~ msgid "" +#~ "<b>Error: No audio codecs found.\n" +#~ "\n" +#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>." +#~ "sflphone</b> directory in your home( <i>%s</i> )" +#~ msgstr "" +#~ "<b>Fejl: Ingen audio-codec fundet\n" +#~ "\n" +#~ "</b>SFL audio-codecs skal installeres i <i>%s</i> eller i mappen <b>." +#~ "sflphone</b> i dit hjemmekatalog (<i>%s</i>)" #~ msgid "Store SIP credentials as MD5 hash" #~ msgstr "Gem SIP-legitimationsoplysninger som _MD5-hash-værdi" diff --git a/sflphone-client-gnome/po/de/de.po b/sflphone-client-gnome/po/de/de.po index ca1afd15a4..1ef5bedaa9 100644 --- a/sflphone-client-gnome/po/de/de.po +++ b/sflphone-client-gnome/po/de/de.po @@ -7,68 +7,72 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-03 10:22-0500\n" -"PO-Revision-Date: 2009-10-26 20:46+0000\n" -"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-04-03 16:49+0000\n" +"Last-Translator: Jakob Kramer <Unknown>\n" "Language-Team: SavoirFaire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:175 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registriert" -#: ../sflphone-client-gnome/src/accountlist.c:178 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Nicht registriert" -#: ../sflphone-client-gnome/src/accountlist.c:181 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Am versuchen..." -#: ../sflphone-client-gnome/src/accountlist.c:184 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Fehler" -#: ../sflphone-client-gnome/src/accountlist.c:187 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Authentifizierung fehlgeschlagen" -#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Kein netzwerk" -#: ../sflphone-client-gnome/src/accountlist.c:193 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Host unerreichbar" -#: ../sflphone-client-gnome/src/accountlist.c:196 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Stun: Konfigurationsfehler" -#: ../sflphone-client-gnome/src/accountlist.c:199 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Ungültiger Stun server" -#: ../sflphone-client-gnome/src/accountlist.c:202 +#: ../sflphone-client-gnome/src/accountlist.c:208 +msgid "Ready" +msgstr "" + +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Ungültig" -#: ../sflphone-client-gnome/src/actions.c:98 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Mit Konto" -#: ../sflphone-client-gnome/src/actions.c:104 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Kein registriertes Konto" -#: ../sflphone-client-gnome/src/actions.c:285 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -76,25 +80,28 @@ msgstr "" "SFLphone Server kann nicht verbunden werden. Stellen Sie sicher, dass der " "Dämon läuft." -#: ../sflphone-client-gnome/src/actions.c:589 -#: ../sflphone-client-gnome/src/actions.c:911 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" +msgstr "Direkter SIP-Anruf" + +#: ../sflphone-client-gnome/src/callable_obj.c:390 +msgid "today at %R" +msgstr "heute um %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:393 +msgid "yesterday at %R" +msgstr "gestern um %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:395 +msgid "%A at %R" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1103 -#, c-format -msgid "" -"<b>Error: No audio codecs found.\n" -"\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" +#: ../sflphone-client-gnome/src/callable_obj.c:399 +msgid "%x at %R" msgstr "" -"<b>Fehler: Kein Audio-Codec gefunden.\n" -"\n" -"</b> SFL Audio-Codecs müssen in <i>%s</i> oder <b>.sflphone</b> Ihres HOME-" -"Verzeichniss ( <i>%s</i> ) gespeichert werden." -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -104,7 +111,7 @@ msgstr "" "\n" "Fehler während Öffnen des \"playback device\"" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -114,7 +121,7 @@ msgstr "" "\n" "Fehler während Öffnen des \"capture device\"" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -124,625 +131,660 @@ msgstr "" "\n" "Pulseaudio nicht gestartet" -#: ../sflphone-client-gnome/src/mainwindow.c:73 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "Laufender Anruf." -#: ../sflphone-client-gnome/src/mainwindow.c:77 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Laufende Anrufe." -#: ../sflphone-client-gnome/src/mainwindow.c:86 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Bitte bestätigen, dass Sie die Anwendung beenden möchten" -#: ../sflphone-client-gnome/src/mainwindow.c:298 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "SFLphone Fehler" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" -msgstr "" +msgstr "ZRTP wird vom Nutzer %s nicht unterstützt\n" -#: ../sflphone-client-gnome/src/mainwindow.c:393 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Sichere Verbindung nicht verfügbar" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Weiter" -#: ../sflphone-client-gnome/src/mainwindow.c:395 -#: ../sflphone-client-gnome/src/mainwindow.c:417 -#: ../sflphone-client-gnome/src/mainwindow.c:431 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Anruf beenden" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" +"Ein %s Fehler verhinderte die Verschlüsselung des Telefonats mit %s.\n" +"Genauer Grund: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" -msgstr "" +msgstr "ZRTP Übertragung fehlgeschlagen" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" +"%s will die sichere Kommunikation beenden. Das Gespräch wird dann ohne SRTP " +"fortgesetzt.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Bestätigen" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "Konto %s : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>Von</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d Voice Nachricht" msgstr[1] "%d Voice Nachricht" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Mit %s Konto <i>%s</i> anrufen" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Aktuelles Konto" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Sie haben noch kein Konto eingestellt" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Sie haben noch kein registriertes Konto" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" +"<i>Mit:</i> %s \n" +"unter Verwendung von %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." -msgstr "" +msgstr "%s unterstützt ZRTP nicht." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" -msgstr "" +msgstr "ZRTP-Übertragung mit %s schlug fehl" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>Mit:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Lautsprecher Lautstärke" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Mikro Lautstärke" -#: ../sflphone-client-gnome/src/statusicon.c:96 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "_Hauptfenster anzeigen" -#: ../sflphone-client-gnome/src/statusicon.c:131 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 +msgid "_Hang up" +msgstr "A_uflegen" + +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:132 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format -msgid "%i account configured" -msgid_plural "%i accounts configured" -msgstr[0] "%i Konto konfiguriert" -msgstr[1] "%i Konten konfiguriert" - -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:693 -#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "%i active account" +msgid_plural "%i active accounts" +msgstr[0] "%i aktiver Account" +msgstr[1] "%i aktive Accounts" + +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Voicemail" -#: ../sflphone-client-gnome/src/uimanager.c:117 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Adressbuch" -#: ../sflphone-client-gnome/src/uimanager.c:137 -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Adressbuch" -#: ../sflphone-client-gnome/src/uimanager.c:279 +#: ../sflphone-client-gnome/src/uimanager.c:338 +#, c-format msgid "Voicemail (%i)" msgstr "Voicemail (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:342 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone ist ein VoIP Client (kompatibel mit SIP und IAX2 Protokolle)" -#: ../sflphone-client-gnome/src/uimanager.c:345 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "Über SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:719 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "_Anruf" -#: ../sflphone-client-gnome/src/uimanager.c:720 -#: ../sflphone-client-gnome/src/uimanager.c:1184 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Neuer Anruf" -#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" -msgstr "" +msgstr "Einen neuen Anruf tätigen" -#: ../sflphone-client-gnome/src/uimanager.c:721 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Abnehmen" -#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" -msgstr "" +msgstr "Auf den Anruf antworten" -#: ../sflphone-client-gnome/src/uimanager.c:722 -#: ../sflphone-client-gnome/src/uimanager.c:991 -#: ../sflphone-client-gnome/src/uimanager.c:1032 -msgid "_Hang up" -msgstr "A_uflegen" - -#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" -msgstr "" +msgstr "Den Anruf beenden" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "in _Warteschleife" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:725 -#: ../sflphone-client-gnome/src/uimanager.c:1015 -msgid "_Record" -msgstr "_Gespräch aufzeichnen" - -#: ../sflphone-client-gnome/src/uimanager.c:725 -msgid "Record the current conversation" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "Einrichtungsdatei" -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Stun: Konfigurationsfehler" -#: ../sflphone-client-gnome/src/uimanager.c:727 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d Voice Nachricht" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" -msgstr "_Editieren" +msgstr "_Beenden" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" -msgstr "" +msgstr "Das Programm beenden" -#: ../sflphone-client-gnome/src/uimanager.c:732 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Editieren" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Entfernen Sie das ausgewählte Konto" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Liste der vorherigen Anrufen _leeren" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Vorherigen Anrufen leeren" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Konten" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Aktuelles Konto" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Einstellungen" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" -msgstr "" +msgstr "Ihre Einstellungen ändern" -#: ../sflphone-client-gnome/src/uimanager.c:740 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Anzeigen" -#: ../sflphone-client-gnome/src/uimanager.c:743 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Hilfe" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Weiter" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:745 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "Authentifizierung" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Weiterleiten" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" -msgstr "Weiterleiten zu : " +msgstr "Weiterleiten zu :" + +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 +msgid "_Record" +msgstr "_Gespräch aufzeichnen" + +#: ../sflphone-client-gnome/src/uimanager.c:869 +msgid "Record the current conversation" +msgstr "Das momentane Gespräch aufnehmen" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" -msgstr "" +msgstr "_Zeige Werkzeugleiste" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "_Wählscheibe" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "Lautstärke-Regler anzeigen" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Lautstärke-Regler anzeigen" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Vorherige Anrufe" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Liste der vorherigen Anrufen" -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Adressbuch" -#: ../sflphone-client-gnome/src/uimanager.c:1003 -#: ../sflphone-client-gnome/src/uimanager.c:1044 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "in _Warteschleife" -#: ../sflphone-client-gnome/src/uimanager.c:1107 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "_Zurückrufen" -#: ../sflphone-client-gnome/src/uimanager.c:1258 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Nummer editieren" -#: ../sflphone-client-gnome/src/uimanager.c:1269 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Nummer vor dem Anruf editieren" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Konto parameter" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 -#: ../sflphone-client-gnome/src/config/assistant.c:314 -#: ../sflphone-client-gnome/src/config/assistant.c:427 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protokoll" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Unbekannt" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:322 -#: ../sflphone-client-gnome/src/config/assistant.c:435 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "_Hostname" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 -#: ../sflphone-client-gnome/src/config/assistant.c:330 -#: ../sflphone-client-gnome/src/config/assistant.c:443 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "_Benutzername" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 -#: ../sflphone-client-gnome/src/config/assistant.c:346 -#: ../sflphone-client-gnome/src/config/assistant.c:458 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Passwort" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 -#: ../sflphone-client-gnome/src/config/assistant.c:363 -#: ../sflphone-client-gnome/src/config/assistant.c:473 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Passwort" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 -#: ../sflphone-client-gnome/src/config/assistant.c:368 -#: ../sflphone-client-gnome/src/config/assistant.c:478 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "_Voicemail Nummer" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 +msgid "_User-agent" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Authentifizierung" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Geheim" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Authentifizierung Name" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Passwort" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Sicherheit" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Deaktiviert" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949 msgid "Registration" msgstr "Anmeldung" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953 msgid "Registration expire" -msgstr "" +msgstr "Registrierung erwartet" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981 msgid "Network Interface" msgstr "Kein netzwerk" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994 msgid "Local address" msgstr "Adresse (lokal)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061 msgid "Local port" msgstr "Port (lokal)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131 msgid "Published address" -msgstr "" +msgstr "Veröffentlichte Adresse" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102 msgid "Using STUN" -msgstr "" +msgstr "STUN verwenden" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109 msgid "STUN server URL" -msgstr "" +msgstr "STUN Server URL" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117 msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120 msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140 msgid "Published port" +msgstr "Veröffentlichter Port" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 +msgid "Codecs" +msgstr "Codecs" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 +msgid "DTMF" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 +msgid "RTP" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 +msgid "SIP" +msgstr "SIP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Kontoeinstellungen" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Allgemein" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Erweitert" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 +msgid "Network" +msgstr "Netzwerk" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 +msgid "" +"This profile is used when you want to reach a remote peer simply by typing a " +"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " +"also be used if no account can be matched to an incoming or outgoing call." +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protokoll" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Status" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Konten" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Konfigurierten Konten" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 +#, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" -msgstr[0] " aktive Konten" -msgstr[1] " aktive Konten" +msgstr[0] "aktive Konten" +msgstr[1] "aktive Konten" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "Sie haben kein aktives Konto" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Allgemein" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "Addressbuch von Evolution verwenden" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Herunterladen Grenze :" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "Karten" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "Wenn verfügbar, _Bild anzeigen" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Felder vom Evolution Adressbuch" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Arbeit" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Heim" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Handy" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Adressbücher" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Adressbücher von Evolution zum verwenden auswählen" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:577 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Name" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "Assistent beendet." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -750,315 +792,322 @@ msgstr "" "Sie können jederzeit Ihres Registrierungsstatus überprüfen oder " "IhreKontoparameter ändern (Optionen/Konten)." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Server" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Benutzername" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Sicherheit: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Nichts" -#: ../sflphone-client-gnome/src/config/assistant.c:229 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "SFLphone Konto (Konfigurationsassistent)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Wilkommen zu SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "" "The Installationsassistent wird Ihnen helfen, ein Konto zu konfigurieren." -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "VoIP Protokoll" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Kontotyp auswählen" -#: ../sflphone-client-gnome/src/config/assistant.c:272 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterisk Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Bitte eine Option auswählen" -#: ../sflphone-client-gnome/src/config/assistant.c:290 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "SIP/IAX2 Konto bei sflphone.org erstellen lassen" -#: ../sflphone-client-gnome/src/config/assistant.c:292 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Existierendes SIP/IAX2 Konto registrieren" -#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Konfiguration des SIP Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:306 -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Folgende Informationen bitte ausfühlen" -#: ../sflphone-client-gnome/src/config/assistant.c:376 -#: ../sflphone-client-gnome/src/config/assistant.c:405 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Sichere Kommunikation mit _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Fakultative E-mail-Adresse" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" "Diese E-mail-Adresse wird benutzt, um Ihnen voicemail Meldungen zu schicken." -#: ../sflphone-client-gnome/src/config/assistant.c:397 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_Email" -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Konfiguration des IAX2 Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "Sie sollten dieses einschalten, falls Sie hinter einer Firewall sind." -#: ../sflphone-client-gnome/src/config/assistant.c:505 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "STUN Ei_nschalten" -#: ../sflphone-client-gnome/src/config/assistant.c:512 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_STUN Server" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Konto Registrierung" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Gratulation!" -#: ../sflphone-client-gnome/src/config/audioconf.c:582 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frequenz" -#: ../sflphone-client-gnome/src/config/audioconf.c:587 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-client-gnome/src/config/audioconf.c:592 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Bandbreite" -#: ../sflphone-client-gnome/src/config/audioconf.c:670 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "ALSA Plugin" -#: ../sflphone-client-gnome/src/config/audioconf.c:692 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Ausgabe" -#: ../sflphone-client-gnome/src/config/audioconf.c:714 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Eingabe" -#: ../sflphone-client-gnome/src/config/audioconf.c:749 -msgid "_Voice Activity Detection" -msgstr "\"Voice Activity\" Erkennung" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Klingeltöne" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:759 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "_Geräuschreduzierung (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:800 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Sound Manager" -#: ../sflphone-client-gnome/src/config/audioconf.c:809 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:819 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "ALSA Konfiguration" -#: ../sflphone-client-gnome/src/config/audioconf.c:836 -msgid "Codecs" -msgstr "Codecs" - -#: ../sflphone-client-gnome/src/config/audioconf.c:865 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Aufnahmen" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Zielverzeichnis" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Verzeichnis auswählen" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Klingeltöne" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "Klingeltöne _einschalten" -#: ../sflphone-client-gnome/src/config/audioconf.c:891 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Klingelton auswählen" -#: ../sflphone-client-gnome/src/config/audioconf.c:897 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Audio Dateien" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Kontoeinstellungen" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "URL Argument" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Spezielle Befehle bei eingehender Anrufen mit URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s wird mit gegebener URL ersetzt." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Bewirkung beim spezifischen _SIP Header" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Bewirkung bei _IAX2 URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "Befehl _auszuführen" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Telefonnummer umformen" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "_Präfix vor Nummern einfügen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 -msgid "" -"This profile is used when you want to reach a remote peer simply by typing a " -"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " -"also be used if no account can be matched to an incoming or outgoing call." -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Desktopbenachrichtigungen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "Benachrichtigungen _einschalten" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Benachrichtigungsfeld (\"System Tray\") Icon" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 +msgid "Show SFLphone in the system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "Hauptfenster anzeigen wenn eingehendes Gespräch" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "_Hauptfenster nie anzeigen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "_Unsichtbar beim Start" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Liste der vorherigen Anrufen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "Tage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Einstellungen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Adressbuch" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Hooks" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 -msgid "Direct IP calls" +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 +msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 -msgid "Advanced options for TLS" +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 +msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 +msgid "Advanced options for TLS" +msgstr "Erweiterte Optionen für TLS" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" -msgstr "" +msgstr "TLS Transport" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1067,133 +1116,118 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 +msgid "Global TLS listener (all accounts)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" -msgstr "" +msgstr "TLS-Protokol-Methode" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" -msgstr "" +msgstr "Bestätige eingehende Zertifikate als einen Server" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" -msgstr "" +msgstr "Bestätige eingehende Zertifikate als einen Client" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" -msgstr "" +msgstr "Benötige Zertifikat für eingehende TLS-Verbindungen" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 msgid "ZRTP Options" msgstr "ZRTP Optionen" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Ask User to Confirm SAS" -msgstr "" +msgstr "Den Benutzer bitten, SAS zu bestätigen" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 msgid "_Warn if ZRTP not supported" msgstr "_Warnung wenn ZRTP nicht unterstüzt" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "SDES Optionen" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Suche alle" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Klicken Sie hier, um Suchtyp zu wechseln" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Suche nach Anruf in Abwesenheit" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Suche nach eingehenden Anruf" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Suche nach ausgehenden Anru" -#~ msgid "IP call - %s" -#~ msgstr "IP Anruf - %s" - -#~ msgid "Codec" -#~ msgstr "Codec" - -#~ msgid "Network" -#~ msgstr "Netzwerk" - -#~ msgid "Manually" -#~ msgstr "Manuell" - -#~ msgid "There " -#~ msgstr "Es " - -#~ msgid "is " -#~ msgstr "gibt " - -#~ msgid "are " -#~ msgstr "gibt " - -#~ msgid "_Mute other applications during a call" -#~ msgstr "_Während eines Anrufs andere Anwendungen stumm schalten" - -#~ msgid "SIP Port" -#~ msgstr "SIP Port" - -#~ msgid "UDP Transport" -#~ msgstr "UDP Transport" +#~ msgid "_Voice Activity Detection" +#~ msgstr "\"Voice Activity\" Erkennung" -#~ msgid "Enable voicemail _notifications" -#~ msgstr "_Benachrichtigung für Voice Nachrichten" +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "_Geräuschreduzierung (Narrow-Band Companding)" #~ msgctxt "account state" #~ msgid "Error" @@ -1231,6 +1265,9 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Default account" #~ msgstr "Default Konto" +#~ msgid "Codec" +#~ msgstr "Codec" + #~ msgid "SFLphone KDE Client" #~ msgstr "SFLphone KDE Client" @@ -1335,9 +1372,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Apply" #~ msgstr "übernehmen" -#~ msgid "SIP" -#~ msgstr "SIP" - #~ msgid "IAX" #~ msgstr "IAX" @@ -1410,6 +1444,9 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Connection" #~ msgstr "Anbindung" +#~ msgid "SIP Port" +#~ msgstr "SIP Port" + #~ msgid "Trigger on specific SIP header" #~ msgstr "Bewirkung beim spezifischen SIP Header" @@ -1435,26 +1472,70 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "Warnung: Anzahl Resultate überschreit definiertes Maximum" +#~ msgid "IP call - %s" +#~ msgstr "IP Anruf - %s" + +#~ msgid "" +#~ "<b>Error: No audio codecs found.\n" +#~ "\n" +#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>." +#~ "sflphone</b> directory in your home( <i>%s</i> )" +#~ msgstr "" +#~ "<b>Fehler: Kein Audio-Codec gefunden.\n" +#~ "\n" +#~ "</b> SFL Audio-Codecs müssen in <i>%s</i> oder <b>.sflphone</b> Ihres " +#~ "HOME-Verzeichniss ( <i>%s</i> ) gespeichert werden." + #~ msgid "%s - %s" #~ msgstr "%s - %s" +#~ msgid "%i account configured" +#~ msgid_plural "%i accounts configured" +#~ msgstr[0] "%i Konto konfiguriert" +#~ msgstr[1] "%i Konten konfiguriert" + #~ msgid "_Enable this account" #~ msgstr "_Einschalten" +#~ msgid "Enable voicemail _notifications" +#~ msgstr "_Benachrichtigung für Voice Nachrichten" + #~ msgid "PulseAudio sound server" #~ msgstr "PulseAudio Sound Server" +#~ msgid "_Mute other applications during a call" +#~ msgstr "_Während eines Anrufs andere Anwendungen stumm schalten" + #~ msgid "Port" #~ msgstr "Port" +#~ msgid "Manually" +#~ msgstr "Manuell" + +#~ msgid "There " +#~ msgstr "Es " + +#~ msgid "are " +#~ msgstr "gibt " + +#~ msgid "is " +#~ msgstr "gibt " + +#~ msgid "UDP Transport" +#~ msgstr "UDP Transport" + #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" #~ "Ihre Namen, ,Launchpad Contributions:,Maxime Chambreuil,Sven Werlen, ," -#~ "Launchpad Contributions:,Maxime Chambreuil,Sven Werlen,Sven Werlen" +#~ "Launchpad Contributions:,Maxime Chambreuil,Sven Werlen,Sven Werlen, ," +#~ "Launchpad Contributions:,Funatiker,Jakob Kramer,Jarosław Ogrodnik,Marcel " +#~ "Schmücker,Maxime Chambreuil,Michael Keppler,Sven Werlen,Sven Werlen" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" #~ "Ihre E-Mail-Adressen,,,maxime.chambreuil@gmail.com,,,,maxime." -#~ "chambreuil@gmail.com,,sven.werlen@gmail.com" +#~ "chambreuil@gmail.com,,sven.werlen@gmail.com,,,,,nobodythere@gmail.com," +#~ "versus666@hotmail.de,maxime.chambreuil@gmail.com,Bananeweizen@gmx.de,," +#~ "sven.werlen@gmail.com" diff --git a/sflphone-client-gnome/po/es/es.po b/sflphone-client-gnome/po/es/es.po index a40c09ce90..75d66eafa6 100644 --- a/sflphone-client-gnome/po/es/es.po +++ b/sflphone-client-gnome/po/es/es.po @@ -9,173 +9,180 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-03 10:22-0500\n" -"PO-Revision-Date: 2009-10-26 20:46+0000\n" -"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-06-17 16:12+0000\n" +"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:175 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registrado" -#: ../sflphone-client-gnome/src/accountlist.c:178 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "No registrado" -#: ../sflphone-client-gnome/src/accountlist.c:181 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Intentando..." -#: ../sflphone-client-gnome/src/accountlist.c:184 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Error" -#: ../sflphone-client-gnome/src/accountlist.c:187 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Falló la autenticación" -#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" -msgstr "Red Inaccesible" +msgstr "Red inaccesible" -#: ../sflphone-client-gnome/src/accountlist.c:193 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" -msgstr "_Parte del servidor" +msgstr "Servidor inaccesible" -#: ../sflphone-client-gnome/src/accountlist.c:196 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" -msgstr "Error de configuración Stun" +msgstr "Error de configuración de Stun" -#: ../sflphone-client-gnome/src/accountlist.c:199 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" -msgstr "Servidor stun inválido" +msgstr "Servidor Stun no válido" -#: ../sflphone-client-gnome/src/accountlist.c:202 +#: ../sflphone-client-gnome/src/accountlist.c:208 +msgid "Ready" +msgstr "Listo" + +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" -msgstr "Inválido" +msgstr "No válido" -#: ../sflphone-client-gnome/src/actions.c:98 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Usando la cuenta" -#: ../sflphone-client-gnome/src/actions.c:104 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" -msgstr "Ninguna cuenta registrada" +msgstr "No hay ninguna cuenta registrada" -#: ../sflphone-client-gnome/src/actions.c:285 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -"Incapaz de conectar con el servidor SFLphone.\n" -" Asegúrese que el demonio esté funcionando." +"No se pudo conectar con el servidor de SFLphone.\n" +"Asegúrese de que el demonio está en ejecución." -#: ../sflphone-client-gnome/src/actions.c:589 -#: ../sflphone-client-gnome/src/actions.c:911 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" -msgstr "Llamadas IP directas" +msgstr "Llamada SIP directa" -#: ../sflphone-client-gnome/src/actions.c:1103 -#, c-format -msgid "" -"<b>Error: No audio codecs found.\n" -"\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" -msgstr "" -"<b>Error: Codecs de audio no encontrados.\n" -"\n" -"</b> Los codecs de audio de SFLphone deben estar en <i>%s</i> o en el " -"directorio <b>.sflphone</b> de su carpeta personal( <i>%s</i> )" +#: ../sflphone-client-gnome/src/callable_obj.c:390 +msgid "today at %R" +msgstr "hoy a las %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:393 +msgid "yesterday at %R" +msgstr "ayer a las %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:395 +msgid "%A at %R" +msgstr "%A a las %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:399 +msgid "%x at %R" +msgstr "%x a las %R" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -"<b>Notificación ALSA</b>\n" +"Notificación ALSA\n" "\n" "Error al abrir el dispositivo de reproducción" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -"<b>Notificación ALSA</b>\n" +"Notificación ALSA\n" "\n" "Error al abrir el dispositivo de captura" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" -"<b>Notificación de Pulseaudio</b>\n" +"Notificación de Pulseaudio\n" "\n" "Pulseaudio no está funcionando" -#: ../sflphone-client-gnome/src/mainwindow.c:73 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." -msgstr "No hay llamada en curso" +msgstr "Hay una llamada en curso." -#: ../sflphone-client-gnome/src/mainwindow.c:77 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Hay llamadas en curso." -#: ../sflphone-client-gnome/src/mainwindow.c:86 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" -msgstr "Aún quiere salir ?" +msgstr "¿Aún quiere salir?" -#: ../sflphone-client-gnome/src/mainwindow.c:298 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" -msgstr "Error SFLphone" +msgstr "Error de SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" -msgstr "ZRTP no es compatible con %s\n" +msgstr "El nodo %s no soporta ZRTP\n" -#: ../sflphone-client-gnome/src/mainwindow.c:393 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Comunicación segura no disponible" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" -msgstr "Seguir" +msgstr "Continuar" -#: ../sflphone-client-gnome/src/mainwindow.c:395 -#: ../sflphone-client-gnome/src/mainwindow.c:417 -#: ../sflphone-client-gnome/src/mainwindow.c:431 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Terminar llamada" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -"Un error de %s obliga la llamada con %s a caer bajo un modo decifrado.\n" +"Un error de %s obliga a la llamada con %s a realizarse en modo no cifrado.\n" "Razón exacta: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" -msgstr "Negociación ZRTP fracasada" +msgstr "Falló la negociación ZRTP" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -184,50 +191,50 @@ msgstr "" "%s quiere parar la comunicación segura. Confirmar reanudará la conversación " "sin SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Confirmar" -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Confirmar" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s cuenta : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>De</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d mensaje de voz" msgstr[1] "%d mensajes de voz" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Llamando con la cuenta %s <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Cuenta actual" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" -msgstr "Ninguna cuenta configurada" +msgstr "No tiene configurada ninguna cuenta" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "No tiene ninguna cuenta registrada" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -236,520 +243,554 @@ msgstr "" "<i>Con:</i> %s\n" "usando %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." -msgstr "%s no es compatible con ZRTP." +msgstr "%s no soporta ZRTP" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" -msgstr "Negociación ZRTP fracasada con %s" +msgstr "La negociación ZRTP ha fracasado con %s" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>Con:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" -msgstr "Volumen de altavoces" +msgstr "Volumen de los altavoces" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Volumen del micrófono" -#: ../sflphone-client-gnome/src/statusicon.c:96 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" -msgstr "Mostrar ventana principal" +msgstr "Mostrar _ventana principal" + +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 +msgid "_Hang up" +msgstr "_Colgar" -#: ../sflphone-client-gnome/src/statusicon.c:131 +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:132 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format -msgid "%i account configured" -msgid_plural "%i accounts configured" -msgstr[0] "%i cuenta configurada" -msgstr[1] "%i cuentas configuradas" - -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:693 -#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "%i active account" +msgid_plural "%i active accounts" +msgstr[0] "%i cuenta activa" +msgstr[1] "%i cuentas activas" + +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Mensaje de voz" -#: ../sflphone-client-gnome/src/uimanager.c:117 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" -msgstr "Libreta de contactos" +msgstr "No se ha seleccionado ninguna libreta de direcciones" -#: ../sflphone-client-gnome/src/uimanager.c:137 -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" -msgstr "Libreta de contactos" +msgstr "Libreta de direcciones" -#: ../sflphone-client-gnome/src/uimanager.c:279 +#: ../sflphone-client-gnome/src/uimanager.c:338 +#, c-format msgid "Voicemail (%i)" msgstr "Mensaje de voz (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:342 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "SFLphone es un teléfono VoIP compatible con los protocolos SIP y IAX2" +msgstr "SFLphone es un cliente VoIP compatible con los protocolos SIP e IAX2" -#: ../sflphone-client-gnome/src/uimanager.c:345 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" -msgstr "Sobre SFLphone" +msgstr "Acerca de SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:719 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" -msgstr "_Llamar" +msgstr "Llamar" -#: ../sflphone-client-gnome/src/uimanager.c:720 -#: ../sflphone-client-gnome/src/uimanager.c:1184 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Nueva llamada" -#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" -msgstr "" +msgstr "Realizar un nuevo llamado" -#: ../sflphone-client-gnome/src/uimanager.c:721 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Descolgar" -#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:722 -#: ../sflphone-client-gnome/src/uimanager.c:991 -#: ../sflphone-client-gnome/src/uimanager.c:1032 -msgid "_Hang up" -msgstr "_Colgar" +msgstr "Responder el llamado" -#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" -msgstr "" +msgstr "Finalizar el llamado" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "En _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" -msgstr "" +msgstr "Poner el llamado en espera" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "Seguir" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" -msgstr "" +msgstr "Sacar el llamado de espera" -#: ../sflphone-client-gnome/src/uimanager.c:725 -#: ../sflphone-client-gnome/src/uimanager.c:1015 -msgid "_Record" -msgstr "G_rabar" - -#: ../sflphone-client-gnome/src/uimanager.c:725 -msgid "Record the current conversation" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "Archivo de configuración" -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Error de configuración Stun" -#: ../sflphone-client-gnome/src/uimanager.c:727 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d mensaje de voz" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" -msgstr "" +msgstr "_Cerrar" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" -msgstr "" +msgstr "Minimizar al área de notificación" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" -msgstr "_Editar" +msgstr "_Salir" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" -msgstr "" +msgstr "Salir del programa" -#: ../sflphone-client-gnome/src/uimanager.c:732 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Editar" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" -msgstr "" +msgstr "_Copiar" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Eliminar la cuenta seleccionada" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" -msgstr "" +msgstr "_Pegar" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" -msgstr "" +msgstr "Pegar el contenido del portapapeles" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "_Limpiar historial" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Limpiar historial" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Cuentas" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Cuenta actual" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Preferencias" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" -msgstr "" +msgstr "Cambiar sus preferencias" -#: ../sflphone-client-gnome/src/uimanager.c:740 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Ver" -#: ../sflphone-client-gnome/src/uimanager.c:743 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Ayuda" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Seguir" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" -msgstr "" +msgstr "Abrir el manual" -#: ../sflphone-client-gnome/src/uimanager.c:745 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "Autentificación" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Transferir" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" -msgstr "Transferir a : " +msgstr "Transferir a :" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 +msgid "_Record" +msgstr "G_rabar" + +#: ../sflphone-client-gnome/src/uimanager.c:869 +msgid "Record the current conversation" +msgstr "Grabar la conversación actual" + +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" -msgstr "" +msgstr "_Mostrar barra de herramientas" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" -msgstr "" +msgstr "Mostrar barra de herramientas" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" -msgstr "Desactivado" +msgstr "_Teclado" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" -msgstr "" +msgstr "Mostrar el teclado de marcado" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "_Controles de volumen" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "_Controles de volumen" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Historia de Llamada" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Historia de Llamada" -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Libreta de contactos" -#: ../sflphone-client-gnome/src/uimanager.c:1003 -#: ../sflphone-client-gnome/src/uimanager.c:1044 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "En _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:1107 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "_Llamar" -#: ../sflphone-client-gnome/src/uimanager.c:1258 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Editar número de teléfono" -#: ../sflphone-client-gnome/src/uimanager.c:1269 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Editar el número de teléfono antes de llamar" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Parámetros de cuenta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 -#: ../sflphone-client-gnome/src/config/assistant.c:314 -#: ../sflphone-client-gnome/src/config/assistant.c:427 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protocolo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Desconocido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:322 -#: ../sflphone-client-gnome/src/config/assistant.c:435 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "_Nombre de equipo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 -#: ../sflphone-client-gnome/src/config/assistant.c:330 -#: ../sflphone-client-gnome/src/config/assistant.c:443 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "_Usuario" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 -#: ../sflphone-client-gnome/src/config/assistant.c:346 -#: ../sflphone-client-gnome/src/config/assistant.c:458 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 -#: ../sflphone-client-gnome/src/config/assistant.c:363 -#: ../sflphone-client-gnome/src/config/assistant.c:473 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 -#: ../sflphone-client-gnome/src/config/assistant.c:368 -#: ../sflphone-client-gnome/src/config/assistant.c:478 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "_Número de buzón de voz" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 +msgid "_User-agent" +msgstr "Agente de _usuario" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Autentificación" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Secreto" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Informaciónes" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Nombre de autentificación" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Seguridad" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "Usa transporte TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "Intercambió de clave SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Desactivado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949 msgid "Registration" msgstr "Registración" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953 msgid "Registration expire" msgstr "Registracíon expira" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962 msgid "_Comply with RFC 3263" msgstr "_Cumplir con RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981 msgid "Network Interface" msgstr "Red Inaccesible" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994 msgid "Local address" msgstr "Dirección local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061 msgid "Local port" msgstr "Puerto local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131 msgid "Published address" msgstr "Dirección publicada" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102 msgid "Using STUN" -msgstr "Usando STUN " +msgstr "Usando STUN" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109 msgid "STUN server URL" msgstr "URL del servidor STUN" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117 msgid "Same as local parameters" msgstr "Igual que parámetros locales" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120 msgid "Set published address and port:" msgstr "Publicar dirección y puerto:" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140 msgid "Published port" msgstr "Puerto publicado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 +msgid "Codecs" +msgstr "Códecs" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 +msgid "DTMF" +msgstr "DTMF" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 +msgid "RTP" +msgstr "RTP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 +msgid "SIP" +msgstr "SIP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Configuración de cuentas" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Básico" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Avanzado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 +msgid "Network" +msgstr "Red" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 +msgid "" +"This profile is used when you want to reach a remote peer simply by typing a " +"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " +"also be used if no account can be matched to an incoming or outgoing call." +msgstr "" +"Este perfil es utilizado cuando usted quiere alcanzar al par remoto " +"escribiendo el URI sip así como <b>sip:parremoto</b>. Los parámetros que " +"usted define aqui serán también utilizados si ninguná cuenta puede ser " +"igualada a una llamada entrante o saliente." + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 +#, c-format msgid "Server returned \"%s\" (%d)" -msgstr "Servidor contesta \"" +msgstr "El servidor ha devuelto «%s» (%d)" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protocolo" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Estado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Cuentas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Cuentas Configuradas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 +#, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" -msgstr[0] " cuenta activada" -msgstr[1] " cuenta activada" +msgstr[0] "Hay %d cuenta activada" +msgstr[1] "Hay %d cuentas activadas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "No tienes ninguna cuenta activada" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "General" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Usar libreta de contactos de Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Limite de descarga :" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "tarjetas" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "_Mostrar fotos de contactos, si están disponibles" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Usar los siguientes campos de la libreta de direcciones de Evolution:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "P_rofesional" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Personal" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Movil" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Libretas de contactos" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Seleccione la libreta de contactos de Evolution a usar" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:577 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Nombre" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "El asistente ha finalizado" -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -757,317 +798,322 @@ msgstr "" "Puede comprobar en cualquier momento su estado de registro o modificar la " "configuración de sus cuentas en la ventana de Opciones/Cuentas." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Servidor" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Usuario" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Seguridad: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Ninguno" -#: ../sflphone-client-gnome/src/config/assistant.c:229 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "Asistente de creación de cuentas" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" -msgstr "¡Bienvenido al asistente de configuración de cuentas de SFLphone" +msgstr "¡Bienvenido al asistente de creación de cuentas de SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "Este asistente de instalación le ayudará a configurar una cuenta." -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Escoja un tipo de cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:272 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Por favor, elija una de las siguientes opciones" -#: ../sflphone-client-gnome/src/config/assistant.c:290 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Crear una cuenta SIP/IAX2 gratis en sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:292 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Registrar una cuenta SIP o IAX2 existente" -#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Configuración de cuenta SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:306 -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Por favor, ingrese la siguiente información" -#: ../sflphone-client-gnome/src/config/assistant.c:376 -#: ../sflphone-client-gnome/src/config/assistant.c:405 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" -msgstr "Communicaciòn segura con _ZRTP" +msgstr "Comunicación segura con _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Dirección de correo opcional" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "Esta dirección de correo se usará para mandar sus mensajes de voz" -#: ../sflphone-client-gnome/src/config/assistant.c:397 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_Correo" -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Configuración de cuenta IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Conversión de Dirección de Red (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "Probablemente tiene que activar esto si está detrás de un cortafuegos." -#: ../sflphone-client-gnome/src/config/assistant.c:505 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "A_ctivar STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:512 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_Servidor STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Registro de cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "¡Enhorabuena!" -#: ../sflphone-client-gnome/src/config/audioconf.c:582 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frecuencia" -#: ../sflphone-client-gnome/src/config/audioconf.c:587 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Tasa de transferencia" -#: ../sflphone-client-gnome/src/config/audioconf.c:592 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Ancho de banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:670 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:692 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Salida" -#: ../sflphone-client-gnome/src/config/audioconf.c:714 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Entrada" -#: ../sflphone-client-gnome/src/config/audioconf.c:749 -msgid "_Voice Activity Detection" -msgstr "_Detección de actividad de voz" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:759 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "_Reducción de ruido" +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:800 +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Gestor de audio" -#: ../sflphone-client-gnome/src/config/audioconf.c:809 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:819 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "Configuración de ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:836 -msgid "Codecs" -msgstr "Códecs" - -#: ../sflphone-client-gnome/src/config/audioconf.c:865 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Grabaciones" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Carpeta de destino" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Seleccione una carpeta" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "_Habilitar tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:891 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" -msgstr "Elija un tono de llmada" +msgstr "Elija un tono de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:897 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Archivos de Audio" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Configuración de cuentas" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "Argumento de URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Comandos personalizados en llamada entrante con URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s se remplazará por la URL." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Disparador en una cabecera _SIP específica" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Disparador con una URL _IAX2" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "_Comando a ejecutar" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Reescritura de número de teléfono" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "_Prefijar los números marcados con" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 -msgid "" -"This profile is used when you want to reach a remote peer simply by typing a " -"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " -"also be used if no account can be matched to an incoming or outgoing call." -msgstr "" -"Este perfil es utilizado cuando usted quiere alcanzar al par remoto " -"escribiendo el URI sip así como <b>sip:parremoto</b>. Los parámetros que " -"usted define aqui serán también utilizados si ninguná cuenta puede ser " -"igualada a una llamada entrante o saliente." - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Notificación de escritorio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "_Activar notificaciones" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Icono de bandeja del sistema" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 +msgid "Show SFLphone in the system tray" +msgstr "Mostrar SFLphone en la barra de tareas" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "_Popup ventana principal al recibir llamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "_Nunca mostrar ventana principal" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "Esconder SFLphone al principio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Historia de llamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "_Guardar mi historia por lo menos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "días" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Preferencias" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Sonido" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Libreta de Direcciones" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Disparadores" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 -msgid "Direct IP calls" -msgstr "Llamadas IP directas" +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 +msgid "Shortcuts" +msgstr "Accesos directos" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 +msgid "Be careful: these shortcuts might override system-wide shortcuts." +msgstr "" +"Tenga cuidado: estos accesos directos podrían reemplazar los accesos " +"directos de todo sistema." + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" -msgstr "Opciones avanzadas por TLS" +msgstr "Opciones avanzadas para TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "Transporte TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1080,139 +1126,118 @@ msgstr "" "diferente transporte TLS para cada cuenta. De cualquier forma, cada uno de " "ellos usará un puerto dedicado, diferente el uno del otro.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 +msgid "Global TLS listener (all accounts)" +msgstr "Escuchador TLS global (todas cuentas)" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "Lista de Certificados de Autoridad" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "Escoge un archivo de lista de CA (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "Archivo del certificado del par público" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "Escoge un certificado de par público (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "Escoge un archivo de clave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "Contraseña de clave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "Método de protocolo TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "Lista de cifrado TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" -msgstr "Nombre del servidor para conección TLS saliente" +msgstr "Nombre del servidor para la conexión TLS saliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" -msgstr "Negociación expirada" +msgstr "Negociación expirada (seg:mseg)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "Checar certificados entrantes, como un servidor" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "Checar certificados de la respuesta, como cliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" -msgstr "Requiere certificado para conecciones TLS entrantes" +msgstr "Requiere certificado para conexiones TLS entrantes" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 msgid "ZRTP Options" msgstr "Opciones ZRTP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "Send Hello Hash in S_DP" msgstr "Enviar Hello Hash en S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Ask User to Confirm SAS" msgstr "Preguntar al usuario de confirmar SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 msgid "_Warn if ZRTP not supported" msgstr "_Prevenir si ZRTP no es compatible" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 msgid "Display SAS once for hold events" msgstr "Presentar SAS una vez para eventos en espera" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "Opciones SDES" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Buscar todos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" -msgstr "Haz clic aqui para cambiar el type de busqueda" +msgstr "Pulse aquí para cambiar el tipo de búsqueda" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Buscar en llamadas pérdidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Buscar en llamadas entrantes" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Buscar en llamadas salientes" -#~ msgid "IP call - %s" -#~ msgstr "Llamada IP - %s" - -#~ msgid "Codec" -#~ msgstr "Códec" - -#~ msgid "Network" -#~ msgstr "Red" - -#~ msgid "Manually" -#~ msgstr "Manualmente" - -#~ msgid "There " -#~ msgstr "Alla " - -#~ msgid "is " -#~ msgstr "es " +#~ msgid "_Voice Activity Detection" +#~ msgstr "_Detección de actividad de voz" -#~ msgid "are " -#~ msgstr "son " - -#~ msgid "s" -#~ msgstr "s" - -#~ msgid "_Mute other applications during a call" -#~ msgstr "Silenciar otras aplicaciones durante una llamada" - -#~ msgid "SIP Port" -#~ msgstr "Puerto SIP" - -#~ msgid "UDP Transport" -#~ msgstr "Transporte UDP" - -#~ msgid "Enable voicemail _notifications" -#~ msgstr "Activar _notificaciones de mensajes de voz" - -#~ msgid "Store SIP credentials as MD5 hash" -#~ msgstr "Guarda informaciòn SIP como hash MD5" +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "_Reducción de ruido" #~ msgctxt "account state" #~ msgid "Registered" @@ -1241,6 +1266,9 @@ msgstr "Buscar en llamadas salientes" #~ msgid "SFLphone KDE Client" #~ msgstr "Cliente KDE de SFLphone" +#~ msgid "Codec" +#~ msgstr "Códec" + #~ msgid "Main screen" #~ msgstr "Pantalla principal" @@ -1281,9 +1309,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Enable Stun" #~ msgstr "Activar STUN" -#~ msgid "SIP" -#~ msgstr "SIP" - #~ msgid "Apply" #~ msgstr "Aplicar" @@ -1296,6 +1321,9 @@ msgstr "Buscar en llamadas salientes" #~ msgid "PulseAudio" #~ msgstr "PulseAudio" +#~ msgid "SIP Port" +#~ msgstr "Puerto SIP" + #~ msgctxt "End of 'Keep my history for at least n days.'" #~ msgid "days" #~ msgstr "días" @@ -1452,12 +1480,23 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "Cuidado:número de resultatos excede el maximo a mostrar." +#~ msgid "IP call - %s" +#~ msgstr "Llamada IP - %s" + #~ msgid "_Account creation wizard" #~ msgstr "Asistente de configuración de cuentas" +#~ msgid "%i account configured" +#~ msgid_plural "%i accounts configured" +#~ msgstr[0] "%i cuenta configurada" +#~ msgstr[1] "%i cuentas configuradas" + #~ msgid "_Enable this account" #~ msgstr "_Habilitar esta cuenta" +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Activar _notificaciones de mensajes de voz" + #~ msgctxt "Beginning of 'Keep my history for at least n days.'" #~ msgid "_Keep my history for at least" #~ msgstr "_Guardar mi historia por lo menos" @@ -1465,6 +1504,9 @@ msgstr "Buscar en llamadas salientes" #~ msgid "PulseAudio sound server" #~ msgstr "Servidor de sonido Pulseaudio" +#~ msgid "_Mute other applications during a call" +#~ msgstr "Silenciar otras aplicaciones durante una llamada" + #~ msgid "User" #~ msgstr "Usuario" @@ -1723,6 +1765,17 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Command to run" #~ msgstr "Comando a ejecutar" +#~ msgid "" +#~ "<b>Error: No audio codecs found.\n" +#~ "\n" +#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>." +#~ "sflphone</b> directory in your home( <i>%s</i> )" +#~ msgstr "" +#~ "<b>Error: Codecs de audio no encontrados.\n" +#~ "\n" +#~ "</b> Los codecs de audio de SFLphone deben estar en <i>%s</i> o en el " +#~ "directorio <b>.sflphone</b> de su carpeta personal( <i>%s</i> )" + #~ msgid "Keep my history for at least" #~ msgstr "Guardar el historial al menos" @@ -1770,13 +1823,39 @@ msgstr "Buscar en llamadas salientes" #~ "\"Más\" o \"Menos\". Edita la cuenta seleccionada con el formulario a la " #~ "derecha." +#~ msgid "Manually" +#~ msgstr "Manualmente" + +#~ msgid "s" +#~ msgstr "s" + +#~ msgid "There " +#~ msgstr "Alla " + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "Guarda informaciòn SIP como hash MD5" + +#~ msgid "Direct IP calls" +#~ msgstr "Llamadas IP directas" + +#~ msgid "UDP Transport" +#~ msgstr "Transporte UDP" + +#~ msgid "are " +#~ msgstr "son " + +#~ msgid "is " +#~ msgstr "es " + #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" #~ "Maxime Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime " #~ "Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ," #~ "Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad " -#~ "Contributions:,Andres Mujica,Maxime Chambreuil" +#~ "Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad Contributions:," +#~ "Andres Mujica,Daniel Mustieles,Jorge E. Gómez,Maxime Chambreuil,Nicolás " +#~ "M. Zahlut,Xuacu Saturio" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" @@ -1784,4 +1863,6 @@ msgstr "Buscar en llamadas salientes" #~ "maxime.chambreuil@savoirfairelinux.com,,,andres.mujica@seaq.com.co,maxime." #~ "chambreuil@gmail.com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail." #~ "com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres." -#~ "mujica@seaq.com.co,maxime.chambreuil@gmail.com" +#~ "mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres.mujica@seaq.com." +#~ "co,daniel.mustieles@gmail.com,jorge@jorgee.net,maxime.chambreuil@gmail." +#~ "com,nzahlut@live.com,xuacusk8@gmail.com" diff --git a/sflphone-client-gnome/po/fr/fr.po b/sflphone-client-gnome/po/fr/fr.po index c7ace4f55b..f790d7fe8a 100644 --- a/sflphone-client-gnome/po/fr/fr.po +++ b/sflphone-client-gnome/po/fr/fr.po @@ -7,70 +7,74 @@ # POT-Creation-Date: 2008-01-13 01:39+0100\n msgid "" msgstr "" -"Project-Id-Version: SFLphone 0.9.4\n" +"Project-Id-Version: SFLphone 0.9.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-03 10:22-0500\n" -"PO-Revision-Date: 2009-10-26 20:46+0000\n" -"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-04-29 08:48+0000\n" +"Last-Translator: Christophe CATARINA <Unknown>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Launchpad-Export-Date: 2009-11-12 18:12+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:175 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Enregistré" -#: ../sflphone-client-gnome/src/accountlist.c:178 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Non Enregistré" -#: ../sflphone-client-gnome/src/accountlist.c:181 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "En cours..." -#: ../sflphone-client-gnome/src/accountlist.c:184 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Erreur" -#: ../sflphone-client-gnome/src/accountlist.c:187 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Erreur d'authentification" -#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Réseau non trouvé" -#: ../sflphone-client-gnome/src/accountlist.c:193 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Serveur introuvable" -#: ../sflphone-client-gnome/src/accountlist.c:196 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Erreur de configuration Stun" -#: ../sflphone-client-gnome/src/accountlist.c:199 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Serveur Stun invalide" -#: ../sflphone-client-gnome/src/accountlist.c:202 +#: ../sflphone-client-gnome/src/accountlist.c:208 +msgid "Ready" +msgstr "Prêt" + +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Non valide" -#: ../sflphone-client-gnome/src/actions.c:98 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Utilise le compte" -#: ../sflphone-client-gnome/src/actions.c:104 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Pas de compte enregistré" -#: ../sflphone-client-gnome/src/actions.c:285 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -78,25 +82,28 @@ msgstr "" "Impossible de se connecter au serveur SFLphone.\n" " Assurez-vous que le démon est lancé." -#: ../sflphone-client-gnome/src/actions.c:589 -#: ../sflphone-client-gnome/src/actions.c:911 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Appel direct SIP" -#: ../sflphone-client-gnome/src/actions.c:1103 -#, c-format -msgid "" -"<b>Error: No audio codecs found.\n" -"\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" -msgstr "" -"<b>Erreur: Aucun codec audio trouvé.\n" -"\n" -"</b> Les codecs audio SFL doivent être soit dans <i>%s</i> soit dans le " -"répertoire <b>.sflphone</b> de votre répertoire racine( <i>%s</i> )" +#: ../sflphone-client-gnome/src/callable_obj.c:390 +msgid "today at %R" +msgstr "Aujourd'hui, à %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:393 +msgid "yesterday at %R" +msgstr "Hier, à %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:395 +msgid "%A at %R" +msgstr "%A, à %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:399 +msgid "%x at %R" +msgstr "%x, à %R" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -106,7 +113,7 @@ msgstr "" "\n" "Erreur lors de l'ouverture du périphérique de sortie" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -116,7 +123,7 @@ msgstr "" "\n" "Erreur lors de l'ouverture du périphérique d'entrée" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -126,43 +133,43 @@ msgstr "" "\n" "Pulseaudio n'est pas lancé" -#: ../sflphone-client-gnome/src/mainwindow.c:73 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "Vous avez un appel en cours." -#: ../sflphone-client-gnome/src/mainwindow.c:77 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Vous avez des appels en cours." -#: ../sflphone-client-gnome/src/mainwindow.c:86 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Voulez-vous quitter?" -#: ../sflphone-client-gnome/src/mainwindow.c:298 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "Erreur SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP n'est pas supporté par %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:393 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Communications sécurisées non disponibles" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Continuer" -#: ../sflphone-client-gnome/src/mainwindow.c:395 -#: ../sflphone-client-gnome/src/mainwindow.c:417 -#: ../sflphone-client-gnome/src/mainwindow.c:431 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Arrêter l'appel" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -171,11 +178,11 @@ msgstr "" "L'appel avec %s est passé en mode non-crypté à cause d'une erreur %s.\n" "Raison exacte: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "Erreur d'authentification" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -184,50 +191,50 @@ msgstr "" "%s ne désire plus utiliser la communication sécurisée. Confirmer que vous " "voulez continuer sans ZRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Confirmer Communication en clair" -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Confirmer" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s account : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>De</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d message vocal" msgstr[1] "%d messages vocaux" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Appel avec le compte %s <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Compte courant" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Vous n'avez pas configuré de compte" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Vous n'avez aucun compte enregistré" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -236,525 +243,555 @@ msgstr "" "<i>Avec:</i> %s\n" "using %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s ne supporte pas ZRTP." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "La négociation ZRTP avec %s a échoué" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>De:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Volume des hauts-parleurs" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Volume du micro" -#: ../sflphone-client-gnome/src/statusicon.c:96 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "_Afficher la fenêtre principale" -#: ../sflphone-client-gnome/src/statusicon.c:131 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 +msgid "_Hang up" +msgstr "_Raccrocher" + +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:132 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format -msgid "%i account configured" -msgid_plural "%i accounts configured" -msgstr[0] "%i compte configuré" -msgstr[1] "%i comptes configurés" - -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:693 -#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "%i active account" +msgid_plural "%i active accounts" +msgstr[0] "%i compte actif" +msgstr[1] "%i comptes actifs" + +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Boite vocale" -#: ../sflphone-client-gnome/src/uimanager.c:117 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Aucun carnet d'adresses sélectionné" -#: ../sflphone-client-gnome/src/uimanager.c:137 -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Carnet d'adresses" -#: ../sflphone-client-gnome/src/uimanager.c:279 +#: ../sflphone-client-gnome/src/uimanager.c:338 #, c-format msgid "Voicemail (%i)" msgstr "Boite vocale (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:342 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" "SFLphone est un client VoIP compatible avec les protocoles SIP et IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:345 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "A propos de SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:719 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "Actions" -#: ../sflphone-client-gnome/src/uimanager.c:720 -#: ../sflphone-client-gnome/src/uimanager.c:1184 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Nouvel appel" -#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "Appeler" -#: ../sflphone-client-gnome/src/uimanager.c:721 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Décrocher" -#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "Répondre à l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:722 -#: ../sflphone-client-gnome/src/uimanager.c:991 -#: ../sflphone-client-gnome/src/uimanager.c:1032 -msgid "_Hang up" -msgstr "_Raccrocher" - -#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "Terminer l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "Mettre en attente" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "Mettre l'appel en attente" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "Reprendre" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "Reprendre l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:725 -#: ../sflphone-client-gnome/src/uimanager.c:1015 -msgid "_Record" -msgstr "Enregistrer" - -#: ../sflphone-client-gnome/src/uimanager.c:725 -msgid "Record the current conversation" -msgstr "Enregistrer la conversation courante" - -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "_Assistant de configuration" -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Lancer l'assistant de configuration" -#: ../sflphone-client-gnome/src/uimanager.c:727 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "Appeler la boite vocale" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "_Fermer" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "Minimiser dans la barre des tâches" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "_Quitter" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Quitter le programme" -#: ../sflphone-client-gnome/src/uimanager.c:732 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Editer" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "_Copier" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Copier la sélection" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "C_oller" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" -msgstr "" +msgstr "Coller le contenu du presse-papiers" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Effacer l'_historique" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Effacer l'historique" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "Co_mptes" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Éditer les comptes" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Préférences" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "Modifier les préférences" -#: ../sflphone-client-gnome/src/uimanager.c:740 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "A_ffichage" -#: ../sflphone-client-gnome/src/uimanager.c:743 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "A_ide" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Sommaire" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "Ouvrir le manuel" -#: ../sflphone-client-gnome/src/uimanager.c:745 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "À propos de cette application" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Transférer" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" -msgstr "Transférer à : " +msgstr "Transférer à :" + +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 +msgid "_Record" +msgstr "Enregistrer" + +#: ../sflphone-client-gnome/src/uimanager.c:869 +msgid "Record the current conversation" +msgstr "Enregistrer la conversation courante" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "Afficher la _barre d'outil" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "Afficher la barre d'outil" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "_Clavier" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "Afficher le clavier" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "Contrôle du _volume" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Afficher les controles du volume" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Historique" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Historique d'appels" -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Carnet d'adresses" -#: ../sflphone-client-gnome/src/uimanager.c:1003 -#: ../sflphone-client-gnome/src/uimanager.c:1044 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "_Mettre en attente" -#: ../sflphone-client-gnome/src/uimanager.c:1107 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "_Rappeler" -#: ../sflphone-client-gnome/src/uimanager.c:1258 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Éditer le numéro" -#: ../sflphone-client-gnome/src/uimanager.c:1269 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Éditer le numéro de téléphone avant d'appeler" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Paramètres du Compte" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 -#: ../sflphone-client-gnome/src/config/assistant.c:314 -#: ../sflphone-client-gnome/src/config/assistant.c:427 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "A_lias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "P_rotocole" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Inconnu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:322 -#: ../sflphone-client-gnome/src/config/assistant.c:435 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "_Serveur" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 -#: ../sflphone-client-gnome/src/config/assistant.c:330 -#: ../sflphone-client-gnome/src/config/assistant.c:443 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "Usa_ger" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 -#: ../sflphone-client-gnome/src/config/assistant.c:346 -#: ../sflphone-client-gnome/src/config/assistant.c:458 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 -#: ../sflphone-client-gnome/src/config/assistant.c:363 -#: ../sflphone-client-gnome/src/config/assistant.c:473 -#, fuzzy +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" -msgstr "Mot de passe" +msgstr "Afficher le mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 -#: ../sflphone-client-gnome/src/config/assistant.c:368 -#: ../sflphone-client-gnome/src/config/assistant.c:478 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "_Boite vocale #" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 +msgid "_User-agent" +msgstr "_User-agent" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Identification" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Informations" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Nom d'authentification" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Sécurité" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "Utiliser un transport TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "Échange de clé SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Désactivé" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949 msgid "Registration" msgstr "Expiration d'enregistrement" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953 msgid "Registration expire" msgstr "Expiration d'enregistrement" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962 msgid "_Comply with RFC 3263" msgstr "Respecter RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981 msgid "Network Interface" msgstr "Interface réseau" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994 msgid "Local address" msgstr "Adresse locale" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061 msgid "Local port" msgstr "Port local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131 msgid "Published address" msgstr "Adresse de publication" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102 msgid "Using STUN" -msgstr "Utiliser STUN " +msgstr "Utiliser STUN" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109 msgid "STUN server URL" msgstr "URL du serveur STUN" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117 msgid "Same as local parameters" msgstr "Identique aux paramètres locaux" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120 msgid "Set published address and port:" msgstr "Configurer l'adresse et le port à publier" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140 msgid "Published port" msgstr "Port de publication" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 +msgid "Codecs" +msgstr "Codecs" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 +msgid "DTMF" +msgstr "DTMF" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 +msgid "RTP" +msgstr "RTP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 +msgid "SIP" +msgstr "SIP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Paramètre des comptes" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Général" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Avancé" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 +msgid "Network" +msgstr "Réseau" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 +msgid "" +"This profile is used when you want to reach a remote peer simply by typing a " +"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " +"also be used if no account can be matched to an incoming or outgoing call." +msgstr "" +"Ce profil est utilisé quand vous voulez appeler directement quelqu'un en " +"composant une adresse SIP telle que: <b>sip:remotepeer</b>. Ces paramètres " +"sont aussi utilisé si aucun compte ne peut être attribué à un appel entrant " +"ou sortant." + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "Le serveur a répondu \"%s\" (%d)" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protocole" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Statut" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Comptes" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Comptes Configurés" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" -msgstr[0] " %d compte actif" -msgstr[1] " %d comptes actifs" +msgstr[0] "%d compte actif" +msgstr[1] "%d comptes actifs" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "Vous n'avez aucun compte actif" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Général" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Utiliser les carnets d'adresse d'Évolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Limite de téléchargement :" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "entrées" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "_Afficher la photo si disponible" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Utiliser les champs suivants des carnets d'adresse d'Évolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Professionnels" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "P_ersonnels" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Mobiles" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Carnets d'adresses" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Sélectionnez les carnets d'adresses d'Evolution à utiliser" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:577 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Nom" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "Cet assistant est maintenant terminé." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -762,319 +799,322 @@ msgstr "" "Vous pouvez à tout moment vérifier votre état d'enregistrement ou modifier " "les paramètres de vos comptes dans la fenêtre Options/Comptes." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Serveur" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Nom d'utilisateur" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Sécurité: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Aucun" -#: ../sflphone-client-gnome/src/config/assistant.c:229 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "Assistant de création de compte de SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Bienvenue dans l'assistant de création de compte de SFLphone !" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "Cet assistant vous guidera dans la configuration d'un compte." -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "Protocoles VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Sélectionnez un type de compte" -#: ../sflphone-client-gnome/src/config/assistant.c:272 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Compte" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Veuillez sélectionner une des options suivantes" -#: ../sflphone-client-gnome/src/config/assistant.c:290 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Créer un compte SIP/IAX2 gratuit sur sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:292 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Enregistrer un compte SIP ou IAX2 existant" -#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Paramètres de compte SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:306 -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Veuillez remplir les champs suivants" -#: ../sflphone-client-gnome/src/config/assistant.c:376 -#: ../sflphone-client-gnome/src/config/assistant.c:405 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Communications sécurisées avec _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Adresse courriel optionnelle" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "Vos messages vocaux seront envoyés par courriel à cette adresse." -#: ../sflphone-client-gnome/src/config/assistant.c:397 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "A_dresse courriel" -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Paramètres de compte IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" "Vous devriez probablement activer cette option si vous vous trouvez derrière " "un pare-feu." -#: ../sflphone-client-gnome/src/config/assistant.c:505 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "A_ctiver STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:512 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "S_erveur STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Enregistrement du compte" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Félicitations!" -#: ../sflphone-client-gnome/src/config/audioconf.c:582 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Fréquence" -#: ../sflphone-client-gnome/src/config/audioconf.c:587 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-client-gnome/src/config/audioconf.c:592 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Bande passante" -#: ../sflphone-client-gnome/src/config/audioconf.c:670 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "Greffon ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:692 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Sortie" -#: ../sflphone-client-gnome/src/config/audioconf.c:714 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Entrée" -#: ../sflphone-client-gnome/src/config/audioconf.c:749 -msgid "_Voice Activity Detection" -msgstr "Détection de l'activité de la voix" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +msgid "Ringtone" +msgstr "Sonneries" -#: ../sflphone-client-gnome/src/config/audioconf.c:759 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "Réduction du bruit (Compresseur extenseur LBR)" +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:800 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Interface Audio" -#: ../sflphone-client-gnome/src/config/audioconf.c:809 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:819 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "Paramètres ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:836 -msgid "Codecs" -msgstr "Codecs" - -#: ../sflphone-client-gnome/src/config/audioconf.c:865 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Enregistrements" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Dossier de destination" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Choisissez un dossier" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Sonneries" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "_Activer les sonneries" -#: ../sflphone-client-gnome/src/config/audioconf.c:891 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Sélectionner une sonnerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:897 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Fichier Audio" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Paramètre des comptes" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "Argument URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Commandes personnalisées lors d'appels entrants avec une URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s sera remplacé par l'URL passé en argument." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Déclencher sur un entête _SIP spécifique" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Déclencher en _IAX2" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "Commande à e_xécuter" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Réécriture des numéros appelés" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "_Préfixer les numéros composés par" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 -msgid "" -"This profile is used when you want to reach a remote peer simply by typing a " -"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " -"also be used if no account can be matched to an incoming or outgoing call." -msgstr "" -"Ce profil est utilisé quand vous voulez appeler directement quelqu'un en " -"composant une adresse SIP telle que: <b>sip:remotepeer</b>. Ces paramètres " -"sont aussi utilisé si aucun compte ne peut être attribué à un appel entrant " -"ou sortant." - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Notifications de Bureau" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "_Activer les notifications" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Icône dans la barre des tâches" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 +msgid "Show SFLphone in the system tray" +msgstr "Montrer SFLphone dans la barre des tâches" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "Faire apparaître la fenêtre _principale lors d'appel entrant" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "Ne _jamais afficher la fenêtre principale" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "_Cacher la fenêtre de SFLphone au démarrage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Historique des appels" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "Garder mon historique au moins" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "jours" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Préférences" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Carnet d'adresse" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Ancrage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 -msgid "Direct IP calls" -msgstr "Appels IP" +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 +msgid "Shortcuts" +msgstr "Raccourcis claviers" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 +msgid "Be careful: these shortcuts might override system-wide shortcuts." +msgstr "" +"Soyez prudent; ces raccourcis peuvent entrer en conflit avec ceux du système." + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "Options avancées TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "Transport TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1087,143 +1127,118 @@ msgstr "" "TLS différent pour chaque compte. Cependant, chacun écoutera sur un port " "différent.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 +msgid "Global TLS listener (all accounts)" +msgstr "Port TLS global (pour tous les comptes)" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "Liste des autorités de certification" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "Choisir une liste d'AC (optionnel)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "Fichier de certificats de l'extrémité public" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "Sélectionner le certificat de l'extrémité public" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "Choisir une clé privée (optionnel)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "Mot de passe pour la clé privée" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "Méthode pour TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "Liste de cryptogramme TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "Instance du serveur pour les connections TLS sortantes" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "Expiration de la négociation" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "En tant que serveur, vérifier les certificats entrants" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "En tant que client, vérifier les certificats dans les réponses" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "Exiger un certificat pour les connexions TLS entrantes" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 msgid "ZRTP Options" msgstr "Options de ZRTP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "Send Hello Hash in S_DP" msgstr "Envoyer le hash de Hello dans S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Ask User to Confirm SAS" msgstr "Demander à l'utilisateur de confirmer le SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 msgid "_Warn if ZRTP not supported" msgstr "_Avertir si ZRTP n'est pas supporté" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 msgid "Display SAS once for hold events" msgstr "Afficher le SAS seulement une fois sur les mises en attente" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "Options SDES" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "Recourrir à RTP si SDES échoue" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Rechercher dans tous" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Cliquez ici pour changer le type de recherche" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Rechercher dans les appels manqués" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Rechercher dans les appels entrants" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Rechercher dans les appels sortants" -#~ msgid "Configuration File" -#~ msgstr "Fichier de configuration" +#~ msgid "_Voice Activity Detection" +#~ msgstr "Détection de l'activité de la voix" -#~ msgid "Store SIP credentials as MD5 hash" -#~ msgstr "" -#~ "Stocker les informations d'authentification sour forme encryptée (MD5)" - -#~ msgid "IP call - %s" -#~ msgstr "Appel IP - %s" - -#~ msgid "Codec" -#~ msgstr "Codec" - -#~ msgid "Network" -#~ msgstr "Réseau" - -#~ msgid "Manually" -#~ msgstr "Manuelle" - -#~ msgid "There " -#~ msgstr "Il y " - -#~ msgid "is " -#~ msgstr "a " - -#~ msgid "are " -#~ msgstr "a " - -#~ msgid "s" -#~ msgstr "s" - -#~ msgid "_Mute other applications during a call" -#~ msgstr "Éteindre le _son des autres applications lors d'un appel" - -#~ msgid "SIP Port" -#~ msgstr "Port SIP" - -#~ msgid "UDP Transport" -#~ msgstr "Transport UDP" - -#~ msgid "Enable voicemail _notifications" -#~ msgstr "Activer les notifications de boîte _vocale" +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "Réduction du bruit (Compresseur extenseur LBR)" #~ msgctxt "account state" #~ msgid "Registered" @@ -1286,6 +1301,9 @@ msgstr "Rechercher dans les appels sortants" #~ msgid "Default account" #~ msgstr "Compte par défaut" +#~ msgid "Codec" +#~ msgstr "Codec" + #~ msgid "SFLphone KDE Client" #~ msgstr "SFLphone Client KDE" @@ -1475,6 +1493,9 @@ msgstr "Rechercher dans les appels sortants" #~ msgid "Clear history" #~ msgstr "Effacer l'historique" +#~ msgid "SIP Port" +#~ msgstr "Port SIP" + #~ msgid "Trigger on specific SIP header" #~ msgstr "Déclencher sur un entête SIP spécifique" @@ -1496,15 +1517,40 @@ msgstr "Rechercher dans les appels sortants" #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "Attention:tous les résultats ne sont pas affichés." +#~ msgid "IP call - %s" +#~ msgstr "Appel IP - %s" + +#~ msgid "" +#~ "<b>Error: No audio codecs found.\n" +#~ "\n" +#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>." +#~ "sflphone</b> directory in your home( <i>%s</i> )" +#~ msgstr "" +#~ "<b>Erreur: Aucun codec audio trouvé.\n" +#~ "\n" +#~ "</b> Les codecs audio SFL doivent être soit dans <i>%s</i> soit dans le " +#~ "répertoire <b>.sflphone</b> de votre répertoire racine( <i>%s</i> )" + #~ msgid "_Account creation wizard" #~ msgstr "_Assistant de création de compte" +#~ msgid "%i account configured" +#~ msgid_plural "%i accounts configured" +#~ msgstr[0] "%i compte configuré" +#~ msgstr[1] "%i comptes configurés" + #~ msgid "_Enable this account" #~ msgstr "Activer ce compte" +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Activer les notifications de boîte _vocale" + #~ msgid "PulseAudio sound server" #~ msgstr "Serveur de son PulseAudio" +#~ msgid "_Mute other applications during a call" +#~ msgstr "Éteindre le _son des autres applications lors d'un appel" + #~ msgid "Port" #~ msgstr "Port" @@ -1770,9 +1816,6 @@ msgstr "Rechercher dans les appels sortants" #~ msgid "IAX" #~ msgstr "IAX" -#~ msgid "SIP" -#~ msgstr "SIP" - #~ msgid "PulseAudio" #~ msgstr "PulseAudio" @@ -1817,12 +1860,42 @@ msgstr "Rechercher dans les appels sortants" #~ msgid "Registration _expire" #~ msgstr "Expiration d'enregistrement" +#~ msgid "Manually" +#~ msgstr "Manuelle" + +#~ msgid "s" +#~ msgstr "s" + +#~ msgid "UDP Transport" +#~ msgstr "Transport UDP" + +#~ msgid "Configuration File" +#~ msgstr "Fichier de configuration" + +#~ msgid "There " +#~ msgstr "Il y " + +#~ msgid "are " +#~ msgstr "a " + +#~ msgid "is " +#~ msgstr "a " + +#~ msgid "Direct IP calls" +#~ msgstr "Appels IP" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "" +#~ "Stocker les informations d'authentification sour forme encryptée (MD5)" + #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" #~ "Jérémy Quentin, ,Launchpad Contributions:,Emmanuel Milou,Maxime " #~ "Chambreuil, ,Launchpad Contributions:,Emmanuel Milou,Maxime Chambreuil, ," -#~ "Launchpad Contributions:,Emmanuel Milou,Maxime Chambreuil" +#~ "Launchpad Contributions:,Emmanuel Milou,Maxime Chambreuil, ,Launchpad " +#~ "Contributions:,Alexandre Savard,Christophe CATARINA,Emmanuel Milou,Maxime " +#~ "Chambreuil,Pierre Slamich" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" @@ -1830,4 +1903,6 @@ msgstr "Rechercher dans les appels sortants" #~ "jeremy.quentin@savoirfairelinux.com,,,emmanuel.milou@savoirfairelinux.com," #~ "maxime.chambreuil@gmail.com,,,emmanuel.milou@savoirfairelinux.com,maxime." #~ "chambreuil@gmail.com,,,emmanuel.milou@savoirfairelinux.com,maxime." -#~ "chambreuil@gmail.com" +#~ "chambreuil@gmail.com,,,alexandre.savard@savoirfairelinux.com,,emmanuel." +#~ "milou@savoirfairelinux.com,maxime.chambreuil@gmail.com,pierre." +#~ "slamich@gmail.com" diff --git a/sflphone-client-gnome/po/it/it.po b/sflphone-client-gnome/po/it/it.po index cf8644aea9..f9e4a8ddbc 100644 --- a/sflphone-client-gnome/po/it/it.po +++ b/sflphone-client-gnome/po/it/it.po @@ -7,68 +7,72 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-03 10:22-0500\n" -"PO-Revision-Date: 2009-10-14 17:47+0000\n" -"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-03-21 18:30+0000\n" +"Last-Translator: Milo Casagrande <milo@casagrande.name>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:175 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registrato" -#: ../sflphone-client-gnome/src/accountlist.c:178 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Non registrato" -#: ../sflphone-client-gnome/src/accountlist.c:181 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Registrazione in corso..." -#: ../sflphone-client-gnome/src/accountlist.c:184 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Errore" -#: ../sflphone-client-gnome/src/accountlist.c:187 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Autenticazione fallita" -#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Rete irraggiungibile" -#: ../sflphone-client-gnome/src/accountlist.c:193 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "Host non raggiungibile" -#: ../sflphone-client-gnome/src/accountlist.c:196 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Errore di configurazione STUN" -#: ../sflphone-client-gnome/src/accountlist.c:199 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Server STUN non valido" -#: ../sflphone-client-gnome/src/accountlist.c:202 +#: ../sflphone-client-gnome/src/accountlist.c:208 +msgid "Ready" +msgstr "" + +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Non valido" -#: ../sflphone-client-gnome/src/actions.c:98 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Account in uso:" -#: ../sflphone-client-gnome/src/actions.c:104 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Nessun account registrato" -#: ../sflphone-client-gnome/src/actions.c:285 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -76,25 +80,28 @@ msgstr "" "Impossibile connettersi al server SFLphone.\n" "Accertarsi che il demone sia in esecuzione." -#: ../sflphone-client-gnome/src/actions.c:589 -#: ../sflphone-client-gnome/src/actions.c:911 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" +msgstr "Chiamata SIP diretta" + +#: ../sflphone-client-gnome/src/callable_obj.c:390 +msgid "today at %R" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1103 -#, c-format -msgid "" -"<b>Error: No audio codecs found.\n" -"\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" +#: ../sflphone-client-gnome/src/callable_obj.c:393 +msgid "yesterday at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:395 +msgid "%A at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:399 +msgid "%x at %R" msgstr "" -"<b>Errore: Non è stato trovato alcun codec audio.</b>\n" -"\n" -"I codec audio SFL devono trovarsi in <i>%s</i> o nella sottocartella <b>." -"sflphone</b> della cartella home dell'utente (</i>%s</i>)" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -103,7 +110,7 @@ msgstr "" "Notifica ALSA\n" "Errore nell'apertura del dispositivo di riproduzione" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -112,7 +119,7 @@ msgstr "" "Notifica ALSA\n" "Errore nell'apertura del dispositivo di registrazione" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -121,941 +128,976 @@ msgstr "" "Notifica PulseAudio\n" "PulseAudio non è in esecuzione" -#: ../sflphone-client-gnome/src/mainwindow.c:73 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "C'è una chiamata in corso." -#: ../sflphone-client-gnome/src/mainwindow.c:77 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Ci sono chiamate in corso." -#: ../sflphone-client-gnome/src/mainwindow.c:86 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Vuoi veramente uscire?" -#: ../sflphone-client-gnome/src/mainwindow.c:298 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "Errore SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:393 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:395 -#: ../sflphone-client-gnome/src/mainwindow.c:417 -#: ../sflphone-client-gnome/src/mainwindow.c:431 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" -msgstr "" +msgstr "Termina la chiamata" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" -msgstr "" +msgstr "Negoziazione ZRTP fallita" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "Account %s: %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>Da</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d messaggio vocale" msgstr[1] "%d messaggi vocali" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Chiamata tramite account %s <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Account attivo" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Nessun account configurato" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Nessun account registrato" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." -msgstr "" +msgstr "%s non supporta ZRTP." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" -msgstr "" +msgstr "Negoziazione ZRTP fallita con %s" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" -msgstr "" +msgstr "<i>Con:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Volume altoparlante" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Volume microfono" -#: ../sflphone-client-gnome/src/statusicon.c:96 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "Mostra la finestra principale" -#: ../sflphone-client-gnome/src/statusicon.c:131 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 +msgid "_Hang up" +msgstr "_Chiudi" + +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:132 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format -msgid "%i account configured" -msgid_plural "%i accounts configured" -msgstr[0] "%i account configurato" -msgstr[1] "%i account configurati" - -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:693 -#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "%i active account" +msgid_plural "%i active accounts" +msgstr[0] "" +msgstr[1] "" + +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Segreteria telefonica" -#: ../sflphone-client-gnome/src/uimanager.c:117 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Rubrica" -#: ../sflphone-client-gnome/src/uimanager.c:137 -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Rubrica" -#: ../sflphone-client-gnome/src/uimanager.c:279 +#: ../sflphone-client-gnome/src/uimanager.c:338 +#, c-format msgid "Voicemail (%i)" msgstr "Segreteria telefonica (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:342 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone è un client VoIP compatibile con i protocolli SIP e IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:345 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "Informazioni su SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:719 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "_Chiama" -#: ../sflphone-client-gnome/src/uimanager.c:720 -#: ../sflphone-client-gnome/src/uimanager.c:1184 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "Chiama" -#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" -msgstr "" +msgstr "Effettua una nuova chiamata" -#: ../sflphone-client-gnome/src/uimanager.c:721 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "Rispondi" -#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:722 -#: ../sflphone-client-gnome/src/uimanager.c:991 -#: ../sflphone-client-gnome/src/uimanager.c:1032 -msgid "_Hang up" -msgstr "_Chiudi" +msgstr "Rispondi alla chiamata" -#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" -msgstr "" +msgstr "Termina la chiamata" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "Attesa" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" -msgstr "" +msgstr "Metti in attesa la chiamata" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:725 -#: ../sflphone-client-gnome/src/uimanager.c:1015 -msgid "_Record" -msgstr "_Registra" - -#: ../sflphone-client-gnome/src/uimanager.c:725 -msgid "Record the current conversation" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Errore di configurazione STUN" -#: ../sflphone-client-gnome/src/uimanager.c:727 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d messaggio vocale" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" -msgstr "_Modifica" +msgstr "_Esci" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" -msgstr "" +msgstr "Esce dal programma" -#: ../sflphone-client-gnome/src/uimanager.c:732 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Modifica" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Elimina l'account selezionato" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Cancella la cronologia" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Cancella la cronologia" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Account" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Account attivo" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" -msgstr "Preferenze" +msgstr "Preferen_ze" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" -msgstr "" +msgstr "Modifica le preferenze" -#: ../sflphone-client-gnome/src/uimanager.c:740 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Visualizza" -#: ../sflphone-client-gnome/src/uimanager.c:743 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Aiuto" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:745 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Inoltra" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" -msgstr "Inoltra a: " +msgstr "Inoltra a:" + +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 +msgid "_Record" +msgstr "_Registra" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:869 +msgid "Record the current conversation" +msgstr "Regista la conversazione in corso" + +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "Mostra tastiera" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" -msgstr "" +msgstr "Mostra la tastiera" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "Mostra i controlli del volume" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Mostra i controlli del volume" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Cronologia" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Cronologia chiamate" -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Rubrica" -#: ../sflphone-client-gnome/src/uimanager.c:1003 -#: ../sflphone-client-gnome/src/uimanager.c:1044 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "Attesa" -#: ../sflphone-client-gnome/src/uimanager.c:1107 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1258 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1269 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Parametri account" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 -#: ../sflphone-client-gnome/src/config/assistant.c:314 -#: ../sflphone-client-gnome/src/config/assistant.c:427 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Pseudonimo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protocollo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Sconosciuto" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:322 -#: ../sflphone-client-gnome/src/config/assistant.c:435 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "Nome _host" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 -#: ../sflphone-client-gnome/src/config/assistant.c:330 -#: ../sflphone-client-gnome/src/config/assistant.c:443 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "Nome _utente" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 -#: ../sflphone-client-gnome/src/config/assistant.c:346 -#: ../sflphone-client-gnome/src/config/assistant.c:458 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Password" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 -#: ../sflphone-client-gnome/src/config/assistant.c:363 -#: ../sflphone-client-gnome/src/config/assistant.c:473 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Password" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 -#: ../sflphone-client-gnome/src/config/assistant.c:368 -#: ../sflphone-client-gnome/src/config/assistant.c:478 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "Numero segreteria telefonica" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 -msgid "Authentication" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 +msgid "_User-agent" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 +msgid "Authentication" +msgstr "Autenticazione" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Password" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949 msgid "Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953 msgid "Registration expire" msgstr "Scadenza registrazione" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981 msgid "Network Interface" msgstr "Rete irraggiungibile" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131 msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102 msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109 msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117 msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120 msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 +msgid "Codecs" +msgstr "Codec" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 +msgid "DTMF" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 +msgid "RTP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 +msgid "SIP" +msgstr "SIP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Impostazioni dell'account" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Generale" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Avanzate" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 +msgid "Network" +msgstr "Rete" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 +msgid "" +"This profile is used when you want to reach a remote peer simply by typing a " +"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " +"also be used if no account can be matched to an incoming or outgoing call." +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protocollo" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Stato" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Account" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Account configurati" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Usa la rubrica di Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "tessere" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "Mostra la foto del contatto se disponibile" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Campi dalla rubrica di Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Lavoro" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Home" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "Cellulare" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Rubriche indirizzi" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Selezionare la rubrica di Evolution da usare" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:577 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Nome" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "La procedura guidata è terminata." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Pseudonimo" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Server" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Nome utente" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:229 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" "Benvenuti alla procedura guidata per la creazione di un account SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "Questa procedura permetterà di configurare un account." -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "Protocolli VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Selezionare un tipo di account" -#: ../sflphone-client-gnome/src/config/assistant.c:272 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Account" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Scegliere una delle seguenti opzioni" -#: ../sflphone-client-gnome/src/config/assistant.c:290 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Creare un account SIP/IAX2 gratuito su sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:292 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Registrare un account SIP o IAX2 esistente" -#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Impostazioni account SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:306 -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:376 -#: ../sflphone-client-gnome/src/config/assistant.c:405 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Indirizzo email opzionale" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" "L'indirizzo email sarà usato per l'invio dei messaggi della segreteria " "telefonica." -#: ../sflphone-client-gnome/src/config/assistant.c:397 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "Indirizzo _email" -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Impostazioni account IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "Dovrebbe essere abilitato se ci si trova dietro ad un firewall." -#: ../sflphone-client-gnome/src/config/assistant.c:505 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "Abilita STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:512 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "Server STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Registrazione account" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Congratulazioni!" -#: ../sflphone-client-gnome/src/config/audioconf.c:582 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frequenza" -#: ../sflphone-client-gnome/src/config/audioconf.c:587 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-client-gnome/src/config/audioconf.c:592 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:670 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:692 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Uscita" -#: ../sflphone-client-gnome/src/config/audioconf.c:714 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Ingresso" -#: ../sflphone-client-gnome/src/config/audioconf.c:749 -msgid "_Voice Activity Detection" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Suonerie" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:759 -msgid "_Noise Reduction (Narrow-Band Companding)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:800 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:809 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:819 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "Impostazioni ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:836 -msgid "Codecs" -msgstr "Codec" - -#: ../sflphone-client-gnome/src/config/audioconf.c:865 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Registrazioni" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Cartella di destinazione" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Seleziona una cartella" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Suonerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "Abilita suonerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:891 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Selezionare una suoneria" -#: ../sflphone-client-gnome/src/config/audioconf.c:897 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "File audio" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Impostazioni dell'account" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Rileva header SIP specifico" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Rileva URL su IAX2" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "Comando da eseguire" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Riscrittura numero telefonico" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "Prefisso da aggiungere ai numeri da chiamare" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 -msgid "" -"This profile is used when you want to reach a remote peer simply by typing a " -"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " -"also be used if no account can be matched to an incoming or outgoing call." -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Notifiche" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "Abilita notifiche" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Icona per area di notifica" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 +msgid "Show SFLphone in the system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "Mostra la finestra principale all'arrivo delle chiamate" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "Non mostrare mai la finestra principale" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "Nascondi la finestra di SFLphone all'avvio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Cronologia chiamate" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "Mantieni la cronologia per almeno" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "giorni" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Preferenze" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Rubrica" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 -msgid "Direct IP calls" +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 +msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 +msgid "Be careful: these shortcuts might override system-wide shortcuts." +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1064,119 +1106,116 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 +msgid "Global TLS listener (all accounts)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Cerca tra tutte le chiamate" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Fare clic qui per cambiare il tipo di ricerca" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Cerca tra le chiamate perse" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Cerca tra le chiamate ricevute" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Cerca tra le chiamate effettuate" -#~ msgid "IP call - %s" -#~ msgstr "Chiamata IP diretta - %s" - #~ msgid "Codec" #~ msgstr "Codec" -#~ msgid "Network" -#~ msgstr "Rete" - -#~ msgid "_Mute other applications during a call" -#~ msgstr "Spegni l'audio delle altre applicazioni durante una chiamata" - -#~ msgid "SIP Port" -#~ msgstr "SIP Port" - -#~ msgid "Enable voicemail _notifications" -#~ msgstr "Abilita notifiche messaggi vocali" - #~ msgid "(C) 2009 Savoir-faire Linux" #~ msgstr "(C) 2009 Savoir-faire Linux" @@ -1201,9 +1240,6 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "IAX" #~ msgstr "IAX" -#~ msgid "SIP" -#~ msgstr "SIP" - #~ msgid "Apply" #~ msgstr "Applica" @@ -1228,6 +1264,9 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Enable notifications" #~ msgstr "Attiva le notifiche" +#~ msgid "SIP Port" +#~ msgstr "SIP Port" + #~ msgid "Port" #~ msgstr "Port" @@ -1252,9 +1291,17 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Command to run" #~ msgstr "Comando da eseguire" +#~ msgid "%i account configured" +#~ msgid_plural "%i accounts configured" +#~ msgstr[0] "%i account configurato" +#~ msgstr[1] "%i account configurati" + #~ msgid "_Enable this account" #~ msgstr "Abilita questo account" +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Abilita notifiche messaggi vocali" + #~ msgid "Voicemail number" #~ msgstr "Numero segreteria telefonica" @@ -1297,9 +1344,15 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Prefix dialed numbers with" #~ msgstr "Prefisso da aggiungere al numero da chiamare" +#~ msgid "_Mute other applications during a call" +#~ msgstr "Spegni l'audio delle altre applicazioni durante una chiamata" + #~ msgid "Keep my history for at least" #~ msgstr "Mantieni la cronologia per almeno" +#~ msgid "IP call - %s" +#~ msgstr "Chiamata IP diretta - %s" + #~ msgid "Registration _expire" #~ msgstr "Scadenza registrazione" @@ -1316,15 +1369,27 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Account creation wizard" #~ msgstr "Procedura guidata creazione account" +#~ msgid "" +#~ "<b>Error: No audio codecs found.\n" +#~ "\n" +#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>." +#~ "sflphone</b> directory in your home( <i>%s</i> )" +#~ msgstr "" +#~ "<b>Errore: Non è stato trovato alcun codec audio.</b>\n" +#~ "\n" +#~ "I codec audio SFL devono trovarsi in <i>%s</i> o nella sottocartella <b>." +#~ "sflphone</b> della cartella home dell'utente (</i>%s</i>)" + #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" #~ ",Launchpad Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad " #~ "Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad " -#~ "Contributions:,Maurizio Porrato,Maxime Chambreuil" +#~ "Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad " +#~ "Contributions:,Maurizio Porrato,Maxime Chambreuil,Milo Casagrande" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" #~ ",,,maxime.chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,,,,maxime." -#~ "chambreuil@gmail.com" +#~ "chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,milo@casagrande.name" diff --git a/sflphone-client-gnome/po/pt_BR/pt_BR.po b/sflphone-client-gnome/po/pt_BR/pt_BR.po index 0a5429e6c0..42a553a175 100644 --- a/sflphone-client-gnome/po/pt_BR/pt_BR.po +++ b/sflphone-client-gnome/po/pt_BR/pt_BR.po @@ -7,68 +7,72 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-03 10:22-0500\n" -"PO-Revision-Date: 2009-10-26 20:46+0000\n" -"Last-Translator: kalib <kalibslack@gmail.com>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-06-02 08:31+0000\n" +"Last-Translator: Gustavo Guidorizzi <Unknown>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:175 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Registrado" -#: ../sflphone-client-gnome/src/accountlist.c:178 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Não Registrado" -#: ../sflphone-client-gnome/src/accountlist.c:181 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "Tentando..." -#: ../sflphone-client-gnome/src/accountlist.c:184 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Erro" -#: ../sflphone-client-gnome/src/accountlist.c:187 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "A autenticação falhou" -#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "A rede está inacessível" -#: ../sflphone-client-gnome/src/accountlist.c:193 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "A máquina está inacessível" -#: ../sflphone-client-gnome/src/accountlist.c:196 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Erro de configuração no stun" -#: ../sflphone-client-gnome/src/accountlist.c:199 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Servidor stun inválido" -#: ../sflphone-client-gnome/src/accountlist.c:202 +#: ../sflphone-client-gnome/src/accountlist.c:208 +msgid "Ready" +msgstr "Pronto" + +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "Inválido" -#: ../sflphone-client-gnome/src/actions.c:98 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "Utilizando conta" -#: ../sflphone-client-gnome/src/actions.c:104 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "Sem contas registradas" -#: ../sflphone-client-gnome/src/actions.c:285 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -76,25 +80,28 @@ msgstr "" "Incapaz de conectar ao servidor SFLphone.\n" "Tenha certeza de que o daemon está rodando." -#: ../sflphone-client-gnome/src/actions.c:589 -#: ../sflphone-client-gnome/src/actions.c:911 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Ligações IP diretas" -#: ../sflphone-client-gnome/src/actions.c:1103 -#, c-format -msgid "" -"<b>Error: No audio codecs found.\n" -"\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" -msgstr "" -"<b>Erro: Não foram encontrados codecs de áudio.\n" -"\n" -"</b> Os codecs de áudio do SFL tem de ser movidos para o diretório <i>%s</i> " -"ou para o diretório <b>.sflphone</b> em seu home( <i>%s</i> )" +#: ../sflphone-client-gnome/src/callable_obj.c:390 +msgid "today at %R" +msgstr "hoje às %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:393 +msgid "yesterday at %R" +msgstr "ontem às %R" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/callable_obj.c:395 +msgid "%A at %R" +msgstr "%A às %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:399 +msgid "%x at %R" +msgstr "%x às %R" + +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -104,7 +111,7 @@ msgstr "" "\n" "Erro ao abrir o dispositivo de reprodução" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -114,7 +121,7 @@ msgstr "" "\n" "Erro ao abrir o dispositivo de captura" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -124,43 +131,43 @@ msgstr "" "\n" "Pulseaudio não está rodando" -#: ../sflphone-client-gnome/src/mainwindow.c:73 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "Existe uma ligação em progresso" -#: ../sflphone-client-gnome/src/mainwindow.c:77 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "Existem ligações em progresso" -#: ../sflphone-client-gnome/src/mainwindow.c:86 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Você ainda deseja sair?" -#: ../sflphone-client-gnome/src/mainwindow.c:298 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "Erro no SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP não é suportado pelo peer %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:393 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "Comunicação Segura Indisponível" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Continuar" -#: ../sflphone-client-gnome/src/mainwindow.c:395 -#: ../sflphone-client-gnome/src/mainwindow.c:417 -#: ../sflphone-client-gnome/src/mainwindow.c:431 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "Finalizar Chamada" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -169,11 +176,11 @@ msgstr "" "Um erro %s forçou a ligação com %s a mudar para um modo não encriptado.\n" "Motivo exato: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "Negociação ZRTP falhou" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -182,50 +189,50 @@ msgstr "" "%s deseja finalizar a utilização de comunicação segura. A confirmação irá " "retomar sem SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Confirmar Vá Limpar" -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Confirmar" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s conta : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>De</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d mensagem de voz" msgstr[1] "%d mensagens de voz" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Ligando com %s conta <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "Conta atual" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "Você não tem contas configuradas" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "Você não tem contas registradas" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" @@ -234,520 +241,554 @@ msgstr "" "<i>Com:</i>%s \n" "utilisando %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s não suporta ZRTP." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "Negociação ZRTP falhou com %s" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>Com:</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Volume dos auto-falantes" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "Volume do microfone" -#: ../sflphone-client-gnome/src/statusicon.c:96 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "_Apresentar janela principal" -#: ../sflphone-client-gnome/src/statusicon.c:131 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 +msgid "_Hang up" +msgstr "_Desligar" + +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:132 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format -msgid "%i account configured" -msgid_plural "%i accounts configured" -msgstr[0] "%i conta configurada" -msgstr[1] "%i contas configuradas" - -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:693 -#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "%i active account" +msgid_plural "%i active accounts" +msgstr[0] "%i conta ativa" +msgstr[1] "%i contas ativas" + +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "Correio de voz" -#: ../sflphone-client-gnome/src/uimanager.c:117 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "Catálogo de endereços" -#: ../sflphone-client-gnome/src/uimanager.c:137 -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Catálogo de endereços" -#: ../sflphone-client-gnome/src/uimanager.c:279 +#: ../sflphone-client-gnome/src/uimanager.c:338 +#, c-format msgid "Voicemail (%i)" msgstr "Correio de voz (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:342 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone é um cliente VoIP compatível com os protocolos SIP e IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:345 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "Sobre o SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:719 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "_Chamar" -#: ../sflphone-client-gnome/src/uimanager.c:720 -#: ../sflphone-client-gnome/src/uimanager.c:1184 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "_Nova ligação" -#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" -msgstr "" +msgstr "Faz uma nova chamada" -#: ../sflphone-client-gnome/src/uimanager.c:721 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Atender" -#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" -msgstr "" +msgstr "Responder a chamada" -#: ../sflphone-client-gnome/src/uimanager.c:722 -#: ../sflphone-client-gnome/src/uimanager.c:991 -#: ../sflphone-client-gnome/src/uimanager.c:1032 -msgid "_Hang up" -msgstr "_Desligar" - -#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" -msgstr "" +msgstr "Terminar a chamada" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "Em _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" -msgstr "" +msgstr "Colocar a chamada em espera" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:725 -#: ../sflphone-client-gnome/src/uimanager.c:1015 -msgid "_Record" -msgstr "_Gravar" - -#: ../sflphone-client-gnome/src/uimanager.c:725 -msgid "Record the current conversation" -msgstr "" +msgstr "Encerrar a chamada em espera" -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "Arquivo de Configuração" -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Erro de configuração no stun" -#: ../sflphone-client-gnome/src/uimanager.c:727 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d mensagem de voz" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" -msgstr "" +msgstr "_Fechar" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" -msgstr "" +msgstr "Minimizar para a bandeja do sistema" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" -msgstr "_Editar" +msgstr "_Sair" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" -msgstr "" +msgstr "Sair do programa" -#: ../sflphone-client-gnome/src/uimanager.c:732 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Editar" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" -msgstr "" +msgstr "_Copiar" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "Remover a conta selecionada" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" -msgstr "" +msgstr "_Colar" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" -msgstr "" +msgstr "Colar o conteúdo da Área de Transferência" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "Limpar _histórico" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "Limpar histórico" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "_Contas" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "Conta atual" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "Preferências" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" -msgstr "" +msgstr "Altera as suas preferências" -#: ../sflphone-client-gnome/src/uimanager.c:740 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Exibir" -#: ../sflphone-client-gnome/src/uimanager.c:743 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Ajuda" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "Continuar" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" -msgstr "" +msgstr "Abrir o manual" -#: ../sflphone-client-gnome/src/uimanager.c:745 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "Autenticação" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "Transferir" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" -msgstr "Transfirir para: " +msgstr "Transfirir para:" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 +msgid "_Record" +msgstr "_Gravar" + +#: ../sflphone-client-gnome/src/uimanager.c:869 +msgid "Record the current conversation" +msgstr "Gravar a conversação atual" + +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" -msgstr "" +msgstr "_Exibir barra de ferramentas" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" -msgstr "" +msgstr "Mostra a barra de ferramentas" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "Desabilitado" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "_Controle de Volumes" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "Exibir controles de volume" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "Histórico" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "Histórico de chamadas" -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Catálogo de endereços" -#: ../sflphone-client-gnome/src/uimanager.c:1003 -#: ../sflphone-client-gnome/src/uimanager.c:1044 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "Em _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:1107 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "_Ligar de volta" -#: ../sflphone-client-gnome/src/uimanager.c:1258 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "Editar número de telefone" -#: ../sflphone-client-gnome/src/uimanager.c:1269 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "Edite o número de telefone antes de fazer uma ligação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Parâmetros de conta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 -#: ../sflphone-client-gnome/src/config/assistant.c:314 -#: ../sflphone-client-gnome/src/config/assistant.c:427 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Apelido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "_Protocolo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Desconhecido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:322 -#: ../sflphone-client-gnome/src/config/assistant.c:435 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "_Nome do host" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 -#: ../sflphone-client-gnome/src/config/assistant.c:330 -#: ../sflphone-client-gnome/src/config/assistant.c:443 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "_Nome do usuário" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 -#: ../sflphone-client-gnome/src/config/assistant.c:346 -#: ../sflphone-client-gnome/src/config/assistant.c:458 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "_Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 -#: ../sflphone-client-gnome/src/config/assistant.c:363 -#: ../sflphone-client-gnome/src/config/assistant.c:473 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 -#: ../sflphone-client-gnome/src/config/assistant.c:368 -#: ../sflphone-client-gnome/src/config/assistant.c:478 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "_Senha da caixa postal de voz" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 +msgid "_User-agent" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "Autenticação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "Segredo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Credencial" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Nome de autenticação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Segurança" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "Use transporte TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "Troca de chave SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Desabilitado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949 msgid "Registration" msgstr "Registro" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953 msgid "Registration expire" msgstr "Registro expira" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962 msgid "_Comply with RFC 3263" msgstr "_De acordo com RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981 msgid "Network Interface" msgstr "A rede está inacessível" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994 msgid "Local address" msgstr "Endereço local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061 msgid "Local port" msgstr "Porta local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131 msgid "Published address" msgstr "Endereço publicado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102 msgid "Using STUN" -msgstr "Utilizando STUN " +msgstr "Utilizando STUN" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109 msgid "STUN server URL" msgstr "URL do servidor STUN" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117 msgid "Same as local parameters" msgstr "Igual aos parâmetros locais" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120 msgid "Set published address and port:" msgstr "Indique endereço e portas publicadas" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140 msgid "Published port" msgstr "Porta publicada" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 +msgid "Codecs" +msgstr "Codecs" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 +msgid "DTMF" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 +msgid "RTP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 +msgid "SIP" +msgstr "SIP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "Configurações da conta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Básico" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "Avançado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 +msgid "Network" +msgstr "Rede" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 +msgid "" +"This profile is used when you want to reach a remote peer simply by typing a " +"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " +"also be used if no account can be matched to an incoming or outgoing call." +msgstr "" +"Este perfil é utilizado quando você deseja alcançar um ponto remoto " +"simplesmente digitando um URI sip como <b>sip:remotepeer</b>. As " +"configurações que você definir aqui também serão utilizadas se nenhuma conta " +"puder ser combinada a uma chamada de entrada ou de saída." + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 +#, c-format msgid "Server returned \"%s\" (%d)" -msgstr "Servidor retornou \"" +msgstr "O Servidor retornou \"%s\" (%d)" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Protocolo" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Estado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "Contas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "Contas Configuradas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 +#, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" -msgstr[0] " conta ativa" -msgstr[1] " conta ativa" +msgstr[0] "conta ativa" +msgstr[1] "conta ativa" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "Você não possui uma conta ativa" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Geral" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Use o catálogo de endereços do Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "Limite de download :" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "cartões" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "_Apresentar foto de contato caso disponível" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "Campos do catálogo de endereços do Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Trabalho" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Casa" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Celular" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Catálogos de endereços" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Selecione qual catálogo de endereços do Evolution deseja utilizar" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:577 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Nome" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "Este assistente está finalizado." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -755,320 +796,325 @@ msgstr "" "Você pode a qualquer momento checar seu estado de registro ou modificar seus " "parâmetros de conta na janela Opções/Contas." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Apelido" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Servidor" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "Nome de usuário" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "Segurança: " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP rascunho-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Nenhum" -#: ../sflphone-client-gnome/src/config/assistant.c:229 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "Assistente de criação de contas do SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Bem vindo ao assistente de criação de contas do SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "Este assistente de instalação irá lhe ajudar a configurar uma conta." -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "Selecione um tipo de conta" -#: ../sflphone-client-gnome/src/config/assistant.c:272 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "Conta" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "Por favor, selecione uma das seguintes opções" -#: ../sflphone-client-gnome/src/config/assistant.c:290 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Criar uma conta gratuita SIP/IAX2 em sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:292 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "Registrar uma conta SIP ou IAX2 existente" -#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "Configurações de conta SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:306 -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Por favor, preencha as informações a seguir" -#: ../sflphone-client-gnome/src/config/assistant.c:376 -#: ../sflphone-client-gnome/src/config/assistant.c:405 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Comunicações seguras com _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "Endereço de e-mail opcional" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "" "Este endereço de email será utilizado para enviar as mensagens de voz em sua " "caixa postal." -#: ../sflphone-client-gnome/src/config/assistant.c:397 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_endereço de email" -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "Configurações de conta IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "" "Você provavelmente precise habilitar isto se estiver por trás de um firewall." -#: ../sflphone-client-gnome/src/config/assistant.c:505 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "Ha_bilitar STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:512 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_Servidor STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "Registro de conta" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Parabéns!" -#: ../sflphone-client-gnome/src/config/audioconf.c:582 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Frequência" -#: ../sflphone-client-gnome/src/config/audioconf.c:587 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Taxa de bits" -#: ../sflphone-client-gnome/src/config/audioconf.c:592 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "Largura de banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:670 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:692 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "Saída" -#: ../sflphone-client-gnome/src/config/audioconf.c:714 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "Entrada" -#: ../sflphone-client-gnome/src/config/audioconf.c:749 -msgid "_Voice Activity Detection" -msgstr "_Detecção de atividade de voz" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Ringtones" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:759 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "_Redução de ruído (Utilização de banda-estreita)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:800 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Gerenciador de Som" -#: ../sflphone-client-gnome/src/config/audioconf.c:809 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:819 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "Configurações do ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:836 -msgid "Codecs" -msgstr "Codecs" - -#: ../sflphone-client-gnome/src/config/audioconf.c:865 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Gravações" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "Pasta de destino" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "Selecione uma pasta" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "Ringtones" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "_Habilitar ringtones" -#: ../sflphone-client-gnome/src/config/audioconf.c:891 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "Escolha um ringtone" -#: ../sflphone-client-gnome/src/config/audioconf.c:897 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "Arquivos de Áudio" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Configurações da conta" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "Argumento da URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "Comandos padrões de ligações recebidas com URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s será substituído pela URL fornecida." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Gancho em um cabeçalho _SIP específico" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Gancho em uma URL _IAX2" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "Comando a _executar" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "Reescrevendo número do telefone" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "_Prefixo de números discados com" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 -msgid "" -"This profile is used when you want to reach a remote peer simply by typing a " -"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " -"also be used if no account can be matched to an incoming or outgoing call." -msgstr "" -"Este perfil é utilizado quando você deseja alcançar um ponto remoto " -"simplesmente digitando um URI sip como <b>sip:remotepeer</b>. As " -"configurações que você definir aqui também serão utilizadas se nenhuma conta " -"puder ser combinada a uma chamada de entrada ou de saída." - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "Notificações de Desktop" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "_Habilitar notificações" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "Ícone da bandeja do sistema" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 +msgid "Show SFLphone in the system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "_Popup na janela principal ao receber ligação" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "Nu_nca apresentar popup na janela principal" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "Esconder o SFLphone na _inicialização" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "Histórico de Chamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "_Manter meu histórico por pelo ao menos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "dias" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "Preferências" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "Áudio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Catálogo de endereços" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "Ganchos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 -msgid "Direct IP calls" -msgstr "Ligações IP diretas" +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 +msgid "Shortcuts" +msgstr "Atalhos" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 +msgid "Be careful: these shortcuts might override system-wide shortcuts." +msgstr "" +"Tenha cuidado: estes atalhos podem predominar sobre atalhos definidos " +"globalmente." + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "Opções avançadas para o TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "Transporte TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1083,143 +1129,125 @@ msgstr "" "funcionar em uma\n" "porta dedicada, uma diferente da outra\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 +msgid "Global TLS listener (all accounts)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "Certificado da lista de Autoridades" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "Escolha um arquivo de lista CA (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "Arquivo certificado endpoint público" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "Escolha um certificado endpoint público (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "Escolha um arquivo de chave privada (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "Senha para a chave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "Método do protocolo TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "Lista de cifras TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "Instância de nome do servidor para saída da conexão TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "Tempo de negociação expirado (seg:mseg)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "Verificar os certificados de entrada, como um servidor" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "Verificar certificados de resposta, como um cliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "Requer certificado para conexões tls entrantes" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 msgid "ZRTP Options" msgstr "Opções ZRTP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "Send Hello Hash in S_DP" msgstr "Enviar um Hash Olá no S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Ask User to Confirm SAS" msgstr "Pergunta ao Usuário para Confirmar SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 msgid "_Warn if ZRTP not supported" msgstr "_Alerta se o ZRTP não é suportado" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 msgid "Display SAS once for hold events" msgstr "Apresenta o SAS uma vez para realizar eventos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "Opções do SDES" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Buscar todos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "Clique aqui para alterar o tipo de pesquisa" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "Buscar por ligações perdidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "Buscar por ligações recebidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "Buscar por ligações feitas" -#~ msgid "IP call - %s" -#~ msgstr "Ligação IP - %s" - -#~ msgid "Codec" -#~ msgstr "Codec" - -#~ msgid "Network" -#~ msgstr "Rede" - -#~ msgid "Manually" -#~ msgstr "Manualmente" - -#~ msgid "There " -#~ msgstr "Ali " - -#~ msgid "is " -#~ msgstr "está " +#~ msgid "_Voice Activity Detection" +#~ msgstr "_Detecção de atividade de voz" -#~ msgid "are " -#~ msgstr "estão " - -#~ msgid "s" -#~ msgstr "s" - -#~ msgid "_Mute other applications during a call" -#~ msgstr "_Silenciar outras aplicações durante uma ligação" - -#~ msgid "SIP Port" -#~ msgstr "Porta SIP" - -#~ msgid "UDP Transport" -#~ msgstr "Transporte UDP" - -#~ msgid "Enable voicemail _notifications" -#~ msgstr "Habilitar _notificações de correio de voz" - -#~ msgid "Store SIP credentials as MD5 hash" -#~ msgstr "Armazenar as credenciais SIP como hash MD5" +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "_Redução de ruído (Utilização de banda-estreita)" #~ msgid "Stun Server" #~ msgstr "Servidor STUN" +#~ msgid "Codec" +#~ msgstr "Codec" + #~ msgid "(C) 2009 Savoir-faire Linux" #~ msgstr "(C) 2009 Savoir-faire Linux" @@ -1247,9 +1275,6 @@ msgstr "Buscar por ligações feitas" #~ msgid "Apply" #~ msgstr "Aplicar" -#~ msgid "SIP" -#~ msgstr "SIP" - #~ msgid "Add" #~ msgstr "Adicionar" @@ -1274,6 +1299,9 @@ msgstr "Buscar por ligações feitas" #~ msgid "Enable notifications" #~ msgstr "Habilitar notificações" +#~ msgid "SIP Port" +#~ msgstr "Porta SIP" + #~ msgid "NAT Traversal" #~ msgstr "NAT Traversal" @@ -1458,6 +1486,20 @@ msgstr "Buscar por ligações feitas" #~ msgid "Prefix dialed numbers with" #~ msgstr "Números discado com o prefixo" +#~ msgid "IP call - %s" +#~ msgstr "Ligação IP - %s" + +#~ msgid "" +#~ "<b>Error: No audio codecs found.\n" +#~ "\n" +#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>." +#~ "sflphone</b> directory in your home( <i>%s</i> )" +#~ msgstr "" +#~ "<b>Erro: Não foram encontrados codecs de áudio.\n" +#~ "\n" +#~ "</b> Os codecs de áudio do SFL tem de ser movidos para o diretório <i>%s</" +#~ "i> ou para o diretório <b>.sflphone</b> em seu home( <i>%s</i> )" + #~ msgid "_Account creation wizard" #~ msgstr "_Assistante de criação de conta" @@ -1482,19 +1524,58 @@ msgstr "Buscar por ligações feitas" #~ "Pressionando \"aplicar\" a camada de rede será reiniciada. De outra forma " #~ "o SFKPhone teria que ser reiniciado." +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Habilitar _notificações de correio de voz" + #~ msgid "PulseAudio sound server" #~ msgstr "Servidor de som PulseAudio" +#~ msgid "_Mute other applications during a call" +#~ msgstr "_Silenciar outras aplicações durante uma ligação" + +#~ msgid "%i account configured" +#~ msgid_plural "%i accounts configured" +#~ msgstr[0] "%i conta configurada" +#~ msgstr[1] "%i contas configuradas" + +#~ msgid "Manually" +#~ msgstr "Manualmente" + +#~ msgid "There " +#~ msgstr "Ali " + +#~ msgid "are " +#~ msgstr "estão " + +#~ msgid "is " +#~ msgstr "está " + +#~ msgid "s" +#~ msgstr "s" + +#~ msgid "UDP Transport" +#~ msgstr "Transporte UDP" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "Armazenar as credenciais SIP como hash MD5" + +#~ msgid "Direct IP calls" +#~ msgstr "Ligações IP diretas" + #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" #~ ",Launchpad Contributions:,Maxime Chambreuil,kalib, ,Launchpad " #~ "Contributions:,Maxime Chambreuil,kalib, ,Launchpad Contributions:,Maxime " -#~ "Chambreuil,kalib, ,Launchpad Contributions:,Maxime Chambreuil,kalib" +#~ "Chambreuil,kalib, ,Launchpad Contributions:,Maxime Chambreuil,kalib, ," +#~ "Launchpad Contributions:,André Gondim,Gustavo Guidorizzi,Maxime " +#~ "Chambreuil,Ricardo Martins,Thaynã Moretti,kalib" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" #~ ",,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,,maxime." #~ "chambreuil@gmail.com,kalibslack@gmail.com,,,maxime.chambreuil@gmail.com," -#~ "kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com" +#~ "kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,," +#~ "andregondim@ubuntu.com,,maxime.chambreuil@gmail.com,ricardo.macedo@yahoo." +#~ "com.br,,kalibslack@gmail.com" diff --git a/sflphone-client-gnome/po/ru/ru.po b/sflphone-client-gnome/po/ru/ru.po index 14b3aa5dd8..ddb7901327 100644 --- a/sflphone-client-gnome/po/ru/ru.po +++ b/sflphone-client-gnome/po/ru/ru.po @@ -7,114 +7,122 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-03 10:22-0500\n" -"PO-Revision-Date: 2009-12-08 20:46+0000\n" -"Last-Translator: Hussein Abdallah <hussein.abdallah@savoirfairelinux.com>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-05-11 07:48+0000\n" +"Last-Translator: DMG <Unknown>\n" "Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\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" -"X-Generator: \n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" +"X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:175 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "Зарегистрирован" -#: ../sflphone-client-gnome/src/accountlist.c:178 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "Не зарегистрирован" -#: ../sflphone-client-gnome/src/accountlist.c:181 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." -msgstr "Подключение..." +msgstr "Пытаюсь..." -#: ../sflphone-client-gnome/src/accountlist.c:184 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "Ошибка" -#: ../sflphone-client-gnome/src/accountlist.c:187 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "Аутентификация не удалась" -#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "Сеть недоступна" -#: ../sflphone-client-gnome/src/accountlist.c:193 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" -msgstr "Узел сети недоступен" +msgstr "Узел недоступен" -#: ../sflphone-client-gnome/src/accountlist.c:196 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Ошибка конфигурации Stun" -#: ../sflphone-client-gnome/src/accountlist.c:199 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Неверный сервер Stun" -#: ../sflphone-client-gnome/src/accountlist.c:202 +#: ../sflphone-client-gnome/src/accountlist.c:208 +msgid "Ready" +msgstr "Готово" + +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" -msgstr "Ошибка" +msgstr "Неверный" -#: ../sflphone-client-gnome/src/actions.c:98 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" -msgstr "Используется учетная запись" +msgstr "Использовать аккаунт" -#: ../sflphone-client-gnome/src/actions.c:104 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" -msgstr "Нет зарегистрированных учëтных записей" +msgstr "У вас нет зарегистрированных аккаунтов" -#: ../sflphone-client-gnome/src/actions.c:285 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" "Невозможно подключиться к SFLphone-серверу.\n" -"Проверьте если демон работает." +"Убедитесь что он работает." -#: ../sflphone-client-gnome/src/actions.c:589 -#: ../sflphone-client-gnome/src/actions.c:911 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "Прямые IP-звонки" -#: ../sflphone-client-gnome/src/actions.c:1103 -#, c-format -msgid "" -"<b>Error: No audio codecs found.\n" -"\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" -msgstr "" -"<b>Ошибка: звуковые кодеки не найдены.\n" -"\n" -"</b> Звуковые кодеки SFL должны находиться в <i>%s</i> или в <b>.sflphone</" -"b> каталоге в вашем домашнем каталоге( <i>%s</i> )" +#: ../sflphone-client-gnome/src/callable_obj.c:390 +msgid "today at %R" +msgstr "сегодня в %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:393 +msgid "yesterday at %R" +msgstr "вчера в %R" + +#: ../sflphone-client-gnome/src/callable_obj.c:395 +msgid "%A at %R" +msgstr "%A в %R" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/callable_obj.c:399 +msgid "%x at %R" +msgstr "%x в %R" + +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -"<b>ALSA-nпредупреждение</b>\n" +"<b>Предупреждение ALSA</b>\n" "\n" -"Ошибка во время активирования устройства проигрывания" +"Ошибка при попытке открытия устройства воспроизведения звука" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -"<b>ALSA-nпредупреждение</b>\n" +"<b>Предупреждение ALSA</b>\n" "\n" -"Ошибка во время активирования устройства входа" +"Ошибка при попытке открытия устройства захвата звука" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -122,86 +130,87 @@ msgid "" msgstr "" "<b>Предупреждение Pulseaudio</b>\n" "\n" -"Pulseaudio не работает" +"Pulseaudio не запущен" -#: ../sflphone-client-gnome/src/mainwindow.c:73 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." -msgstr "Один текущий разговор." +msgstr "Звонок ещё не окончен." -#: ../sflphone-client-gnome/src/mainwindow.c:77 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." -msgstr "Несколько текущих разговоров." +msgstr "Несколько звонков ещё не окончены." -#: ../sflphone-client-gnome/src/mainwindow.c:86 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "Вы уверенны что хотите выйти?" -#: ../sflphone-client-gnome/src/mainwindow.c:298 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "Ошибка SFLphone." -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP не поддерживается устройством %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:393 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" -msgstr "Зашифрованная связь недоступна" +msgstr "Зашифрованная связь недоступна." -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "Продолжить" -#: ../sflphone-client-gnome/src/mainwindow.c:395 -#: ../sflphone-client-gnome/src/mainwindow.c:417 -#: ../sflphone-client-gnome/src/mainwindow.c:431 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" -msgstr "Закончить звонок" +msgstr "Завершить вызов" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -"Из-за ошибки %s переговор с %s перейдëт в не зашифрованный режим.\n" +"Из-за возникновения ошибки %s разговор с %s перейдëт в не зашифрованный " +"режим.\n" "Точная причина: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "Неудачный обмен информации ZRTP" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -"%s хочет остановить зашифрованную связь. В случае подтверждения переговор " -"продолжится без SRTP.\n" +"%s хочет отказаться от использования зашифрованной связи. В случае " +"подтверждения разговор продолжится без SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "Подтвердить переход на незашифрованную связь" -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "Подтвердить" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s аккаунт: %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>От:</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" @@ -209,866 +218,906 @@ msgstr[0] "%d голосовое письмо" msgstr[1] "%d голосовые письма" msgstr[2] "%d голосовые письма" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" -msgstr "Звонок с учëтной записью %s <i>%s</i>" +msgstr "Вызов %s с помощью аккаунта <i>%s</i>" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" -msgstr "Нынешняя учëтная запись" +msgstr "Текущий аккаунт" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" -msgstr "Вы не настроили ни одной учëтной записи" +msgstr "У вас нет настроенных аккаунтов" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" -msgstr "У вас нет зарегистрированных учëтных записей" +msgstr "У вас нет зарегистрированных аккаунтов" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -"<i>с</i> %s\n" +"<i>с:</i> %s\n" "используя %s" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s не поддерживает ZRTP." -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "Обмен информации ZRTP не удался (%s)" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "<i>с</i> %s" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "Громкость" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" -msgstr "Громкость микрофона" +msgstr "Чувствительность микрофона" -#: ../sflphone-client-gnome/src/statusicon.c:96 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "_Показать главное окно" -#: ../sflphone-client-gnome/src/statusicon.c:131 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 +msgid "_Hang up" +msgstr "_Положить трубку" + +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:132 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format -msgid "%i account configured" -msgid_plural "%i accounts configured" -msgstr[0] "Настроена одна учëтная запись" -msgstr[1] "Настроены %i учëтные записи" -msgstr[2] "Настроены %i учëтные записи" - -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:693 -#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "%i active account" +msgid_plural "%i active accounts" +msgstr[0] "%i активный аккаунт" +msgstr[1] "%i активных аккаунтов" +msgstr[2] "%i active accounts" + +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" -msgstr "Автоответчик" +msgstr "Голосовая почта" -#: ../sflphone-client-gnome/src/uimanager.c:117 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" -msgstr "Нет выбранных адресных книг" +msgstr "Адресная книга не выбрана" -#: ../sflphone-client-gnome/src/uimanager.c:137 -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "Адресная книга" -#: ../sflphone-client-gnome/src/uimanager.c:279 +#: ../sflphone-client-gnome/src/uimanager.c:338 +#, c-format msgid "Voicemail (%i)" -msgstr "Автоответчик (%i)" +msgstr "Голосовая почта (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:342 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone - SIP и IAX2-совместимый VoIP-клиент" -#: ../sflphone-client-gnome/src/uimanager.c:345 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" -msgstr "О SFLphone" +msgstr "О программе SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:719 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" -msgstr "_Звонок" +msgstr "_Вызов" -#: ../sflphone-client-gnome/src/uimanager.c:720 -#: ../sflphone-client-gnome/src/uimanager.c:1184 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" -msgstr "_Новый звонок" +msgstr "_Новый вызов" -#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" -msgstr "Позвонить" +msgstr "Сделать новый вызов" -#: ../sflphone-client-gnome/src/uimanager.c:721 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "_Взять трубку" -#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" -msgstr "Ответить" - -#: ../sflphone-client-gnome/src/uimanager.c:722 -#: ../sflphone-client-gnome/src/uimanager.c:991 -#: ../sflphone-client-gnome/src/uimanager.c:1032 -msgid "_Hang up" -msgstr "_Положить трубку" +msgstr "Ответить на вызов" -#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" -msgstr "Закончить звонок" +msgstr "Завершить вызов" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" -msgstr "_Удержать звонок" +msgstr "_Удерживать вызов" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" -msgstr "Удержать звонок" +msgstr "Поставить вызов на удержание" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" -msgstr "_Возобновить разговор" +msgstr "_Снять вызов с удержания" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" -msgstr "Возобновить разговор" +msgstr "Поставить вызов на удержание" -#: ../sflphone-client-gnome/src/uimanager.c:725 -#: ../sflphone-client-gnome/src/uimanager.c:1015 -msgid "_Record" -msgstr "Записать" - -#: ../sflphone-client-gnome/src/uimanager.c:725 -msgid "Record the current conversation" -msgstr "Записать переговор" - -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "Мастер настройки" -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Запустить мастер настройки" -#: ../sflphone-client-gnome/src/uimanager.c:727 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" -msgstr "%d голосовое письмо" +msgstr "Прослушивание голосовой почты" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "_Закрыть" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" -msgstr "Уменьшить в значок" +msgstr "Свернуть в трей" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" -msgstr "_Правка" +msgstr "В_ыход" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "Выйти из программы" -#: ../sflphone-client-gnome/src/uimanager.c:732 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "_Правка" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "_Копировать" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" -msgstr "Копировать видимое" +msgstr "Копировать выделенное" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" -msgstr "_Вставить" +msgstr "В_ставить" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "Вставить из буфера обмена" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" -msgstr "_Стереть журнал" +msgstr "Очистить журнал" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" -msgstr "Очистить историю" +msgstr "Очистить журнал вызовов" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" -msgstr "_Учëтные записи" +msgstr "_Аккаунты" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" -msgstr "Изменить ваши учëтные записи" +msgstr "Нстройка аккаунта" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" -msgstr "_Предпочтения" +msgstr "_Настройки" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" -msgstr "Изменить ваши предпочтении" +msgstr "Изменить ваши настройки" -#: ../sflphone-client-gnome/src/uimanager.c:740 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "_Вид" -#: ../sflphone-client-gnome/src/uimanager.c:743 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "_Помощь" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" -msgstr "Продолжить" +msgstr "Содержание" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" -msgstr "Открыть справочник " +msgstr "Открыть руководство пользователя" -#: ../sflphone-client-gnome/src/uimanager.c:745 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" -msgstr "Идентификация" +msgstr "О программе" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" -msgstr "Переслать звонок на другой номер" +msgstr "Переадресация вызова" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" -msgstr "Переслать звонок на другой номер" +msgstr "Переадресовать вызов" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 +msgid "_Record" +msgstr "_Запись" + +#: ../sflphone-client-gnome/src/uimanager.c:869 +msgid "Record the current conversation" +msgstr "Записать текущий разговор" + +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" -msgstr "Показать панель инструментов" +msgstr "Показать _панель инструментов" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" -msgstr "Показать панель инструментов" +msgstr "Показывать панель инструментов" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" -msgstr "Панель набора номера" +msgstr "_Номеронабиратель" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" -msgstr "Показать панель набора номера" +msgstr "Показывать _номеронабиратель" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" -msgstr "_Настройки громкости" +msgstr "Настройки _громкости" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" -msgstr "_Настройки громкости" +msgstr "Показывать настройки _громкости" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" -msgstr "Журнал" +msgstr "Журнал вызовов" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" -msgstr "Журнал звонков" +msgstr "История вызовов" -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "Адресная книга" -#: ../sflphone-client-gnome/src/uimanager.c:1003 -#: ../sflphone-client-gnome/src/uimanager.c:1044 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" -msgstr "_Удержать звонок" +msgstr "_Удерживать звонок" -#: ../sflphone-client-gnome/src/uimanager.c:1107 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" -msgstr "_Перезвонить" +msgstr "Обратный вызов" -#: ../sflphone-client-gnome/src/uimanager.c:1258 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" -msgstr "Мобильный телефон" +msgstr "Изменить номер телефона" -#: ../sflphone-client-gnome/src/uimanager.c:1269 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" -msgstr "Изменить номер телефона перед звонком" +msgstr "Изменить номер телефона перед вызовом" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "Параметры учетной записи" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 -#: ../sflphone-client-gnome/src/config/assistant.c:314 -#: ../sflphone-client-gnome/src/config/assistant.c:427 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "_Псевдоним" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "Пр_отокол" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "Неизвестный" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:322 -#: ../sflphone-client-gnome/src/config/assistant.c:435 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "Имя или IP-адрес _сервера" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 -#: ../sflphone-client-gnome/src/config/assistant.c:330 -#: ../sflphone-client-gnome/src/config/assistant.c:443 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" -msgstr "Имя или _номер пользователя" +msgstr "Имя пользователя" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 -#: ../sflphone-client-gnome/src/config/assistant.c:346 -#: ../sflphone-client-gnome/src/config/assistant.c:458 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "Па_роль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 -#: ../sflphone-client-gnome/src/config/assistant.c:363 -#: ../sflphone-client-gnome/src/config/assistant.c:473 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "Показать пароль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 -#: ../sflphone-client-gnome/src/config/assistant.c:368 -#: ../sflphone-client-gnome/src/config/assistant.c:478 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" -msgstr "Номер _автоответчика #" +msgstr "Номер _голосовой почты" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 +msgid "_User-agent" +msgstr "_Агент-пользователя" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" -msgstr "Идентификация" +msgstr "Аутентификация" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" -msgstr "Секретный" +msgstr "Пароль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "Параметры доступа" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "Имя для аутентификации" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "Пароль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "Безопасность" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" -msgstr "Использовать TLS-транспорт (sips)" +msgstr "Использовать протокол TLS" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" -msgstr "Обмена ключей SRTP" +msgstr "Обмен ключами SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "Отключен" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949 msgid "Registration" msgstr "Регистрация" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953 msgid "Registration expire" -msgstr "Срок истечения регистрации" +msgstr "Истек срок регистрации" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962 msgid "_Comply with RFC 3263" msgstr "_Соотвествует RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981 msgid "Network Interface" -msgstr "Сетевые настройки" +msgstr "Сетевой интерфейс" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994 msgid "Local address" msgstr "Локальный адрес" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061 msgid "Local port" msgstr "Локальный порт" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131 msgid "Published address" -msgstr "Сетевые настройки для Интернета" +msgstr "Публичный адрес" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102 msgid "Using STUN" -msgstr "Использует STUN " +msgstr "Использовать STUN" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109 msgid "STUN server URL" msgstr "URL STUN-сервера" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117 msgid "Same as local parameters" msgstr "Использовать локальный адрес и порт" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120 msgid "Set published address and port:" -msgstr "Настроить видимый адрес и порт :" +msgstr "Настроить публичный адрес и порт:" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140 msgid "Published port" msgstr "Публичный порт" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 +msgid "Codecs" +msgstr "Кодеки" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 +msgid "DTMF" +msgstr "DTMF" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 +msgid "RTP" +msgstr "RTP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 +msgid "SIP" +msgstr "SIP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" -msgstr "Настройки учëтной записи" +msgstr "Настройки аккаунта" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "Основные" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" -msgstr "Дополнительные" +msgstr "Дополнительно" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 +msgid "Network" +msgstr "Сеть" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 +msgid "" +"This profile is used when you want to reach a remote peer simply by typing a " +"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " +"also be used if no account can be matched to an incoming or outgoing call." +msgstr "" +"Эти настройки используется, когда вы хотите совершить вызов просто набрав " +"SIP URI-адрес вида <b>sip:удалëнное устройство</b>. Эти настройки так-же " +"будут использованы если не будет подходящего аккаунта для входящего или " +"исходящего вызова." + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 +#, c-format msgid "Server returned \"%s\" (%d)" -msgstr "Сервер ответил \"" +msgstr "Ответ сервера \"%s\" (%d)" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "Протокол" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "Статус" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" -msgstr "Учётные записи" +msgstr "Аккаунты" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" -msgstr "Настроенные учëтные записи" +msgstr "Настройка аккаунтов" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 +#, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" -msgstr[0] "Одна действующая учëтная запись" -msgstr[1] "%d действующих учëтных записей" -msgstr[2] "%d действующих учëтных записей" +msgstr[0] "%d активный аккаунт" +msgstr[1] "%d активных аккаунтов" +msgstr[2] "действующий аккаунт" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" -msgstr "У вас нет активной учëтной записи" +msgstr "У вас нет активного аккаунта" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "Общие настройки" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "_Использовать адресную книгу Evolution" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" -msgstr "Показывать не более " +msgstr "Ограничение скорости скачивания:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "карточек" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "_Показать фотографию контакта (если имеется):" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" -msgstr "Исполоьзовать следующие номера из адресной книги Evolution" +msgstr "Использовать следующие поля из адресной книги Evolution:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "_Рабочий" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "_Домашний" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "_Мобильный" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "Адресная книга" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "Выбрать адресную книгу Evolution:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:577 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "Имя" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "Мастер закончил настройку." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" "Вы можете в любое время проверить статус регистрации или изменить параметры " -"ваших учëтных записей в меню Правка / Учëтные записи" +"ваших аккаунтов в меню Правка / Аккаунты." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "Псевдоним" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "Сервер" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" -msgstr "Пользователь" +msgstr "Имя пользователя" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " -msgstr "Безопасность:" +msgstr "Безопасность " -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "Нет" -#: ../sflphone-client-gnome/src/config/assistant.c:229 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" -msgstr "Мастер настройки SFLphone" +msgstr "Мастер создания аккаунта SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" -msgstr "Добро пожаловать в SFLphone!" +msgstr "Добро пожаловать в мастер создания аккаунта SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." -msgstr "Этот мастер установки поможет вам настроить вашу учëтную запись" +msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "VoIP-протоколы" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" -msgstr "Выберите тип учëтной записи" +msgstr "Выберите тип аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:272 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" -msgstr "Учëтная запись" +msgstr "Аккаунт" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" -msgstr "Введите пожалуйста следующие данные" +msgstr "Выберите одну из следующих возможностей" -#: ../sflphone-client-gnome/src/config/assistant.c:290 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" -msgstr "Создать бесплатную SIP/IAX2-учëтную запись на sflphone.org" +msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:292 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" -msgstr "Зарегистрировать существующею SIP или IAX2 учëтную запись" +msgstr "Использовать существующий SIP или IAX2 аккаунт" -#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" -msgstr "Настройка учëтной записи SIP" +msgstr "Настройка SIP-аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:306 -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "Введите пожалуйста следующие данные" -#: ../sflphone-client-gnome/src/config/assistant.c:376 -#: ../sflphone-client-gnome/src/config/assistant.c:405 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "Защищëнная связь с _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" -msgstr "Электронный адрес (необязательный)" +msgstr "e-mail" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." -msgstr "Этот электронный адрес будет использоваться для речевых сообщений" +msgstr "" +"Этот электронный адрес будет использоваться для отправки сообщений голосовой " +"почты" -#: ../sflphone-client-gnome/src/config/assistant.c:397 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "_Адрес эл. почты" -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" -msgstr "Настройка учëтной записи IAX2" +msgstr "Настройка IAX2-аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." -msgstr "Вы наверное должны это включить если вы находитесь за сетевым экраном." +msgstr "" +"Возможно нужно выбрать эту опцию если вы находитесь за сетевым экраном." -#: ../sflphone-client-gnome/src/config/assistant.c:505 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "Включить STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:512 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "_STUN-сервер" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" -msgstr "Регистрация учëтной записи" +msgstr "Регистрация аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "Поздравляем!" -#: ../sflphone-client-gnome/src/config/audioconf.c:582 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "Частота" -#: ../sflphone-client-gnome/src/config/audioconf.c:587 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "Битрейт" -#: ../sflphone-client-gnome/src/config/audioconf.c:592 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" -msgstr "Пропускная способность" +msgstr "Полоса пропускания" -#: ../sflphone-client-gnome/src/config/audioconf.c:670 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "ALSA-плагин" -#: ../sflphone-client-gnome/src/config/audioconf.c:692 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" -msgstr "Выход" +msgstr "Аудиовыход" -#: ../sflphone-client-gnome/src/config/audioconf.c:714 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" -msgstr "Вход" +msgstr "Аудиовход" -#: ../sflphone-client-gnome/src/config/audioconf.c:749 -msgid "_Voice Activity Detection" -msgstr "Включить детектор тишины" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "Рингтоны" -#: ../sflphone-client-gnome/src/config/audioconf.c:759 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "Шумоподавление" +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" + +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +msgid "_Noise Reduction" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:800 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "Менеджер звука" -#: ../sflphone-client-gnome/src/config/audioconf.c:809 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:819 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "Настройка ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:836 -msgid "Codecs" -msgstr "Кодеки" - -#: ../sflphone-client-gnome/src/config/audioconf.c:865 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "Записи" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" -msgstr "Папка назначения" +msgstr "Сохранять в" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" -msgstr "Выберите папку" +msgstr "Выберите каталог" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" -msgstr "Звонки" +msgstr "Рингтоны" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" -msgstr "Включить звонок" +msgstr "Включить рингтон" -#: ../sflphone-client-gnome/src/config/audioconf.c:891 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" -msgstr "Выберите звонок" +msgstr "Выберать рингтон" -#: ../sflphone-client-gnome/src/config/audioconf.c:897 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" -msgstr "Звуковые файлы" +msgstr "Аудио файлы" + +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "Настройки аккаунта" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "Передача URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" -msgstr "Пользовательские команды при входящих вызовах с URL" +msgstr "Пользовательская команда при входящих вызовах с URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "%s будет заменена на переданную URL" -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "Запустить при определëнном SIP-заголовке" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "Запустить при наличии URL _IAX2" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "_Выполнить команду:" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" -msgstr "Переписка номера телефона" +msgstr "Префикс" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" -msgstr "Добавить перед на набранными номерами" +msgstr "Добавить префикс перед номером" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 -msgid "" -"This profile is used when you want to reach a remote peer simply by typing a " -"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " -"also be used if no account can be matched to an incoming or outgoing call." -msgstr "" -"Этот профиль используется когда вы хотите достичь удалëнное устройство " -"просто набрав SIP URI (адрес) типа <b>sip:удалëнное устройство</b>. Эти " -"настройки так-же будут использованы если не будет подходящего аккаунта для " -"входящего или выходящего звонка." - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" -msgstr "Извещения на рабочем столе" +msgstr "Всплывающие уведомления" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" -msgstr "Включить звонок" +msgstr "Показывать всплывающие уведомления" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" -msgstr "Поведение окна SFLPhone" +msgstr "Значок в системном трее" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 +msgid "Show SFLphone in the system tray" +msgstr "Показывать SFLphone в системном трее" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" -msgstr "_Показать главное окно при входящем звонке" +msgstr "_Показать главное окно при входящем вызове" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" -msgstr "Никогда не показывать главное окно" +msgstr "_Никогда не показывать главное окно" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" -msgstr "Спрятать окно SFLphone при пуске" +msgstr "Скрывать SFLphone при запуске в трей" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" -msgstr "Журнал звонков" +msgstr "Журнал вызовов" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" -msgstr "Со_хранить мой журнал звонков как минимум в течении" +msgstr "_Хранить журнал вызовов в течении" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "дней" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" -msgstr "Предпочтения" +msgstr "Настройка" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" -msgstr "Звук" +msgstr "Аудио" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "Адресная книга" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" -msgstr "Зацепки" +msgstr "Прочее" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 -msgid "Direct IP calls" -msgstr "Прямые IP-звонки" +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 +msgid "Shortcuts" +msgstr "Горячие клавиши" + +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 +msgid "Be careful: these shortcuts might override system-wide shortcuts." +msgstr "ВНИМАНИЕ: эти комбинации могут заменить системные комбинации клавиш" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" -msgstr "Дополнительные опции для TLS" +msgstr "Дополнительные настройки для TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "Транспорт TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1081,139 +1130,118 @@ msgstr "" "каждого аккаунта (но каждый из них будет использовать свой выделенный " "порт).\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 +msgid "Global TLS listener (all accounts)" +msgstr "Global TLS listener (для всех аккаунтов)" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" -msgstr "Список центра сертификации" +msgstr "Список центров сертификации" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" -msgstr "Выберите файл Центра сертификации (необязательный)" +msgstr "Выберите файл Центра сертификации (необязательно)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "Файл с публичным сертификатом" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" -msgstr "Выберите публичный сертификат (необязательный)" +msgstr "Выберите публичный сертификат (необязательно)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" -msgstr "Выберите файл с секретным ключом (необязательно)" +msgstr "Выберите файл с приватным ключом (необязательно)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" -msgstr "Пароль для секретного ключа" +msgstr "Пароль для приватного ключа" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "Метод протокола TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "Список шифров TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" -msgstr "Имя сервера для выходящих TLS-подключений." +msgstr "Имя сервера для исходящих TLS-подключений" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "Время ожидания соединения (сек:мсек)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" -msgstr "Проверять входящие сертификаты (в качестве сервера)" +msgstr "Проверять входящие сертификаты как сервер" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" -msgstr "Проверять входящие сертификаты (в качестве клиента)" +msgstr "Проверять входящие сертификаты как клиент" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "Требовать сертификат для входящих TLS-подключений" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 msgid "ZRTP Options" msgstr "Опции ZRTP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "Send Hello Hash in S_DP" msgstr "Послать hello-хэш в S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Ask User to Confirm SAS" msgstr "Попросить пользователя подтвердить пароль SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 msgid "_Warn if ZRTP not supported" msgstr "_Предупредить если ZRTP не пддерживается" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 msgid "Display SAS once for hold events" msgstr "Показать SAS один раз" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "Настройка SDES" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "Использовать RTP при сбое SDES" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "Искать все" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" -msgstr "Нажмите, чтобы изменить тип поиска" +msgstr "Нажмите сюда, чтобы изменить тип поиска" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" -msgstr "Поиск по пропущенным вызовам" +msgstr "Поиск в пропущенных вызовах" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" -msgstr "Поиск по входящим вызовам" +msgstr "Поиск в входящих вызовах" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" -msgstr "Поиск по исходящим вызовам" - -#~ msgid "IP call - %s" -#~ msgstr "IP звонок - %s" - -#~ msgid "Codec" -#~ msgstr "Codec" - -#~ msgid "Network" -#~ msgstr "Сеть" - -#~ msgid "Manually" -#~ msgstr "Вручную" +msgstr "Поиск в исходящих вызовах" -#~ msgid "There " -#~ msgstr "Здесь " - -#~ msgid "is " -#~ msgstr "Зарегестрирован " - -#~ msgid "are " -#~ msgstr "Зарегестрированны " - -#~ msgid "s" -#~ msgstr "a" +#~ msgid "_Voice Activity Detection" +#~ msgstr "Детектор тишины (VAD)" -#~ msgid "_Mute other applications during a call" -#~ msgstr "Приглушать звук других програм во время звонка" - -#~ msgid "SIP Port" -#~ msgstr "SIP-порт" - -#~ msgid "UDP Transport" -#~ msgstr "Транспорт UDP" - -#~ msgid "Enable voicemail _notifications" -#~ msgstr "Включить предупреждения о речевых сообщениях" - -#~ msgid "Store SIP credentials as MD5 hash" -#~ msgstr "Записать параметры доступа SIP с шифровкой MD5." +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "Шумоподавление" #~ msgid "Account creation wizard" #~ msgstr "Мастер настройки SFLphone" @@ -1221,6 +1249,9 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Voicemail number" #~ msgstr "Номер автоответчика #" +#~ msgid "Codec" +#~ msgstr "Codec" + #~ msgid "Display volume controls" #~ msgstr "_Настройки громкости" @@ -1266,21 +1297,44 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Sound manager" #~ msgstr "Менеджер звука" +#~ msgid "SIP Port" +#~ msgstr "SIP-порт" + #~ msgid "Command to run" #~ msgstr "Выполнить команду:" #~ msgid "Prefix dialed numbers with" #~ msgstr "Добавить перед на набранными номерами" +#~ msgid "IP call - %s" +#~ msgstr "IP звонок - %s" + +#~ msgid "" +#~ "<b>Error: No audio codecs found.\n" +#~ "\n" +#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>." +#~ "sflphone</b> directory in your home( <i>%s</i> )" +#~ msgstr "" +#~ "<b>Ошибка: звуковые кодеки не найдены.\n" +#~ "\n" +#~ "</b> Звуковые кодеки SFL должны находиться в <i>%s</i> или в <b>." +#~ "sflphone</b> каталоге в вашем домашнем каталоге( <i>%s</i> )" + #~ msgid "_Account creation wizard" #~ msgstr "Мастер настройки SFLphone" #~ msgid "_Enable this account" #~ msgstr "_Включить" +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Включить предупреждения о речевых сообщениях" + #~ msgid "PulseAudio sound server" #~ msgstr "Сервер звука PulseAudio" +#~ msgid "_Mute other applications during a call" +#~ msgstr "Приглушать звук других програм во время звонка" + #~ msgid "Port" #~ msgstr "Порт" @@ -1444,9 +1498,6 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "IAX" #~ msgstr "IAX" -#~ msgid "SIP" -#~ msgstr "SIP" - #~ msgid "PulseAudio" #~ msgstr "PulseAudio" @@ -1456,6 +1507,27 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Enable notifications" #~ msgstr "Включить уведомления" +#~ msgid "Manually" +#~ msgstr "Вручную" + +#~ msgid "UDP Transport" +#~ msgstr "Транспорт UDP" + +#~ msgid "There " +#~ msgstr "Здесь " + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "Записать параметры доступа SIP с шифровкой MD5." + +#~ msgid "s" +#~ msgstr "a" + +#~ msgid "are " +#~ msgstr "Зарегестрированны " + +#~ msgid "is " +#~ msgstr "Зарегестрирован " + #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" @@ -1464,11 +1536,14 @@ msgstr "Поиск по исходящим вызовам" #~ "Sergei Sedov, ,Launchpad Contributions:,Emmanuel Milou,Hussein Abdallah," #~ "Hussein Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi,Sergei Sedov, ," #~ "Launchpad Contributions:,Emmanuel Milou,Hussein Abdallah,Hussein Abdallah," -#~ "Maxime Chambreuil,Pavlo Kucheriavyi,Sergey Sedov" +#~ "Maxime Chambreuil,Pavlo Kucheriavyi,Sergey Sedov, ,Launchpad " +#~ "Contributions:,DMG,Emmanuel Milou,Hussein Abdallah,Hussein Abdallah," +#~ "Lortonix,Maxime Chambreuil,Pavlo Kucheriavyi,Sergey Sedov" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" #~ ",,,,,emmanuel.milou@savoirfairelinux.com,,maxime.chambreuil@gmail.com,,,,," #~ "emmanuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,,,,," -#~ "emmanuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,," +#~ "emmanuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,,,,,," +#~ "emmanuel.milou@savoirfairelinux.com,,,,maxime.chambreuil@gmail.com,," diff --git a/sflphone-client-gnome/po/zh_CN/zh_CN.po b/sflphone-client-gnome/po/zh_CN/zh_CN.po index bfc3429d51..d2df50e47a 100644 --- a/sflphone-client-gnome/po/zh_CN/zh_CN.po +++ b/sflphone-client-gnome/po/zh_CN/zh_CN.po @@ -8,68 +8,72 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-03 10:22-0500\n" -"PO-Revision-Date: 2009-10-26 20:46+0000\n" -"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2010-02-28 01:32+0000\n" +"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:175 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "已注册" -#: ../sflphone-client-gnome/src/accountlist.c:178 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "未注册" -#: ../sflphone-client-gnome/src/accountlist.c:181 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "正在连接..." -#: ../sflphone-client-gnome/src/accountlist.c:184 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "注册失败" -#: ../sflphone-client-gnome/src/accountlist.c:187 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "认证失败" -#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "网络连接失败" -#: ../sflphone-client-gnome/src/accountlist.c:193 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "服务器连接失败" -#: ../sflphone-client-gnome/src/accountlist.c:196 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Stun配置有误" -#: ../sflphone-client-gnome/src/accountlist.c:199 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Stun服务器无效" -#: ../sflphone-client-gnome/src/accountlist.c:202 +#: ../sflphone-client-gnome/src/accountlist.c:208 +msgid "Ready" +msgstr "" + +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "无效" -#: ../sflphone-client-gnome/src/actions.c:98 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "使用账户" -#: ../sflphone-client-gnome/src/actions.c:104 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "没有已注册帐户" -#: ../sflphone-client-gnome/src/actions.c:285 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -77,25 +81,28 @@ msgstr "" "连接SFLphone服务器失败.\n" "请检查daemon是否还在运行." -#: ../sflphone-client-gnome/src/actions.c:589 -#: ../sflphone-client-gnome/src/actions.c:911 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1103 -#, c-format -msgid "" -"<b>Error: No audio codecs found.\n" -"\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" +#: ../sflphone-client-gnome/src/callable_obj.c:390 +msgid "today at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:393 +msgid "yesterday at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:395 +msgid "%A at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:399 +msgid "%x at %R" msgstr "" -"<b>错误:无法找到codecs编码文件.\n" -"\n" -"</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>." -"sflphone</b>目录下" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -105,7 +112,7 @@ msgstr "" "\n" "打开回放设备时出错" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -115,7 +122,7 @@ msgstr "" "\n" "打开采集设备时出错" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -125,935 +132,973 @@ msgstr "" "\n" "Pulseaudio未运行" -#: ../sflphone-client-gnome/src/mainwindow.c:73 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "有一个电话正在处理" -#: ../sflphone-client-gnome/src/mainwindow.c:77 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "有电话正在处理中" -#: ../sflphone-client-gnome/src/mainwindow.c:86 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "确认要退出?" -#: ../sflphone-client-gnome/src/mainwindow.c:298 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "SFLphone出错" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:393 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "安全通信不可用" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "继续" -#: ../sflphone-client-gnome/src/mainwindow.c:395 -#: ../sflphone-client-gnome/src/mainwindow.c:417 -#: ../sflphone-client-gnome/src/mainwindow.c:431 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "停止呼叫" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "确认" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s 帐户: %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>拨入方</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d 个语音信息" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "使用%s帐户<i>%s</i>呼叫" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "当前帐户" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "你没有设置任何账户" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "未发现已注册帐户" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "%s 不支持 ZRTP。" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "扬声器音量" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "话筒音量" -#: ../sflphone-client-gnome/src/statusicon.c:96 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "显示主窗口(S)" -#: ../sflphone-client-gnome/src/statusicon.c:131 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 +msgid "_Hang up" +msgstr "挂断(_H)" + +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:132 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format -msgid "%i account configured" -msgid_plural "%i accounts configured" -msgstr[0] "已配置了%i个账户" +msgid "%i active account" +msgid_plural "%i active accounts" +msgstr[0] "" +msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:693 -#: ../sflphone-client-gnome/src/uimanager.c:727 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "语音信箱" -#: ../sflphone-client-gnome/src/uimanager.c:117 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:137 -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:279 +#: ../sflphone-client-gnome/src/uimanager.c:338 +#, c-format msgid "Voicemail (%i)" msgstr "语音信箱 (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:342 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone是一个VoIP客户端,它兼容SIP和IAX2协议." -#: ../sflphone-client-gnome/src/uimanager.c:345 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "关于SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:719 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "电话(_C)" -#: ../sflphone-client-gnome/src/uimanager.c:720 -#: ../sflphone-client-gnome/src/uimanager.c:1184 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "新电话(_N)" -#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:721 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "接听(_P)" -#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:722 -#: ../sflphone-client-gnome/src/uimanager.c:991 -#: ../sflphone-client-gnome/src/uimanager.c:1032 -msgid "_Hang up" -msgstr "挂断(_H)" - -#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "保持(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "恢复通话" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:725 -#: ../sflphone-client-gnome/src/uimanager.c:1015 -msgid "_Record" -msgstr "录音(_R)" - -#: ../sflphone-client-gnome/src/uimanager.c:725 -msgid "Record the current conversation" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Stun配置有误" -#: ../sflphone-client-gnome/src/uimanager.c:727 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d 个语音信息" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" -msgstr "编辑(_E)" +msgstr "退出(_Q)" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:732 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "编辑(_E)" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "删除所选账户" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "清空历史记录(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "清空历史记录" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "账户(_A)" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "当前帐户" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" -msgstr "首选项" +msgstr "首选项(_P)" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" -msgstr "" +msgstr "更改您的首选项" -#: ../sflphone-client-gnome/src/uimanager.c:740 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "查看(_V)" -#: ../sflphone-client-gnome/src/uimanager.c:743 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "帮助(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "继续" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:745 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "身份验证" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "转接" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" -msgstr "转给: " +msgstr "转给:" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 +msgid "_Record" +msgstr "录音(_R)" + +#: ../sflphone-client-gnome/src/uimanager.c:869 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "禁用" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "音量控制(V)" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "音量控制(V)" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "历史" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "呼叫记录" -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:1003 -#: ../sflphone-client-gnome/src/uimanager.c:1044 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "保持(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:1107 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "回叫(_C)" -#: ../sflphone-client-gnome/src/uimanager.c:1258 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "编辑电话号码" -#: ../sflphone-client-gnome/src/uimanager.c:1269 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "拨出电话前编辑电话号码" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "帐户相关参数" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 -#: ../sflphone-client-gnome/src/config/assistant.c:314 -#: ../sflphone-client-gnome/src/config/assistant.c:427 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "别名(A)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "协议(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "未知" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:322 -#: ../sflphone-client-gnome/src/config/assistant.c:435 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "主机名(H)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 -#: ../sflphone-client-gnome/src/config/assistant.c:330 -#: ../sflphone-client-gnome/src/config/assistant.c:443 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "用户名(U)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 -#: ../sflphone-client-gnome/src/config/assistant.c:346 -#: ../sflphone-client-gnome/src/config/assistant.c:458 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "密码(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 -#: ../sflphone-client-gnome/src/config/assistant.c:363 -#: ../sflphone-client-gnome/src/config/assistant.c:473 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "密码" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 -#: ../sflphone-client-gnome/src/config/assistant.c:368 -#: ../sflphone-client-gnome/src/config/assistant.c:478 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "语音信箱号码(V)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 +msgid "_User-agent" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "身份验证" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "密码" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "安全" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "禁用" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949 msgid "Registration" msgstr "注册" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981 msgid "Network Interface" msgstr "网络连接失败" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131 msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102 msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109 msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117 msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120 msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 +msgid "Codecs" +msgstr "Codecs编码" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 +msgid "DTMF" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 +msgid "RTP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 +msgid "SIP" +msgstr "SIP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "帐户设置" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 +msgid "Network" +msgstr "网络" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 +msgid "" +"This profile is used when you want to reach a remote peer simply by typing a " +"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " +"also be used if no account can be matched to an incoming or outgoing call." +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "协议" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "状态" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "帐户" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "已配置帐户" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" +msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "常用配置" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "使用Evolution地址薄(U)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "下载上限:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "卡" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "如果可行则显示联系人照片(D)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "使用Evolution地址薄中的如下字段:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "单位电话(W)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "家庭电话(H)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "移动电话(M)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "选择使用如下Evolution地址薄" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:577 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "名称" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "配置完成." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "你可以随时在 选项/帐户 窗口中查看注册状态或者修改帐户参数." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "别名" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "服务器" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "用户名" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:229 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "SFLphone账户创建向导" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "欢迎使用SFLphone帐户创建向导!" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "安装向导将帮助您配置帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "VoIP协议" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "选择帐户类型" -#: ../sflphone-client-gnome/src/config/assistant.c:272 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP(会话初始化协议)" -#: ../sflphone-client-gnome/src/config/assistant.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2(Asterisk内部交换协议)" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "请选择以下选项中的一个" -#: ../sflphone-client-gnome/src/config/assistant.c:290 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "在sflphone.org上创建免费的SIP/IAX2帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:292 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "注册已存在的SIP或IAX2帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "SIP帐户设置" -#: ../sflphone-client-gnome/src/config/assistant.c:306 -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "请填写以下信息" -#: ../sflphone-client-gnome/src/config/assistant.c:376 -#: ../sflphone-client-gnome/src/config/assistant.c:405 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "可选邮件地址" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "这个邮件地址将被用来发送您的语音邮箱消息" -#: ../sflphone-client-gnome/src/config/assistant.c:397 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "邮件地址(E)" -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "IAX2帐户设置" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "网络地址解析(NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "如果你使用网络使用防火墙,你很有可能需要设定此项." -#: ../sflphone-client-gnome/src/config/assistant.c:505 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "使用STUN(n)" -#: ../sflphone-client-gnome/src/config/assistant.c:512 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "STUN服务器(S)" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "帐户注册" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "恭喜!" -#: ../sflphone-client-gnome/src/config/audioconf.c:582 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "频率" -#: ../sflphone-client-gnome/src/config/audioconf.c:587 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "比率" -#: ../sflphone-client-gnome/src/config/audioconf.c:592 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "带宽" -#: ../sflphone-client-gnome/src/config/audioconf.c:670 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "ALSA插件" -#: ../sflphone-client-gnome/src/config/audioconf.c:692 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "输出" -#: ../sflphone-client-gnome/src/config/audioconf.c:714 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "输入" -#: ../sflphone-client-gnome/src/config/audioconf.c:749 -msgid "_Voice Activity Detection" -msgstr "声音状态检测(V)" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "铃声" + +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:759 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "降噪处理-窄频压缩(N)" +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +#, fuzzy +msgid "_Noise Reduction" +msgstr "降噪" -#: ../sflphone-client-gnome/src/config/audioconf.c:800 +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "音频管理器" -#: ../sflphone-client-gnome/src/config/audioconf.c:809 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:819 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "ALSA设置" -#: ../sflphone-client-gnome/src/config/audioconf.c:836 -msgid "Codecs" -msgstr "Codecs编码" - -#: ../sflphone-client-gnome/src/config/audioconf.c:865 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "记录" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "目标文件夹" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "选择文件夹" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "铃声" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "启用铃声(E)" -#: ../sflphone-client-gnome/src/config/audioconf.c:891 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "选择铃声" -#: ../sflphone-client-gnome/src/config/audioconf.c:897 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "音频文件" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "帐户设置" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "URL参数" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "定制对带有URL的来电的处理" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "传输的URL会被替换成%s." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "激活指定的SIP头(S)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "激活IAX2 URL(I)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "运行命令(r)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "重设电话号码" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "号码前缀(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 -msgid "" -"This profile is used when you want to reach a remote peer simply by typing a " -"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " -"also be used if no account can be matched to an incoming or outgoing call." -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "桌面提示" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "启用提示(E)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "系统托盘图标" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 +msgid "Show SFLphone in the system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "来电时弹出主窗口(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "从不弹出主窗口(v)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "在启动时隐藏SFLphone主窗口" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "拨号历史" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "首选项" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "钩键" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 -msgid "Direct IP calls" +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 +msgid "Shortcuts" +msgstr "" + +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 +msgid "Be careful: these shortcuts might override system-wide shortcuts." msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1062,118 +1107,118 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 +msgid "Global TLS listener (all accounts)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "查询所有" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "请点击此处改变查询方式" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "从未接电话中查询" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "从来电中查询" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "从拨出电话中查询" -#~ msgid "IP call - %s" -#~ msgstr "IP 电话 - %s" - -#~ msgid "Codec" -#~ msgstr "编码" - -#~ msgid "Network" -#~ msgstr "网络" - -#~ msgid "_Mute other applications during a call" -#~ msgstr "当有来电时静音其它应用程序(c)" - -#~ msgid "SIP Port" -#~ msgstr "SIP端口号" +#~ msgid "_Voice Activity Detection" +#~ msgstr "声音状态检测(V)" -#~ msgid "Enable voicemail _notifications" -#~ msgstr "启用语音邮箱提示(n)" +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "降噪处理-窄频压缩(N)" #~ msgid "Account creation wizard" #~ msgstr "帐户创建向导" @@ -1195,6 +1240,9 @@ msgstr "从拨出电话中查询" #~ msgid "Default account" #~ msgstr "默认帐户" +#~ msgid "Codec" +#~ msgstr "编码" + #~ msgid "SFLphone KDE Client" #~ msgstr "SFLphone KDE客户端" @@ -1312,9 +1360,6 @@ msgstr "从拨出电话中查询" #~ msgid "Apply" #~ msgstr "应用" -#~ msgid "SIP" -#~ msgstr "SIP" - #~ msgid "IAX" #~ msgstr "IAX" @@ -1381,6 +1426,9 @@ msgstr "从拨出电话中查询" #~ msgid "On start" #~ msgstr "正在启动" +#~ msgid "SIP Port" +#~ msgstr "SIP端口号" + #~ msgid "Trigger on specific SIP header" #~ msgstr "激活指定的SIP头" @@ -1396,12 +1444,36 @@ msgstr "从拨出电话中查询" #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "注意:结果超过可显示的最大值" +#~ msgid "IP call - %s" +#~ msgstr "IP 电话 - %s" + +#~ msgid "" +#~ "<b>Error: No audio codecs found.\n" +#~ "\n" +#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>." +#~ "sflphone</b> directory in your home( <i>%s</i> )" +#~ msgstr "" +#~ "<b>错误:无法找到codecs编码文件.\n" +#~ "\n" +#~ "</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>." +#~ "sflphone</b>目录下" + +#~ msgid "%i account configured" +#~ msgid_plural "%i accounts configured" +#~ msgstr[0] "已配置了%i个账户" + #~ msgid "_Enable this account" #~ msgstr "启用该账户(E)" +#~ msgid "Enable voicemail _notifications" +#~ msgstr "启用语音邮箱提示(n)" + #~ msgid "PulseAudio sound server" #~ msgstr "PulseAudio服务器" +#~ msgid "_Mute other applications during a call" +#~ msgstr "当有来电时静音其它应用程序(c)" + #~ msgid "Port" #~ msgstr "端口" @@ -1678,9 +1750,6 @@ msgstr "从拨出电话中查询" #~ msgid "%s account- %s" #~ msgstr "%s 帐户- %s" -#~ msgid "Noise reduction" -#~ msgstr "降噪" - #~ msgid "_Destination folder" #~ msgstr "目标文件夹(D)" @@ -1702,7 +1771,8 @@ msgstr "从拨出电话中查询" #~ "Yun Liu, ,Launchpad Contributions:,Aron Xu,Yun Liu, ,Launchpad " #~ "Contributions:,Aron Xu,Yinghua Wang,Yun Liu,rainofchaos, ,Launchpad " #~ "Contributions:,Aron Xu,Yinghua Wang,Yun Liu,冯超, ,Launchpad " -#~ "Contributions:,Aron Xu,Emmanuel Milou,Yun Liu,冯超,王英华" +#~ "Contributions:,Aron Xu,Emmanuel Milou,Yun Liu,冯超,王英华, ,Launchpad " +#~ "Contributions:,Aron Xu,Emmanuel Milou,Yun Liu,YunQiang Su,冯超,英华" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" @@ -1710,4 +1780,5 @@ msgstr "从拨出电话中查询" #~ "yunliu2000@gmail.com,,,happyaron.xu@gmail.com,,,,happyaron.xu@gmail.com,,," #~ "rainofchaos@gmail.com,,,happyaron.xu@gmail.com,,,rainofchaos@gmail.com,,,," #~ "emmanuel.milou@savoirfairelinux.com,,rainofchaos@gmail.com," -#~ "wantinghard@gmail.com" +#~ "wantinghard@gmail.com,,,,emmanuel.milou@savoirfairelinux.com,," +#~ "wzssyqa@gmail.com,rainofchaos@gmail.com,wantinghard@gmail.com" diff --git a/sflphone-client-gnome/po/zh_HK/zh_HK.po b/sflphone-client-gnome/po/zh_HK/zh_HK.po index 0e4afca0c5..ef06d0715a 100644 --- a/sflphone-client-gnome/po/zh_HK/zh_HK.po +++ b/sflphone-client-gnome/po/zh_HK/zh_HK.po @@ -8,68 +8,72 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-03 10:22-0500\n" -"PO-Revision-Date: 2009-10-26 20:46+0000\n" +"POT-Creation-Date: 2010-06-17 14:22-0400\n" +"PO-Revision-Date: 2009-12-03 18:09+0000\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" +"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: ../sflphone-client-gnome/src/accountlist.c:175 +#: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Registered" msgstr "已註冊" -#: ../sflphone-client-gnome/src/accountlist.c:178 +#: ../sflphone-client-gnome/src/accountlist.c:184 msgid "Not Registered" msgstr "未註冊" -#: ../sflphone-client-gnome/src/accountlist.c:181 +#: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Trying..." msgstr "正在連接..." -#: ../sflphone-client-gnome/src/accountlist.c:184 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 +#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:142 +#: ../sflphone-client-gnome/src/sflnotify.c:159 msgid "Error" msgstr "註冊失敗" -#: ../sflphone-client-gnome/src/accountlist.c:187 +#: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Authentication Failed" msgstr "" -#: ../sflphone-client-gnome/src/accountlist.c:190 +#: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Network unreachable" msgstr "網路連線失敗" -#: ../sflphone-client-gnome/src/accountlist.c:193 +#: ../sflphone-client-gnome/src/accountlist.c:199 msgid "Host unreachable" msgstr "伺服器連線失敗" -#: ../sflphone-client-gnome/src/accountlist.c:196 +#: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Stun configuration error" msgstr "Stun配置有誤" -#: ../sflphone-client-gnome/src/accountlist.c:199 +#: ../sflphone-client-gnome/src/accountlist.c:205 msgid "Stun server invalid" msgstr "Stun伺服器無效" -#: ../sflphone-client-gnome/src/accountlist.c:202 +#: ../sflphone-client-gnome/src/accountlist.c:208 +msgid "Ready" +msgstr "" + +#: ../sflphone-client-gnome/src/accountlist.c:211 msgid "Invalid" msgstr "無效" -#: ../sflphone-client-gnome/src/actions.c:98 +#: ../sflphone-client-gnome/src/actions.c:125 msgid "Using account" msgstr "使用賬戶" -#: ../sflphone-client-gnome/src/actions.c:104 +#: ../sflphone-client-gnome/src/actions.c:132 msgid "No registered accounts" msgstr "沒有已註冊帳戶" -#: ../sflphone-client-gnome/src/actions.c:285 +#: ../sflphone-client-gnome/src/actions.c:319 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -77,25 +81,28 @@ msgstr "" "連接SFLphone伺服器失敗.\n" "請核查daemon是否正在運行." -#: ../sflphone-client-gnome/src/actions.c:589 -#: ../sflphone-client-gnome/src/actions.c:911 +#: ../sflphone-client-gnome/src/actions.c:620 +#: ../sflphone-client-gnome/src/actions.c:946 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1103 -#, c-format -msgid "" -"<b>Error: No audio codecs found.\n" -"\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" +#: ../sflphone-client-gnome/src/callable_obj.c:390 +msgid "today at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:393 +msgid "yesterday at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:395 +msgid "%A at %R" +msgstr "" + +#: ../sflphone-client-gnome/src/callable_obj.c:399 +msgid "%x at %R" msgstr "" -"<b>錯誤:無法找到音訊編碼檔案.\n" -"\n" -"</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>." -"sflphone</b>目錄下" -#: ../sflphone-client-gnome/src/errors.c:29 +#: ../sflphone-client-gnome/src/errors.c:40 msgid "" "ALSA notification\n" "\n" @@ -105,7 +112,7 @@ msgstr "" "\n" "打開回放設備時出錯" -#: ../sflphone-client-gnome/src/errors.c:32 +#: ../sflphone-client-gnome/src/errors.c:43 msgid "" "ALSA notification\n" "\n" @@ -115,7 +122,7 @@ msgstr "" "\n" "打開采集設備時出錯" -#: ../sflphone-client-gnome/src/errors.c:35 +#: ../sflphone-client-gnome/src/errors.c:46 msgid "" "Pulseaudio notification\n" "\n" @@ -125,935 +132,973 @@ msgstr "" "\n" "Pulseaudio未運行" -#: ../sflphone-client-gnome/src/mainwindow.c:73 +#: ../sflphone-client-gnome/src/mainwindow.c:105 msgid "There is one call in progress." msgstr "有一個電話正在處理中." -#: ../sflphone-client-gnome/src/mainwindow.c:77 +#: ../sflphone-client-gnome/src/mainwindow.c:109 msgid "There are calls in progress." msgstr "有電話正在處理中." -#: ../sflphone-client-gnome/src/mainwindow.c:86 +#: ../sflphone-client-gnome/src/mainwindow.c:114 msgid "Do you still want to quit?" msgstr "確認要退出?" -#: ../sflphone-client-gnome/src/mainwindow.c:298 +#: ../sflphone-client-gnome/src/mainwindow.c:337 msgid "SFLphone Error" msgstr "SFLphone 出錯" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:456 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:393 +#: ../sflphone-client-gnome/src/mainwindow.c:458 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 +#: ../sflphone-client-gnome/src/mainwindow.c:460 +#: ../sflphone-client-gnome/src/mainwindow.c:490 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:395 -#: ../sflphone-client-gnome/src/mainwindow.c:417 -#: ../sflphone-client-gnome/src/mainwindow.c:431 +#: ../sflphone-client-gnome/src/mainwindow.c:461 +#: ../sflphone-client-gnome/src/mainwindow.c:491 +#: ../sflphone-client-gnome/src/mainwindow.c:512 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:486 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:488 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:506 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:508 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:510 msgid "Confirm" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 +#: ../sflphone-client-gnome/src/sflnotify.c:82 +#: ../sflphone-client-gnome/src/sflnotify.c:102 #, c-format msgid "%s account : %s" msgstr "%s 帳戶 : %s" -#: ../sflphone-client-gnome/src/sflnotify.c:75 +#: ../sflphone-client-gnome/src/sflnotify.c:86 #, c-format msgid "<i>From</i> %s" msgstr "<i>撥入方</i> %s" -#: ../sflphone-client-gnome/src/sflnotify.c:94 +#: ../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" msgstr[0] "%d 個語音郵件" -#: ../sflphone-client-gnome/src/sflnotify.c:111 +#: ../sflphone-client-gnome/src/sflnotify.c:122 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "使用%s帳戶<i>%s</i>呼叫" -#: ../sflphone-client-gnome/src/sflnotify.c:115 +#: ../sflphone-client-gnome/src/sflnotify.c:126 msgid "Current account" msgstr "當前帳戶" -#: ../sflphone-client-gnome/src/sflnotify.c:130 +#: ../sflphone-client-gnome/src/sflnotify.c:141 msgid "You have no accounts set up" msgstr "你沒有設置任何賬戶" -#: ../sflphone-client-gnome/src/sflnotify.c:147 +#: ../sflphone-client-gnome/src/sflnotify.c:158 msgid "You have no registered accounts" msgstr "未發現已註冊帳戶" -#: ../sflphone-client-gnome/src/sflnotify.c:190 +#: ../sflphone-client-gnome/src/sflnotify.c:201 #, c-format msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:205 +#: ../sflphone-client-gnome/src/sflnotify.c:216 #, c-format msgid "%s does not support ZRTP." msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:220 +#: ../sflphone-client-gnome/src/sflnotify.c:231 #, c-format msgid "ZRTP negotiation failed with %s" msgstr "" -#: ../sflphone-client-gnome/src/sflnotify.c:235 +#: ../sflphone-client-gnome/src/sflnotify.c:246 #, c-format msgid "<i>With:</i> %s" msgstr "" -#: ../sflphone-client-gnome/src/sliders.c:162 +#: ../sflphone-client-gnome/src/sliders.c:173 msgid "Speakers volume" msgstr "揚聲器音量" -#: ../sflphone-client-gnome/src/sliders.c:164 +#: ../sflphone-client-gnome/src/sliders.c:175 msgid "Mic volume" msgstr "話筒音量" -#: ../sflphone-client-gnome/src/statusicon.c:96 +#: ../sflphone-client-gnome/src/statusicon.c:139 msgid "_Show main window" msgstr "顯示主窗口(S)" -#: ../sflphone-client-gnome/src/statusicon.c:131 +#: ../sflphone-client-gnome/src/statusicon.c:146 +#: ../sflphone-client-gnome/src/uimanager.c:822 +#: ../sflphone-client-gnome/src/uimanager.c:1136 +#: ../sflphone-client-gnome/src/uimanager.c:1178 +msgid "_Hang up" +msgstr "放下(H)" + +#: ../sflphone-client-gnome/src/statusicon.c:200 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:132 +#: ../sflphone-client-gnome/src/statusicon.c:201 #, c-format -msgid "%i account configured" -msgid_plural "%i accounts configured" -msgstr[0] "已配置了%i個賬戶" +msgid "%i active account" +msgid_plural "%i active accounts" +msgstr[0] "" +msgstr[1] "" -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:693 -#: ../sflphone-client-gnome/src/uimanager.c:727 +#: ../sflphone-client-gnome/src/toolbar.c:49 +#: ../sflphone-client-gnome/src/uimanager.c:787 +#: ../sflphone-client-gnome/src/uimanager.c:831 msgid "Voicemail" msgstr "語音郵件" -#: ../sflphone-client-gnome/src/uimanager.c:117 +#: ../sflphone-client-gnome/src/uimanager.c:133 msgid "No address book selected" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:137 -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:156 +#: ../sflphone-client-gnome/src/uimanager.c:879 msgid "Address book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:279 +#: ../sflphone-client-gnome/src/uimanager.c:338 +#, c-format msgid "Voicemail (%i)" msgstr "語音郵件 (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:342 +#: ../sflphone-client-gnome/src/uimanager.c:406 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone是一個VoIP客戶端,它兼容SIP和IAX2协议." -#: ../sflphone-client-gnome/src/uimanager.c:345 +#: ../sflphone-client-gnome/src/uimanager.c:408 msgid "About SFLphone" msgstr "有關SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:719 +#: ../sflphone-client-gnome/src/uimanager.c:817 msgid "Call" msgstr "電話" -#: ../sflphone-client-gnome/src/uimanager.c:720 -#: ../sflphone-client-gnome/src/uimanager.c:1184 +#: ../sflphone-client-gnome/src/uimanager.c:818 +#: ../sflphone-client-gnome/src/uimanager.c:1328 msgid "_New call" msgstr "新電話(N)" -#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:819 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:721 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:820 +#: ../sflphone-client-gnome/src/uimanager.c:1124 msgid "_Pick up" msgstr "撥出(P)" -#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:821 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:722 -#: ../sflphone-client-gnome/src/uimanager.c:991 -#: ../sflphone-client-gnome/src/uimanager.c:1032 -msgid "_Hang up" -msgstr "放下(H)" - -#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:823 msgid "Finish the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:824 msgid "O_n hold" msgstr "待机" -#: ../sflphone-client-gnome/src/uimanager.c:723 +#: ../sflphone-client-gnome/src/uimanager.c:825 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:826 msgid "O_ff hold" msgstr "恢复通話" -#: ../sflphone-client-gnome/src/uimanager.c:724 +#: ../sflphone-client-gnome/src/uimanager.c:827 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:725 -#: ../sflphone-client-gnome/src/uimanager.c:1015 -msgid "_Record" -msgstr "記錄(R)" - -#: ../sflphone-client-gnome/src/uimanager.c:725 -msgid "Record the current conversation" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:828 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:726 +#: ../sflphone-client-gnome/src/uimanager.c:829 msgid "Run the configuration assistant" msgstr "Stun配置有誤" -#: ../sflphone-client-gnome/src/uimanager.c:727 +#: ../sflphone-client-gnome/src/uimanager.c:832 msgid "Call your voicemail" msgstr "%d 個語音郵件" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:833 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:728 +#: ../sflphone-client-gnome/src/uimanager.c:834 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:835 msgid "_Quit" msgstr "編輯(E)" -#: ../sflphone-client-gnome/src/uimanager.c:729 +#: ../sflphone-client-gnome/src/uimanager.c:836 msgid "Quit the program" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:732 +#: ../sflphone-client-gnome/src/uimanager.c:839 msgid "_Edit" msgstr "編輯(E)" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:840 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:733 +#: ../sflphone-client-gnome/src/uimanager.c:841 msgid "Copy the selection" msgstr "刪除所選賬戶" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:842 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:734 +#: ../sflphone-client-gnome/src/uimanager.c:843 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:844 msgid "Clear _history" msgstr "清空曆史記錄(C)" -#: ../sflphone-client-gnome/src/uimanager.c:735 +#: ../sflphone-client-gnome/src/uimanager.c:845 msgid "Clear the call history" msgstr "清空曆史記錄" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "_Accounts" msgstr "帳戶(A)" -#: ../sflphone-client-gnome/src/uimanager.c:736 +#: ../sflphone-client-gnome/src/uimanager.c:846 msgid "Edit your accounts" msgstr "當前帳戶" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:848 msgid "_Preferences" msgstr "屬性" -#: ../sflphone-client-gnome/src/uimanager.c:737 +#: ../sflphone-client-gnome/src/uimanager.c:849 msgid "Change your preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:740 +#: ../sflphone-client-gnome/src/uimanager.c:852 msgid "_View" msgstr "查看(V)" -#: ../sflphone-client-gnome/src/uimanager.c:743 +#: ../sflphone-client-gnome/src/uimanager.c:855 msgid "_Help" msgstr "幫助(H)" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:856 msgid "Contents" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:744 +#: ../sflphone-client-gnome/src/uimanager.c:857 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:745 +#: ../sflphone-client-gnome/src/uimanager.c:858 msgid "About this application" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:866 msgid "_Transfer" msgstr "轉接" -#: ../sflphone-client-gnome/src/uimanager.c:751 +#: ../sflphone-client-gnome/src/uimanager.c:867 msgid "Transfer the call" -msgstr "轉給: " +msgstr "轉給:" + +#: ../sflphone-client-gnome/src/uimanager.c:868 +#: ../sflphone-client-gnome/src/uimanager.c:1160 +msgid "_Record" +msgstr "記錄(R)" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:869 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:870 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:752 +#: ../sflphone-client-gnome/src/uimanager.c:871 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:872 msgid "_Dialpad" msgstr "顯示撥號鍵盤" -#: ../sflphone-client-gnome/src/uimanager.c:753 +#: ../sflphone-client-gnome/src/uimanager.c:873 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:874 msgid "_Volume controls" msgstr "音量控制(V)" -#: ../sflphone-client-gnome/src/uimanager.c:754 +#: ../sflphone-client-gnome/src/uimanager.c:875 msgid "Show the volume controls" msgstr "音量控制(V)" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:876 msgid "_History" msgstr "歷史" -#: ../sflphone-client-gnome/src/uimanager.c:755 +#: ../sflphone-client-gnome/src/uimanager.c:877 msgid "Calls history" msgstr "呼叫記錄" -#: ../sflphone-client-gnome/src/uimanager.c:756 +#: ../sflphone-client-gnome/src/uimanager.c:878 msgid "_Address book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/uimanager.c:1003 -#: ../sflphone-client-gnome/src/uimanager.c:1044 +#: ../sflphone-client-gnome/src/uimanager.c:1148 +#: ../sflphone-client-gnome/src/uimanager.c:1190 msgid "On _Hold" msgstr "待机" -#: ../sflphone-client-gnome/src/uimanager.c:1107 +#: ../sflphone-client-gnome/src/uimanager.c:1251 msgid "_Call back" msgstr "回叫(C)" -#: ../sflphone-client-gnome/src/uimanager.c:1258 +#: ../sflphone-client-gnome/src/uimanager.c:1407 msgid "Edit phone number" msgstr "編輯電話號碼" -#: ../sflphone-client-gnome/src/uimanager.c:1269 +#: ../sflphone-client-gnome/src/uimanager.c:1419 msgid "Edit the phone number before making a call" msgstr "撥出電話前編輯電話號碼" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281 msgid "Account Parameters" msgstr "帳戶相關參數" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 -#: ../sflphone-client-gnome/src/config/assistant.c:314 -#: ../sflphone-client-gnome/src/config/assistant.c:427 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296 +#: ../sflphone-client-gnome/src/config/assistant.c:326 +#: ../sflphone-client-gnome/src/config/assistant.c:439 msgid "_Alias" msgstr "別稱(A)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306 msgid "_Protocol" msgstr "協議(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325 msgid "Unknown" msgstr "未知" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:322 -#: ../sflphone-client-gnome/src/config/assistant.c:435 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336 +#: ../sflphone-client-gnome/src/config/assistant.c:334 +#: ../sflphone-client-gnome/src/config/assistant.c:447 msgid "_Host name" msgstr "主机名稱(H)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 -#: ../sflphone-client-gnome/src/config/assistant.c:330 -#: ../sflphone-client-gnome/src/config/assistant.c:443 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345 +#: ../sflphone-client-gnome/src/config/assistant.c:342 +#: ../sflphone-client-gnome/src/config/assistant.c:455 msgid "_User name" msgstr "使用者名稱(U)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 -#: ../sflphone-client-gnome/src/config/assistant.c:346 -#: ../sflphone-client-gnome/src/config/assistant.c:458 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:358 +#: ../sflphone-client-gnome/src/config/assistant.c:470 msgid "_Password" msgstr "密碼(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 -#: ../sflphone-client-gnome/src/config/assistant.c:363 -#: ../sflphone-client-gnome/src/config/assistant.c:473 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403 +#: ../sflphone-client-gnome/src/config/assistant.c:375 +#: ../sflphone-client-gnome/src/config/assistant.c:485 msgid "Show password" msgstr "密碼" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 -#: ../sflphone-client-gnome/src/config/assistant.c:368 -#: ../sflphone-client-gnome/src/config/assistant.c:478 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408 +#: ../sflphone-client-gnome/src/config/assistant.c:380 +#: ../sflphone-client-gnome/src/config/assistant.c:490 msgid "_Voicemail number" msgstr "語音郵箱(V)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417 +msgid "_User-agent" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Password" msgstr "密碼" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 msgid "Disabled" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949 msgid "Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981 msgid "Network Interface" msgstr "網路連線失敗" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131 msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102 msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109 msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117 msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120 msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295 +msgid "Codecs" +msgstr "編碼" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217 +msgid "DTMF" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227 +msgid "RTP" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231 +msgid "SIP" +msgstr "SIP" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265 msgid "Account settings" msgstr "帳戶設置" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321 +msgid "Network" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512 +msgid "" +"This profile is used when you want to reach a remote peer simply by typing a " +"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " +"also be used if no account can be matched to an incoming or outgoing call." +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142 #, c-format msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432 msgid "Protocol" msgstr "協議" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440 msgid "Status" msgstr "狀態" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522 msgid "Accounts" msgstr "帳戶" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532 msgid "Configured Accounts" msgstr "已配置帳戶" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" +msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555 msgid "You have no active account" msgstr "" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:317 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47 msgid "General" msgstr "常用配置" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:323 msgid "_Use Evolution address books" msgstr "使用Evolution地址薄(U)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:330 msgid "Download limit :" msgstr "下載上限:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:338 msgid "cards" msgstr "卡" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:344 msgid "_Display contact photo if available" msgstr "如果可以則顯示聯繫人照片(D)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:352 msgid "Fields from Evolution's address books" msgstr "使用Evolution地址薄中的如下字段:" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:356 msgid "_Work" msgstr "單位電話(W)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:362 msgid "_Home" msgstr "家庭電話(H)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "_Mobile" msgstr "移動電話(M)" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:375 msgid "Address Books" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:379 msgid "Select which Evolution address books to use" msgstr "選擇使用如下Evolution地址薄" -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:577 +#: ../sflphone-client-gnome/src/config/addressbook-config.c:415 +#: ../sflphone-client-gnome/src/config/audioconf.c:704 msgid "Name" msgstr "名稱" -#: ../sflphone-client-gnome/src/config/assistant.c:75 +#: ../sflphone-client-gnome/src/config/assistant.c:86 #, c-format msgid "This assistant is now finished." msgstr "配置完成." -#: ../sflphone-client-gnome/src/config/assistant.c:77 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "你可以隨時在 選項/帳戶 中查看註冊狀態或者修改帳戶信息." -#: ../sflphone-client-gnome/src/config/assistant.c:80 +#: ../sflphone-client-gnome/src/config/assistant.c:91 msgid "Alias" msgstr "別稱" -#: ../sflphone-client-gnome/src/config/assistant.c:84 +#: ../sflphone-client-gnome/src/config/assistant.c:95 msgid "Server" msgstr "伺服器" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:99 msgid "Username" msgstr "使用者名稱" -#: ../sflphone-client-gnome/src/config/assistant.c:92 +#: ../sflphone-client-gnome/src/config/assistant.c:103 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:94 +#: ../sflphone-client-gnome/src/config/assistant.c:105 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:96 +#: ../sflphone-client-gnome/src/config/assistant.c:107 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:229 +#: ../sflphone-client-gnome/src/config/assistant.c:241 msgid "SFLphone account creation wizard" msgstr "SFLphone賬戶創建嚮導" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:267 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "歡迎使用SFLphone帳戶創建嚮導!" -#: ../sflphone-client-gnome/src/config/assistant.c:256 +#: ../sflphone-client-gnome/src/config/assistant.c:268 msgid "This installation wizard will help you configure an account." msgstr "安裝向導將幫助您配置帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "VoIP Protocols" msgstr "VoIP協議" -#: ../sflphone-client-gnome/src/config/assistant.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:282 msgid "Select an account type" msgstr "選擇帳戶類型" -#: ../sflphone-client-gnome/src/config/assistant.c:272 +#: ../sflphone-client-gnome/src/config/assistant.c:284 msgid "SIP (Session Initiation Protocol)" msgstr "SIP(會話初始化協議)" -#: ../sflphone-client-gnome/src/config/assistant.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:286 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2(Asterisk內部交換協議)" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Account" msgstr "帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:288 +#: ../sflphone-client-gnome/src/config/assistant.c:300 msgid "Please select one of the following options" msgstr "請選擇以下選項中的一個" -#: ../sflphone-client-gnome/src/config/assistant.c:290 +#: ../sflphone-client-gnome/src/config/assistant.c:302 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "在sflphone.org上創建免費的SIP/IAX2帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:292 +#: ../sflphone-client-gnome/src/config/assistant.c:304 msgid "Register an existing SIP or IAX2 account" msgstr "註冊已存在的SIP或IAX2帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:318 msgid "SIP account settings" msgstr "SIP帳戶配置" -#: ../sflphone-client-gnome/src/config/assistant.c:306 -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:318 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "Please fill the following information" msgstr "請填寫如下信息" -#: ../sflphone-client-gnome/src/config/assistant.c:376 -#: ../sflphone-client-gnome/src/config/assistant.c:405 +#: ../sflphone-client-gnome/src/config/assistant.c:388 +#: ../sflphone-client-gnome/src/config/assistant.c:417 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "Optional email address" msgstr "可選郵件地址" -#: ../sflphone-client-gnome/src/config/assistant.c:389 +#: ../sflphone-client-gnome/src/config/assistant.c:401 msgid "This email address will be used to send your voicemail messages." msgstr "這個郵件地址將被用來發送您的語音" -#: ../sflphone-client-gnome/src/config/assistant.c:397 +#: ../sflphone-client-gnome/src/config/assistant.c:409 msgid "_Email address" msgstr "郵件地址(E)" -#: ../sflphone-client-gnome/src/config/assistant.c:419 +#: ../sflphone-client-gnome/src/config/assistant.c:431 msgid "IAX2 account settings" msgstr "IAX2帳戶配置" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "Network Address Translation (NAT)" msgstr "网络地址解析(NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:508 msgid "You should probably enable this if you are behind a firewall." msgstr "如果你使用網路防火牆,你很有可能需要設定該項." -#: ../sflphone-client-gnome/src/config/assistant.c:505 +#: ../sflphone-client-gnome/src/config/assistant.c:517 msgid "E_nable STUN" msgstr "啟用STUN(n)" -#: ../sflphone-client-gnome/src/config/assistant.c:512 +#: ../sflphone-client-gnome/src/config/assistant.c:524 msgid "_STUN server" msgstr "STUN伺服器(S)" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Account Registration" msgstr "帳戶註冊" -#: ../sflphone-client-gnome/src/config/assistant.c:526 +#: ../sflphone-client-gnome/src/config/assistant.c:538 msgid "Congratulations!" msgstr "恭喜!" -#: ../sflphone-client-gnome/src/config/audioconf.c:582 +#: ../sflphone-client-gnome/src/config/audioconf.c:709 msgid "Frequency" msgstr "顰律" -#: ../sflphone-client-gnome/src/config/audioconf.c:587 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Bitrate" msgstr "比率" -#: ../sflphone-client-gnome/src/config/audioconf.c:592 +#: ../sflphone-client-gnome/src/config/audioconf.c:719 msgid "Bandwidth" msgstr "顰寬" -#: ../sflphone-client-gnome/src/config/audioconf.c:670 +#: ../sflphone-client-gnome/src/config/audioconf.c:838 msgid "ALSA plugin" msgstr "ALSA插件" -#: ../sflphone-client-gnome/src/config/audioconf.c:692 +#: ../sflphone-client-gnome/src/config/audioconf.c:860 msgid "Output" msgstr "輸出" -#: ../sflphone-client-gnome/src/config/audioconf.c:714 +#: ../sflphone-client-gnome/src/config/audioconf.c:882 msgid "Input" msgstr "輸入" -#: ../sflphone-client-gnome/src/config/audioconf.c:749 -msgid "_Voice Activity Detection" -msgstr "聲音狀態檢測(V)" +#: ../sflphone-client-gnome/src/config/audioconf.c:904 +#, fuzzy +msgid "Ringtone" +msgstr "鈴聲" -#: ../sflphone-client-gnome/src/config/audioconf.c:759 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "降噪處理-窄頻壓縮(N)" +#: ../sflphone-client-gnome/src/config/audioconf.c:939 +msgid "_Echo Suppression" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:800 +#: ../sflphone-client-gnome/src/config/audioconf.c:952 +#, fuzzy +msgid "_Noise Reduction" +msgstr "降噪" + +#: ../sflphone-client-gnome/src/config/audioconf.c:991 msgid "Sound Manager" msgstr "聲音管理器" -#: ../sflphone-client-gnome/src/config/audioconf.c:809 +#: ../sflphone-client-gnome/src/config/audioconf.c:1000 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:813 +#: ../sflphone-client-gnome/src/config/audioconf.c:1004 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:819 +#: ../sflphone-client-gnome/src/config/audioconf.c:1010 msgid "ALSA settings" msgstr "ALSA 配置" -#: ../sflphone-client-gnome/src/config/audioconf.c:836 -msgid "Codecs" -msgstr "編碼" - -#: ../sflphone-client-gnome/src/config/audioconf.c:865 +#: ../sflphone-client-gnome/src/config/audioconf.c:1031 msgid "Recordings" msgstr "記錄" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:1035 msgid "Destination folder" msgstr "目標文件夾" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:1039 msgid "Select a folder" msgstr "選擇文件夾" -#: ../sflphone-client-gnome/src/config/audioconf.c:879 +#: ../sflphone-client-gnome/src/config/audioconf.c:1045 msgid "Ringtones" msgstr "鈴聲" -#: ../sflphone-client-gnome/src/config/audioconf.c:885 +#: ../sflphone-client-gnome/src/config/audioconf.c:1051 msgid "_Enable ringtones" msgstr "啟動鈴聲(E)" -#: ../sflphone-client-gnome/src/config/audioconf.c:891 +#: ../sflphone-client-gnome/src/config/audioconf.c:1057 msgid "Choose a ringtone" msgstr "鈴聲選擇" -#: ../sflphone-client-gnome/src/config/audioconf.c:897 +#: ../sflphone-client-gnome/src/config/audioconf.c:1063 msgid "Audio Files" msgstr "音訊檔案" -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +#: ../sflphone-client-gnome/src/config/audioconf.c:1070 +#, fuzzy +msgid "Voice enhancement settings" +msgstr "帳戶設置" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "URL Argument" msgstr "URL參數" -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +#: ../sflphone-client-gnome/src/config/hooks-config.c:146 msgid "Custom commands on incoming calls with URL" msgstr "定制對帶有URL的來電的處理" -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#: ../sflphone-client-gnome/src/config/hooks-config.c:149 #, c-format msgid "%s will be replaced with the passed URL." msgstr "傳輸的URL會被替換成%s." -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +#: ../sflphone-client-gnome/src/config/hooks-config.c:152 msgid "Trigger on specific _SIP header" msgstr "激活指定的SIP頭(S)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +#: ../sflphone-client-gnome/src/config/hooks-config.c:161 msgid "Trigger on _IAX2 URL" msgstr "激活IAX2 URL(I)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +#: ../sflphone-client-gnome/src/config/hooks-config.c:166 msgid "Command to _run" msgstr "運行命令(r)" -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +#: ../sflphone-client-gnome/src/config/hooks-config.c:176 msgid "Phone number rewriting" msgstr "重設電話號碼" -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +#: ../sflphone-client-gnome/src/config/hooks-config.c:180 msgid "_Prefix dialed numbers with" msgstr "號碼前綴(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 -msgid "" -"This profile is used when you want to reach a remote peer simply by typing a " -"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " -"also be used if no account can be matched to an incoming or outgoing call." -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158 msgid "Desktop Notifications" msgstr "桌面提示" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163 msgid "_Enable notifications" msgstr "啟動提示(E)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170 msgid "System Tray Icon" msgstr "系統托盤圖標" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180 +msgid "Show SFLphone in the system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187 msgid "_Popup main window on incoming call" msgstr "來電話時彈出主視窗(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193 msgid "Ne_ver popup main window" msgstr "從不彈出主視窗(v)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203 msgid "Hide SFLphone window on _startup" msgstr "在啟動時隱藏SFLphone主窗口" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217 msgid "Calls History" msgstr "打電話歷史" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282 msgid "Preferences" msgstr "屬性" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315 msgid "Address Book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Hooks" msgstr "鉤鍵" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 -msgid "Direct IP calls" +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326 +msgid "Shortcuts" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49 +msgid "Be careful: these shortcuts might override system-wide shortcuts." +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49 msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1062,115 +1107,118 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118 +msgid "Global TLS listener (all accounts)" +msgstr "" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309 msgid "Require certificate for incoming tls connections" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60 msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142 +msgid "SDES Options" +msgstr "" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167 +msgid "Fallback on RTP on SDES failure" +msgstr "" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search all" msgstr "查詢所有" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:107 msgid "Click here to change the search type" msgstr "請點擊此處改變查詢方式" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 msgid "Search by missed call" msgstr "從未接電話中查詢" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 msgid "Search by incoming call" msgstr "從來電中查詢" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:106 msgid "Search by outgoing call" msgstr "從撥出電話中查詢" -#~ msgid "IP call - %s" -#~ msgstr "IP電話- %s" - -#~ msgid "Codec" -#~ msgstr "編碼" - -#~ msgid "_Mute other applications during a call" -#~ msgstr "當有來電時靜音其它應用程序(c)" - -#~ msgid "SIP Port" -#~ msgstr "SIP端口" +#~ msgid "_Voice Activity Detection" +#~ msgstr "聲音狀態檢測(V)" -#~ msgid "Enable voicemail _notifications" -#~ msgstr "啟用語音郵箱提示(n)" +#~ msgid "_Noise Reduction (Narrow-Band Companding)" +#~ msgstr "降噪處理-窄頻壓縮(N)" #~ msgid "Account creation wizard" #~ msgstr "帳戶創建向導" @@ -1192,6 +1240,9 @@ msgstr "從撥出電話中查詢" #~ msgid "Default account" #~ msgstr "默認帳戶" +#~ msgid "Codec" +#~ msgstr "編碼" + #~ msgid "SFLphone KDE Client" #~ msgstr "SFLphone KDE客戶端" @@ -1306,9 +1357,6 @@ msgstr "從撥出電話中查詢" #~ msgid "Apply" #~ msgstr "套用" -#~ msgid "SIP" -#~ msgstr "SIP" - #~ msgid "IAX" #~ msgstr "IAX" @@ -1375,6 +1423,9 @@ msgstr "從撥出電話中查詢" #~ msgid "On start" #~ msgstr "正在啟動" +#~ msgid "SIP Port" +#~ msgstr "SIP端口" + #~ msgid "Trigger on specific SIP header" #~ msgstr "激活指定的SIP頭" @@ -1390,15 +1441,39 @@ msgstr "從撥出電話中查詢" #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "注意:結果超過可顯示的最大值" +#~ msgid "IP call - %s" +#~ msgstr "IP電話- %s" + +#~ msgid "" +#~ "<b>Error: No audio codecs found.\n" +#~ "\n" +#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>." +#~ "sflphone</b> directory in your home( <i>%s</i> )" +#~ msgstr "" +#~ "<b>錯誤:無法找到音訊編碼檔案.\n" +#~ "\n" +#~ "</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>." +#~ "sflphone</b>目錄下" + #~ msgid "_Account creation wizard" #~ msgstr "帳戶創建向導(A)" +#~ msgid "%i account configured" +#~ msgid_plural "%i accounts configured" +#~ msgstr[0] "已配置了%i個賬戶" + #~ msgid "_Enable this account" #~ msgstr "啟用該賬戶(E)" +#~ msgid "Enable voicemail _notifications" +#~ msgstr "啟用語音郵箱提示(n)" + #~ msgid "PulseAudio sound server" #~ msgstr "PulseAudio聲音伺服器" +#~ msgid "_Mute other applications during a call" +#~ msgstr "當有來電時靜音其它應用程序(c)" + #~ msgid "Port" #~ msgstr "端口" @@ -1677,9 +1752,6 @@ msgstr "從撥出電話中查詢" #~ msgid "%s account- %s" #~ msgstr "%s 帳戶- %s" -#~ msgid "Noise reduction" -#~ msgstr "降噪" - #~ msgid "_Destination folder" #~ msgstr "目標文件夾(D)" @@ -1697,10 +1769,12 @@ msgstr "從撥出電話中查詢" #~ msgstr "" #~ "Yun Liu, ,Launchpad Contributions:,Yun Liu, ,Launchpad Contributions:," #~ "Emmanuel Milou,Yun Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun " -#~ "Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun Liu" +#~ "Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun Liu, ,Launchpad " +#~ "Contributions:,Emmanuel Milou,Yun Liu" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" #~ "yunliu2000@gmail.com,,,,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel." -#~ "milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.com," +#~ "milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.com,,,," +#~ "emmanuel.milou@savoirfairelinux.com," -- GitLab From b553a4c682ebf8e1ba51495081c266d9b89e6896 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Fri, 18 Jun 2010 11:04:16 -0400 Subject: [PATCH 082/197] [#3558] Prefix all md5 related function by iax in LibIAX To prevent linking conflict --- sflphone-common/libs/iax2/iax.c | 20 ++-- sflphone-common/libs/iax2/md5.c | 180 ++++++++++++++++---------------- sflphone-common/libs/iax2/md5.h | 12 +-- 3 files changed, 106 insertions(+), 106 deletions(-) diff --git a/sflphone-common/libs/iax2/iax.c b/sflphone-common/libs/iax2/iax.c index 5c184a1de6..67f9db7b0d 100644 --- a/sflphone-common/libs/iax2/iax.c +++ b/sflphone-common/libs/iax2/iax.c @@ -1889,17 +1889,17 @@ static int iax_send_txready(struct iax_session *session) int iax_auth_reply(struct iax_session *session, char *password, char *challenge, int methods) { char reply[16]; - struct MD5Context md5; + struct IAX_MD5Context md5; char realreply[256]; struct iax_ie_data ied; memset(&ied, 0, sizeof(ied)); if ((methods & IAX_AUTH_MD5) && challenge) { - MD5Init(&md5); - MD5Update(&md5, (const unsigned char *) challenge, + IAX_MD5Init(&md5); + IAX_MD5Update(&md5, (const unsigned char *) challenge, (unsigned int)strlen(challenge)); - MD5Update(&md5, (const unsigned char *) password, + IAX_MD5Update(&md5, (const unsigned char *) password, (unsigned int)strlen(password)); - MD5Final((unsigned char *) reply, &md5); + IAX_MD5Final((unsigned char *) reply, &md5); memset(realreply, 0, sizeof(realreply)); convert_reply(realreply, (unsigned char *) reply); iax_ie_append_str(&ied, IAX_IE_MD5_RESULT, realreply); @@ -1912,19 +1912,19 @@ int iax_auth_reply(struct iax_session *session, char *password, char *challenge, static int iax_regauth_reply(struct iax_session *session, char *password, char *challenge, int methods) { char reply[16]; - struct MD5Context md5; + struct IAX_MD5Context md5; char realreply[256]; struct iax_ie_data ied; memset(&ied, 0, sizeof(ied)); iax_ie_append_str(&ied, IAX_IE_USERNAME, session->username); iax_ie_append_short(&ied, IAX_IE_REFRESH, session->refresh); if ((methods & IAX_AUTHMETHOD_MD5) && challenge) { - MD5Init(&md5); - MD5Update(&md5, (const unsigned char *) challenge, + IAX_MD5Init(&md5); + IAX_MD5Update(&md5, (const unsigned char *) challenge, (unsigned int)strlen(challenge)); - MD5Update(&md5, (const unsigned char *) password, + IAX_MD5Update(&md5, (const unsigned char *) password, (unsigned int)strlen(password)); - MD5Final((unsigned char *) reply, &md5); + IAX_MD5Final((unsigned char *) reply, &md5); memset(realreply, 0, sizeof(realreply)); convert_reply(realreply, (unsigned char *) reply); iax_ie_append_str(&ied, IAX_IE_MD5_RESULT, realreply); diff --git a/sflphone-common/libs/iax2/md5.c b/sflphone-common/libs/iax2/md5.c index 401216ee27..56382221c4 100644 --- a/sflphone-common/libs/iax2/md5.c +++ b/sflphone-common/libs/iax2/md5.c @@ -51,15 +51,15 @@ #include "md5.h" #ifndef HIGHFIRST -#define byteReverse(buf, len) /* Nothing */ +#define IAX_byteReverse(buf, len) /* Nothing */ #else -void byteReverse(uint8_t *buf, unsigned int longs); +void IAX_byteReverse(uint8_t *buf, unsigned int longs); #ifndef ASM_MD5 /* * Note: this code is harmless on little-endian machines. */ -void byteReverse(uint8_t *buf, unsigned int longs) +void IAX_byteReverse(uint8_t *buf, unsigned int longs) { uint32_t t; do { @@ -76,7 +76,7 @@ void byteReverse(uint8_t *buf, unsigned int longs) * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious * initialization constants. */ -void MD5Init(struct MD5Context *ctx) +void IAX_MD5Init(struct IAX_MD5Context *ctx) { ctx->buf[0] = 0x67452301; ctx->buf[1] = 0xefcdab89; @@ -91,7 +91,7 @@ void MD5Init(struct MD5Context *ctx) * Update context to reflect the concatenation of another buffer full * of bytes. */ -void MD5Update(struct MD5Context *ctx, uint8_t const *buf, unsigned int len) +void IAX_MD5Update(struct IAX_MD5Context *ctx, uint8_t const *buf, unsigned int len) { uint32_t t; @@ -115,8 +115,8 @@ void MD5Update(struct MD5Context *ctx, uint8_t const *buf, unsigned int len) return; } memcpy(p, buf, t); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32_t *) ctx->in); + IAX_byteReverse(ctx->in, 16); + IAX_MD5Transform(ctx->buf, (uint32_t *) ctx->in); buf += t; len -= t; } @@ -124,8 +124,8 @@ void MD5Update(struct MD5Context *ctx, uint8_t const *buf, unsigned int len) while (len >= 64) { memcpy(ctx->in, buf, 64); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32_t *) ctx->in); + IAX_byteReverse(ctx->in, 16); + IAX_MD5Transform(ctx->buf, (uint32_t *) ctx->in); buf += 64; len -= 64; } @@ -139,7 +139,7 @@ void MD5Update(struct MD5Context *ctx, uint8_t const *buf, unsigned int len) * Final wrapup - pad to 64-byte boundary with the bit pattern * 1 0* (64-bit count of bits processed, MSB-first) */ -void MD5Final(uint8_t digest[16], struct MD5Context *ctx) +void IAX_MD5Final(uint8_t digest[16], struct IAX_MD5Context *ctx) { unsigned int count; uint8_t *p; @@ -159,8 +159,8 @@ void MD5Final(uint8_t digest[16], struct MD5Context *ctx) if (count < 8) { /* Two lots of padding: Pad the first block to 64 bytes */ memset(p, 0, count); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32_t *) ctx->in); + IAX_byteReverse(ctx->in, 16); + IAX_MD5Transform(ctx->buf, (uint32_t *) ctx->in); /* Now fill the next block with 56 bytes */ memset(ctx->in, 0, 56); @@ -168,30 +168,30 @@ void MD5Final(uint8_t digest[16], struct MD5Context *ctx) /* Pad block to 56 bytes */ memset(p, 0, count - 8); } - byteReverse(ctx->in, 14); + IAX_byteReverse(ctx->in, 14); /* Append length in bits and transform */ ((uint32_t *) ctx->in)[14] = ctx->bits[0]; ((uint32_t *) ctx->in)[15] = ctx->bits[1]; - MD5Transform(ctx->buf, (uint32_t *) ctx->in); - byteReverse((uint8_t *) ctx->buf, 4); + IAX_MD5Transform(ctx->buf, (uint32_t *) ctx->in); + IAX_byteReverse((uint8_t *) ctx->buf, 4); memcpy(digest, ctx->buf, 16); memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ } #ifndef ASM_MD5 -/* The four core functions - F1 is optimized somewhat */ +/* The four core functions - IAX_F1 is optimized somewhat */ -/* #define F1(x, y, z) (x & y | ~x & z) */ -#define F1(x, y, z) (z ^ (x & (y ^ z))) -#define F2(x, y, z) F1(z, x, y) -#define F3(x, y, z) (x ^ y ^ z) -#define F4(x, y, z) (y ^ (x | ~z)) +/* #define IAX_F1(x, y, z) (x & y | ~x & z) */ +#define IAX_F1(x, y, z) (z ^ (x & (y ^ z))) +#define IAX_F2(x, y, z) IAX_F1(z, x, y) +#define IAX_F3(x, y, z) (x ^ y ^ z) +#define IAX_F4(x, y, z) (y ^ (x | ~z)) /* This is the central step in the MD5 algorithm. */ -#define MD5STEP(f, w, x, y, z, data, s) \ +#define IAX_MD5STEP(f, w, x, y, z, data, s) \ ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x ) /* @@ -199,7 +199,7 @@ void MD5Final(uint8_t digest[16], struct MD5Context *ctx) * reflect the addition of 16 longwords of new data. MD5Update blocks * the data and converts bytes into longwords for this routine. */ -void MD5Transform(uint32_t buf[4], uint32_t const in[16]) +void IAX_MD5Transform(uint32_t buf[4], uint32_t const in[16]) { uint32_t a, b, c, d; @@ -208,73 +208,73 @@ void MD5Transform(uint32_t buf[4], uint32_t const in[16]) c = buf[2]; d = buf[3]; - MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); - MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); - MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); - MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); - MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); - MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); - MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); - MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); - MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); - MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); - MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); - MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); - MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); - MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); - MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); - MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); - - MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); - MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); - MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); - MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); - MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); - MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); - MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); - MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); - MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); - MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); - MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); - MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); - MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); - MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); - MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); - MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); - - MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); - MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); - MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); - MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); - MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); - MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); - MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); - MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); - MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); - MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); - MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); - MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); - MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); - MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); - MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); - MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); - - MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); - MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); - MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); - MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); - MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); - MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); - MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); - MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); - MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); - MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); - MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); - MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); - MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); - MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); - MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); - MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); + IAX_MD5STEP(IAX_F1, a, b, c, d, in[0] + 0xd76aa478, 7); + IAX_MD5STEP(IAX_F1, d, a, b, c, in[1] + 0xe8c7b756, 12); + IAX_MD5STEP(IAX_F1, c, d, a, b, in[2] + 0x242070db, 17); + IAX_MD5STEP(IAX_F1, b, c, d, a, in[3] + 0xc1bdceee, 22); + IAX_MD5STEP(IAX_F1, a, b, c, d, in[4] + 0xf57c0faf, 7); + IAX_MD5STEP(IAX_F1, d, a, b, c, in[5] + 0x4787c62a, 12); + IAX_MD5STEP(IAX_F1, c, d, a, b, in[6] + 0xa8304613, 17); + IAX_MD5STEP(IAX_F1, b, c, d, a, in[7] + 0xfd469501, 22); + IAX_MD5STEP(IAX_F1, a, b, c, d, in[8] + 0x698098d8, 7); + IAX_MD5STEP(IAX_F1, d, a, b, c, in[9] + 0x8b44f7af, 12); + IAX_MD5STEP(IAX_F1, c, d, a, b, in[10] + 0xffff5bb1, 17); + IAX_MD5STEP(IAX_F1, b, c, d, a, in[11] + 0x895cd7be, 22); + IAX_MD5STEP(IAX_F1, a, b, c, d, in[12] + 0x6b901122, 7); + IAX_MD5STEP(IAX_F1, d, a, b, c, in[13] + 0xfd987193, 12); + IAX_MD5STEP(IAX_F1, c, d, a, b, in[14] + 0xa679438e, 17); + IAX_MD5STEP(IAX_F1, b, c, d, a, in[15] + 0x49b40821, 22); + + IAX_MD5STEP(IAX_F2, a, b, c, d, in[1] + 0xf61e2562, 5); + IAX_MD5STEP(IAX_F2, d, a, b, c, in[6] + 0xc040b340, 9); + IAX_MD5STEP(IAX_F2, c, d, a, b, in[11] + 0x265e5a51, 14); + IAX_MD5STEP(IAX_F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); + IAX_MD5STEP(IAX_F2, a, b, c, d, in[5] + 0xd62f105d, 5); + IAX_MD5STEP(IAX_F2, d, a, b, c, in[10] + 0x02441453, 9); + IAX_MD5STEP(IAX_F2, c, d, a, b, in[15] + 0xd8a1e681, 14); + IAX_MD5STEP(IAX_F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); + IAX_MD5STEP(IAX_F2, a, b, c, d, in[9] + 0x21e1cde6, 5); + IAX_MD5STEP(IAX_F2, d, a, b, c, in[14] + 0xc33707d6, 9); + IAX_MD5STEP(IAX_F2, c, d, a, b, in[3] + 0xf4d50d87, 14); + IAX_MD5STEP(IAX_F2, b, c, d, a, in[8] + 0x455a14ed, 20); + IAX_MD5STEP(IAX_F2, a, b, c, d, in[13] + 0xa9e3e905, 5); + IAX_MD5STEP(IAX_F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); + IAX_MD5STEP(IAX_F2, c, d, a, b, in[7] + 0x676f02d9, 14); + IAX_MD5STEP(IAX_F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); + + IAX_MD5STEP(IAX_F3, a, b, c, d, in[5] + 0xfffa3942, 4); + IAX_MD5STEP(IAX_F3, d, a, b, c, in[8] + 0x8771f681, 11); + IAX_MD5STEP(IAX_F3, c, d, a, b, in[11] + 0x6d9d6122, 16); + IAX_MD5STEP(IAX_F3, b, c, d, a, in[14] + 0xfde5380c, 23); + IAX_MD5STEP(IAX_F3, a, b, c, d, in[1] + 0xa4beea44, 4); + IAX_MD5STEP(IAX_F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); + IAX_MD5STEP(IAX_F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); + IAX_MD5STEP(IAX_F3, b, c, d, a, in[10] + 0xbebfbc70, 23); + IAX_MD5STEP(IAX_F3, a, b, c, d, in[13] + 0x289b7ec6, 4); + IAX_MD5STEP(IAX_F3, d, a, b, c, in[0] + 0xeaa127fa, 11); + IAX_MD5STEP(IAX_F3, c, d, a, b, in[3] + 0xd4ef3085, 16); + IAX_MD5STEP(IAX_F3, b, c, d, a, in[6] + 0x04881d05, 23); + IAX_MD5STEP(IAX_F3, a, b, c, d, in[9] + 0xd9d4d039, 4); + IAX_MD5STEP(IAX_F3, d, a, b, c, in[12] + 0xe6db99e5, 11); + IAX_MD5STEP(IAX_F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); + IAX_MD5STEP(IAX_F3, b, c, d, a, in[2] + 0xc4ac5665, 23); + + IAX_MD5STEP(IAX_F4, a, b, c, d, in[0] + 0xf4292244, 6); + IAX_MD5STEP(IAX_F4, d, a, b, c, in[7] + 0x432aff97, 10); + IAX_MD5STEP(IAX_F4, c, d, a, b, in[14] + 0xab9423a7, 15); + IAX_MD5STEP(IAX_F4, b, c, d, a, in[5] + 0xfc93a039, 21); + IAX_MD5STEP(IAX_F4, a, b, c, d, in[12] + 0x655b59c3, 6); + IAX_MD5STEP(IAX_F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); + IAX_MD5STEP(IAX_F4, c, d, a, b, in[10] + 0xffeff47d, 15); + IAX_MD5STEP(IAX_F4, b, c, d, a, in[1] + 0x85845dd1, 21); + IAX_MD5STEP(IAX_F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); + IAX_MD5STEP(IAX_F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); + IAX_MD5STEP(IAX_F4, c, d, a, b, in[6] + 0xa3014314, 15); + IAX_MD5STEP(IAX_F4, b, c, d, a, in[13] + 0x4e0811a1, 21); + IAX_MD5STEP(IAX_F4, a, b, c, d, in[4] + 0xf7537e82, 6); + IAX_MD5STEP(IAX_F4, d, a, b, c, in[11] + 0xbd3af235, 10); + IAX_MD5STEP(IAX_F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); + IAX_MD5STEP(IAX_F4, b, c, d, a, in[9] + 0xeb86d391, 21); buf[0] += a; buf[1] += b; diff --git a/sflphone-common/libs/iax2/md5.h b/sflphone-common/libs/iax2/md5.h index 81c9e30613..b3ad37a9b3 100644 --- a/sflphone-common/libs/iax2/md5.h +++ b/sflphone-common/libs/iax2/md5.h @@ -8,20 +8,20 @@ typedef unsigned int uint32_t; typedef unsigned char uint8_t; #endif -struct MD5Context { +struct IAX_MD5Context { uint32_t buf[4]; uint32_t bits[2]; uint8_t in[64]; }; -void MD5Init(struct MD5Context *context); -void MD5Update(struct MD5Context *context, uint8_t const *buf, unsigned int len); -void MD5Final(uint8_t digest[16], struct MD5Context *context); -void MD5Transform(uint32_t buf[4], uint32_t const in[16]); +void IAX_MD5Init(struct IAX_MD5Context *context); +void IAX_MD5Update(struct IAX_MD5Context *context, uint8_t const *buf, unsigned int len); +void IAX_MD5Final(uint8_t digest[16], struct IAX_MD5Context *context); +void IAX_MD5Transform(uint32_t buf[4], uint32_t const in[16]); /* * This is needed to make RSAREF happy on some MS-DOS compilers. */ -typedef struct MD5Context MD5_CTX; +typedef struct IAX_MD5Context MD5_CTX; #endif /* !MD5_H */ -- GitLab From 858c3492330ac241ea4e89fac9a688609c90f18d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Fri, 18 Jun 2010 12:01:53 -0400 Subject: [PATCH 083/197] [#3558] Update debian tarball builder --- build_tarball.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/build_tarball.sh b/build_tarball.sh index 3a6694ed50..623bdc8eb0 100755 --- a/build_tarball.sh +++ b/build_tarball.sh @@ -30,10 +30,12 @@ rm -rf $BUILDDIR rm -f *.tar.gz rm -rf lang/ -rm -rf tools/build-system/ -rm -f tools/pysflphone/*.pyc -rm -f tools/build-package.sh tools/bleach.sh tools/autotoolize.sh -rm -rf sflphone-client-kde/build +rm -rf tools/ +rm -rf sflphone-client-kde/ +rm -rf sippxml + +rm -rf .git/ +rm -f .gitignore find -name .project -type f -exec rm {} \; find -name .cproject -type f -exec rm {} \; @@ -56,6 +58,9 @@ rm -f pjlib-util/bin/pjlib-util-test-x86_64-unknown-linux-gnu rm -f pjnath/bin/pjturn-srv-x86_64-unknown-linux-gnu rm -f pjmedia/bin/pjmedia-test-x86_64-unknown-linux-gnu +rm -f third_party/portaudio/src/hostapi/asio/Pa_ASIO.pdf +rm -f third_party/portaudio/src/hostapi/asio/Callback_adaptation_.pdf + # Put actual files in the tarball rm -f config.guess config.sub cp /usr/share/misc/config.guess . -- GitLab From d9293d057707ac63321ae4a32234e72c8459406a Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Fri, 18 Jun 2010 18:00:12 -0400 Subject: [PATCH 084/197] [#3561] Implement adaptive dejitter buffer --- .../src/audio/audiortp/AudioRtpSession.h | 68 +++++++++++++++++-- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index 7ec80ebc86..976330dda6 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -50,6 +50,8 @@ #include <ccrtp/rtp.h> #include <cc++/numbers.h> // ost::Time +#include <speex/speex_jitter.h> + // Frequency (in packet number) #define RTP_TIMESTAMP_RESET_FREQ 100 @@ -229,9 +231,16 @@ namespace sfl { * EventQueue used to store list of DTMF- */ EventQueue _eventQueue; + + JitterBuffer *_jbuffer; + + int _ts; protected: + SIPCall * _ca; + + bool onRTPPacketRecv(ost::IncomingRTPPkt&); }; template <typename D> @@ -255,6 +264,7 @@ namespace sfl { _timestampIncrement(0), _timestampCount(0), _countNotificationTime(0), + _jbuffer(NULL), _ca (sipcall) { setCancel (cancelDefault); @@ -271,6 +281,12 @@ namespace sfl { _layerFrameSize = _audiolayer->getFrameSize(); // in ms _layerSampleRate = _audiolayer->getSampleRate(); + _jbuffer = jitter_buffer_init(20); + _ts = 0; + + int i = 160; + jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_MARGIN, &i); + jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_CONCEALMENT_SIZE, &i); } template <typename D> @@ -296,8 +312,10 @@ namespace sfl { delete _converter; if (_audiocodec) { - delete _audiocodec; _audiocodec = NULL; + delete _audiocodec; _audiocodec = NULL; } + + jitter_buffer_destroy(_jbuffer); } template <typename D> @@ -476,13 +494,21 @@ namespace sfl { } } + template <typename D> + bool onRTPPacketRecv(ost::IncomingRTPPkt&) + { + _debug("AudioRtpSession: onRTPPacketRecv"); + + return true; + } + + template <typename D> int AudioRtpSession<D>::processDataEncode(void) { assert(_audiocodec); assert(_audiolayer); - int _mainBufferSampleRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate(); // compute codec framesize in ms @@ -626,6 +652,7 @@ namespace sfl { const ost::AppDataUnit* adu = NULL; adu = static_cast<D*>(this)->getData(static_cast<D*>(this)->getFirstTimestamp()); + // adu = static_cast<D*>(this)->getData(_ts); if (adu == NULL) { // _debug("No RTP audio stream\n"); @@ -633,12 +660,41 @@ namespace sfl { } unsigned char* spkrData = (unsigned char*) adu->getData(); // data in char - unsigned int size = adu->getSize(); // size in char + _debug("RTP: size %d", size); + _debug("RTP: timestamp %d", static_cast<D*>(this)->getFirstTimestamp()); + _debug("RTP: timestamp %d", _ts); + _debug("RTP: sequence number %d", adu->getSeqNum()); + + JitterBufferPacket jPacketIn; + jPacketIn.data = (char *)spkrData; + jPacketIn.len = size; + // jPacketIn.timestamp = static_cast<D*>(this)->getFirstTimestamp(); + jPacketIn.timestamp = _ts+=20; + jPacketIn.span = 20; + jPacketIn.sequence = adu->getSeqNum(); + + _debug("RTP: jitter buffer put"); + jitter_buffer_put(_jbuffer, &jPacketIn); + + JitterBufferPacket jPacketOut; + jPacketOut.data = new char[size]; + jPacketOut.len = size; + jPacketOut.span = 20; + jPacketOut.sequence = 0; + + int desiredSpan = 20; + spx_int32_t offs; + + _debug("RTP: jitter buffer get"); + jitter_buffer_get(_jbuffer, &jPacketOut, desiredSpan, &offs); + jitter_buffer_tick(_jbuffer); + // DTMF over RTP, size must be over 4 in order to process it as voice data if(size > 4) { - processDataDecode (spkrData, size); + processDataDecode(spkrData, size); + // processDataDecode ((unsigned char *)jPacketOut.data, jPacketOut.len); } else { // _debug("RTP: Received an RTP event with payload: %d", adu->getType()); @@ -646,6 +702,10 @@ namespace sfl { // _debug("RTP: Data received %d", dtmf->event); } + + delete jPacketOut.data; + + delete adu; } template <typename D> -- GitLab From 533c77703bf88b23b804fbf9d147e90561387135 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Mon, 21 Jun 2010 15:26:55 -0400 Subject: [PATCH 085/197] [#2530] Initial implementation dejitter buffer --- .../src/audio/audiortp/AudioRtpSession.h | 78 ++++++++++++------- 1 file changed, 48 insertions(+), 30 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index 976330dda6..1464fce26e 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -235,6 +235,8 @@ namespace sfl { JitterBuffer *_jbuffer; int _ts; + + int jitterSeqNum; protected: @@ -283,10 +285,11 @@ namespace sfl { _jbuffer = jitter_buffer_init(20); _ts = 0; + jitterSeqNum = 0; - int i = 160; - jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_MARGIN, &i); - jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_CONCEALMENT_SIZE, &i); + // int i = 160; + // jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_MARGIN, &i); + // jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_CONCEALMENT_SIZE, &i); } template <typename D> @@ -651,8 +654,9 @@ namespace sfl { const ost::AppDataUnit* adu = NULL; - adu = static_cast<D*>(this)->getData(static_cast<D*>(this)->getFirstTimestamp()); - // adu = static_cast<D*>(this)->getData(_ts); + int packetTimestamp = static_cast<D*>(this)->getFirstTimestamp(); + adu = static_cast<D*>(this)->getData(packetTimestamp); + // packetTimestamp = adu->getgetTimestamp(); if (adu == NULL) { // _debug("No RTP audio stream\n"); @@ -662,49 +666,61 @@ namespace sfl { unsigned char* spkrData = (unsigned char*) adu->getData(); // data in char unsigned int size = adu->getSize(); // size in char - _debug("RTP: size %d", size); - _debug("RTP: timestamp %d", static_cast<D*>(this)->getFirstTimestamp()); - _debug("RTP: timestamp %d", _ts); - _debug("RTP: sequence number %d", adu->getSeqNum()); - JitterBufferPacket jPacketIn; jPacketIn.data = (char *)spkrData; jPacketIn.len = size; - // jPacketIn.timestamp = static_cast<D*>(this)->getFirstTimestamp(); - jPacketIn.timestamp = _ts+=20; - jPacketIn.span = 20; - jPacketIn.sequence = adu->getSeqNum(); + // jPacketIn.timestamp = static_cast<D*>(this)->getFirstTimestamp(); + jPacketIn.timestamp = jitterSeqNum * _timestampIncrement; + jPacketIn.span = _timestampIncrement; + jPacketIn.sequence = ++jitterSeqNum; - _debug("RTP: jitter buffer put"); jitter_buffer_put(_jbuffer, &jPacketIn); JitterBufferPacket jPacketOut; jPacketOut.data = new char[size]; jPacketOut.len = size; - jPacketOut.span = 20; - jPacketOut.sequence = 0; + jPacketIn.timestamp = 0; + jPacketIn.span = 0; + jPacketIn.sequence = 0; - int desiredSpan = 20; - spx_int32_t offs; + int desiredSpan = _timestampIncrement; + spx_int32_t offs = 0; - _debug("RTP: jitter buffer get"); - jitter_buffer_get(_jbuffer, &jPacketOut, desiredSpan, &offs); + int result = JITTER_BUFFER_INTERNAL_ERROR; + result = jitter_buffer_get(_jbuffer, &jPacketOut, desiredSpan, &offs); jitter_buffer_tick(_jbuffer); + switch(result) { + case JITTER_BUFFER_OK: + _debug("JITTER_BUFFER_OK"); + break; + case JITTER_BUFFER_MISSING: + _debug("JITTER_BUFFER_MISSING"); + break; + case JITTER_BUFFER_INTERNAL_ERROR: + _debug("JITTER_BUFFER_INTERNAL_ERROR"); + break; + case JITTER_BUFFER_BAD_ARGUMENT: + _debug("JITTER_BUFFER_BAD_ARGUMENT"); + break; + default: + _debug("Unknown error"); + break; + } + // DTMF over RTP, size must be over 4 in order to process it as voice data if(size > 4) { - processDataDecode(spkrData, size); - // processDataDecode ((unsigned char *)jPacketOut.data, jPacketOut.len); + // processDataDecode(spkrData, size); + if(result == JITTER_BUFFER_OK) + processDataDecode ((unsigned char *)jPacketOut.data, jPacketOut.len); } else { - // _debug("RTP: Received an RTP event with payload: %d", adu->getType()); - // ost::RTPPacket::RFC2833Payload *dtmf = (ost::RTPPacket::RFC2833Payload *)adu->getData(); - // _debug("RTP: Data received %d", dtmf->event); - + // _debug("RTP: Received an RTP event with payload: %d", adu->getType()); + // ost::RTPPacket::RFC2833Payload *dtmf = (ost::RTPPacket::RFC2833Payload *)adu->getData(); + // _debug("RTP: Data received %d", dtmf->event); } delete jPacketOut.data; - delete adu; } @@ -724,6 +740,8 @@ namespace sfl { // Timestamp must be initialized randomly _timestamp = static_cast<D*>(this)->getCurrentTimestamp(); + _ts = 0; + int sessionWaiting; int threadSleep = 0; @@ -742,9 +760,9 @@ namespace sfl { } _ca->setRecordingSmplRate(_audiocodec->getClockRate()); - + // Start audio stream (if not started) AND flush all buffers (main and urgent) - _manager->getAudioDriver()->startStream(); + _manager->getAudioDriver()->startStream(); static_cast<D*>(this)->startRunning(); -- GitLab From 1494a25f6c3d54d796d8d0f80e3542386f637dbb Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Mon, 21 Jun 2010 15:39:30 -0400 Subject: [PATCH 086/197] [#2530] Remove comments --- sflphone-common/src/audio/audiortp/AudioRtpSession.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index 1464fce26e..0de99baa01 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -690,6 +690,7 @@ namespace sfl { result = jitter_buffer_get(_jbuffer, &jPacketOut, desiredSpan, &offs); jitter_buffer_tick(_jbuffer); + /* switch(result) { case JITTER_BUFFER_OK: _debug("JITTER_BUFFER_OK"); @@ -707,6 +708,7 @@ namespace sfl { _debug("Unknown error"); break; } + */ // DTMF over RTP, size must be over 4 in order to process it as voice data if(size > 4) { -- GitLab From fbbd25d2007b4a1ea408477767fcd386dec11c7b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Mon, 21 Jun 2010 18:03:47 -0400 Subject: [PATCH 087/197] [#3556, #3557] Add sh4, HPPA, s390 definitions in PJSIP's config.h --- .../libs/pjproject/pjlib/include/pj/config.h | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/config.h b/sflphone-common/libs/pjproject/pjlib/include/pj/config.h index 3b211abd85..ce7a97cc1a 100644 --- a/sflphone-common/libs/pjproject/pjlib/include/pj/config.h +++ b/sflphone-common/libs/pjproject/pjlib/include/pj/config.h @@ -275,6 +275,48 @@ # define PJ_HAS_PENTIUM 0 # define PJ_IS_LITTLE_ENDIAN 1 # define PJ_IS_BIG_ENDIAN 0 + +#elif defined (PJ_M_SH) || defined(__sh) || defined(__sh__) || \ + defined(__SH__) || defined(__M_SH) || defined(_ARCH_SH) + /* + * Renesas SH, little endian and big endian + */ +# undef PJ_M_SH +# define PJ_M_SH 1 +# define PJ_M_NAME "sh" +# define PJ_HAS_PENTIUM 0 +# if defined(__LITTLE_ENDIAN__) +# define PJ_IS_LITTLE_ENDIAN 1 +# define PJ_IS_BIG_ENDIAN 0 +# elif defined(__BIG_ENDIAN__) +# define PJ_IS_LITTLE_ENDIAN 0 +# define PJ_IS_BIG_ENDIAN 1 +# endif + +#elif defined (PJ_M_HPPA) || defined(__hppa) || defined(__hppa__) || \ + defined(__HPPA__) || defined(__M_HPPA) || defined(_ARCH_HPPA) + /* + * HP/PA, big endian + */ +# undef PJ_M_HPPA +# define PJ_M_HPPA 1 +# define PJ_M_NAME "hppa" +# define PJ_HAS_PENTIUM 0 +# define PJ_IS_LITTLE_ENDIAN 0 +# define PJ_IS_BIG_ENDIAN 1 + +#elif defined (PJ_M_S390) || defined(__s390) || defined(__s390__) || defined(__s390x) || \ + defined(__s390x__) || defined(__M_s390) || defined(_ARCH_s390) + /* + * System 390, big endian + */ +# undef PJ_M_S390 +# define PJ_M_S390 1 +# define PJ_M_NAME "s390" +# define PJ_HAS_PENTIUM 0 +# define PJ_IS_LITTLE_ENDIAN 0 +# define PJ_IS_BIG_ENDIAN 1 + #else # error "Please specify target machine." -- GitLab From b32708c661b95a3c52f6311dcceb7eb191bd014e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Tue, 22 Jun 2010 09:45:35 -0400 Subject: [PATCH 088/197] [#3561] - Fixed Autotools mess in test/. - Brought all the sub-libraries into a single library with LIBADD Conflicts: sflphone-common/configure.ac sflphone-common/src/Makefile.am sflphone-common/src/audio/Makefile.am sflphone-common/src/video/Makefile.am sflphone-common/src/video/decoder/Makefile.am sflphone-common/test/Makefile.am --- sflphone-common/configure.ac | 14 +++---- sflphone-common/globals.mak | 3 ++ sflphone-common/src/Makefile.am | 34 ++++++++++++++++ sflphone-common/src/audio/Makefile.am | 8 ++++ sflphone-common/src/video/Makefile.am | 35 +++++++++++++++++ sflphone-common/src/video/decoder/Makefile.am | 17 ++++++++ sflphone-common/test/Makefile.am | 39 +++---------------- sflphone-common/test/main.cpp | 8 ++-- 8 files changed, 113 insertions(+), 45 deletions(-) create mode 100644 sflphone-common/src/video/Makefile.am create mode 100644 sflphone-common/src/video/decoder/Makefile.am diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index 1149007f87..b1d3d4d7d9 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -407,7 +407,7 @@ AC_DEFUN([BB_ENABLE_DOXYGEN], if test x$DOT = x; then if test "x$enable_dot" = xyes; then -AC_MSG_ERROR([could not find dot]) + AC_MSG_ERROR([could not find dot]) fi enable_dot=no else @@ -416,24 +416,22 @@ AC_MSG_ERROR([could not find dot]) AM_CONDITIONAL(ENABLE_DOXYGEN, test x$enable_doc = xtrue) AC_SUBST(enable_dot) AC_SUBST(enable_html_docs) -AC_SUBST(enable_latex_docs) + AC_SUBST(enable_latex_docs) ]) -# Acutally perform the doxygen check + # Acutally perform the doxygen check BB_ENABLE_DOXYGEN dnl Datadir directory sflphone_datadir=$datadir/sflphone -AC_SUBST(sflphone_datadir) + AC_SUBST(sflphone_datadir) dnl Dbus Service activation part DBUS_SERVICES_DIR="$datadir/dbus-1/services" -AC_SUBST(DBUS_SERVICES_DIR) + AC_SUBST(DBUS_SERVICES_DIR) AC_DEFINE_UNQUOTED(DBUS_SERVICES_DIR, "$DBUS_SERVICES_DIR", [Where services dir for DBUS is]) # Go! AC_SUBST(SFLPHONE_CFLAGS) -AC_SUBST(SFLPHONE_LIBS) + AC_SUBST(SFLPHONE_LIBS) AC_OUTPUT AC_MSG_NOTICE([[Configuration done! Please make sure that pjsip library (libs/pjproject) has already been compiled. Run `make' to build the software.]]) - - diff --git a/sflphone-common/globals.mak b/sflphone-common/globals.mak index 23f700e61f..0c408d1928 100644 --- a/sflphone-common/globals.mak +++ b/sflphone-common/globals.mak @@ -56,6 +56,9 @@ AM_CPPFLAGS = \ -DPREFIX=\"$(prefix)\" \ -DPROGSHAREDIR=\"${datadir}/sflphone\" \ $(ZEROCONFFLAGS) \ + $(GSTREAMER_CFLAGS) \ + $(LIBAVCODEC_CFLAGS) \ + $(LIBSWSCALE_CFLAGS) \ $(IAX_FLAGS) \ $(SIP_CFLAGS) \ -DCODECS_DIR=\""$(sflcodecdir)"\" \ diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index 09ce81355d..31bb049dc8 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -57,7 +57,10 @@ sflphoned_LDADD = \ # sflphoned_LDFLAGS= -pg -luuid sflphoned_LDFLAGS= $(UUID_LIBS) + -DVERSION=\"$(VERSION)\" +# libsflphone +sflphoned_LDADD = ./libsflphone.la noinst_LTLIBRARIES = libsflphone.la noinst_HEADERS = \ @@ -87,6 +90,7 @@ libsflphone_la_LIBADD = \ ./audio/codecs/libcodecdescriptor.la \ ./audio/alsa/libalsalayer.la \ ./audio/pulseaudio/libpulselayer.la \ + ./video/libvideo.la \ ./dbus/libdbus.la \ ./config/libconfig.la \ ./plug-in/libplugin.la \ @@ -94,6 +98,36 @@ libsflphone_la_LIBADD = \ ./hooks/libhooks.la \ ./history/libhistory.la +libsflphone_la_LDFLAGS = \ + @CCGNU2_LIBS@ \ + @CCEXT2_LIBS@ \ + @ZRTPCPP_LIBS@ \ + @GSTREAMER_LIBS@ \ + @LIBAVCODEC_LIBS@ \ + @LIBSWSCALE_LIBS@ \ + $(PJSIP_LIBS) \ + @CCRTP_LIBS@ \ + @ALSA_LIBS@ \ + @PULSEAUDIO_LIBS@ \ + @SAMPLERATE_LIBS@ \ + @libssl_LIBS@ \ + @UUID_LIBS@ + +libsflphone_la_CFLAGS = \ + @CCGNU2_CFLAGS@ \ + @CCEXT2_CFLAGS@ \ + @ZRTPCPP_CFLAGS@ \ + @GSTREAMER_CFLAGS@ \ + @LIBAVCODEC_CFLAGS@ \ + @LIBSWSCALE_CFLAGS@ \ + $(PJSIP_CFLAGS) \ + @CCRTP_CFLAGS@ \ + @ALSA_CFLAGS@ \ + @PULSEAUDIO_CFLAGS@ \ + @SAMPLERATE_CFLAGS@ \ + @libssl_CFLAGS@ \ + @UUID_CFLAGS@ + libsflphone_la_SOURCES = indent: diff --git a/sflphone-common/src/audio/Makefile.am b/sflphone-common/src/audio/Makefile.am index ef2452b0bd..116c324380 100644 --- a/sflphone-common/src/audio/Makefile.am +++ b/sflphone-common/src/audio/Makefile.am @@ -39,4 +39,12 @@ noinst_HEADERS = \ dcblocker.h \ samplerateconverter.h +libaudio_la_LIBADD = \ + ./audiortp/libaudiortp.la \ + ./codecs/libcodecdescriptor.la \ + ./alsa/libalsalayer.la \ + ./pulseaudio/libpulselayer.la \ + ./sound/libsound.la + + diff --git a/sflphone-common/src/video/Makefile.am b/sflphone-common/src/video/Makefile.am new file mode 100644 index 0000000000..b7a60a35b6 --- /dev/null +++ b/sflphone-common/src/video/Makefile.am @@ -0,0 +1,35 @@ +include $(top_srcdir)/globals.mak + +SUBDIRS = decoder rtp + +AM_CXXFLAGS = $(GSTREAMER_CFLAGS) + +noinst_LTLIBRARIES = libvideo.la + +libvideo_la_SOURCES = \ + VideoInputSource.cpp \ + VideoInputSourceGst.cpp \ + VideoEndpoint.cpp \ + VideoFrame.cpp \ + FrameFormat.cpp \ + VideoDevice.cpp \ + GstVideoDevice.cpp + +libvideo_la_LIBADD = \ + decoder/libvideodecoder.la \ + rtp/libvideortp.la + +libvideo_la_LDFLAGS = $(GSTREAMER_LIBS) $(LIBS) + +noinst_HEADERS = \ + VideoInputSource.h \ + VideoInputSourceGst.h \ + VideoEndpoint.h \ + FrameFormat.h \ + VideoDevice.h \ + VideoFrame.h \ + FrameFormat.h \ + VideoDevice.h \ + GstVideoDevice.h + + diff --git a/sflphone-common/src/video/decoder/Makefile.am b/sflphone-common/src/video/decoder/Makefile.am new file mode 100644 index 0000000000..6dbf239905 --- /dev/null +++ b/sflphone-common/src/video/decoder/Makefile.am @@ -0,0 +1,17 @@ +include $(top_srcdir)/globals.mak + +AM_CXXFLAGS = $(LIBAVCODEC_CFLAGS) $(LIBSWSCALE_CFLAGS) + +noinst_LTLIBRARIES = libvideodecoder.la + +libvideodecoder_la_SOURCES = \ + H264Decoder.cpp \ + VideoDecoder.cpp + +noinst_HEADERS = \ + VideoDecoder.h \ + H264Decoder.h + +libvideodecoder_la_LDFLAGS = $(LIBAVCODEC_LIBS) $(LIBSWSCALE_LIBS) $(LIBS) + +libvideodecoder_la_LIBADD = $(LIBAVCODEC_LIBS) $(LIBSWSCALE_LIBS) $(LIBS) \ No newline at end of file diff --git a/sflphone-common/test/Makefile.am b/sflphone-common/test/Makefile.am index ff5d109041..b2ae6aae0c 100644 --- a/sflphone-common/test/Makefile.am +++ b/sflphone-common/test/Makefile.am @@ -1,11 +1,12 @@ include ../globals.mak -TESTS = test -check_PROGRAMS = $(TESTS) +check_PROGRAMS = test + test_CXXFLAGS = $(CPPUNIT_CFLAGS) test_LDADD = $(LLIBS) -test_LDFLAGS = -ldl -test_SOURCES = main.cpp \ + +test_SOURCES = \ + main.cpp \ validator.cpp \ validator.h \ accounttest.h \ @@ -18,8 +19,6 @@ test_SOURCES = main.cpp \ historytest.cpp \ hookmanagertest.h \ hookmanagertest.cpp \ - mainbuffertest.h \ - mainbuffertest.cpp \ numbercleanertest.h \ numbercleanertest.cpp \ pluginmanagertest.h \ @@ -35,9 +34,6 @@ test_SOURCES = main.cpp \ LLIBS=$(CPPUNIT_LIBS) \ - ../src/libsflphone.la \ - $(ZEROCONFLIB) \ - $(LIB_DNSSD) \ @ALSA_LIBS@ \ @PULSEAUDIO_LIBS@ \ @CPPUNIT_LIBS@ \ @@ -48,27 +44,4 @@ LLIBS=$(CPPUNIT_LIBS) \ @libssl_LIBS@ \ @SAMPLERATE_LIBS@ \ $(PJSIP_LIBS) \ - ../src/sflphoned-logger.o \ - ../src/sflphoned-managerimpl.o \ - ../src/sflphoned-account.o\ - ../src/sflphoned-accountcreator.o \ - ../src/sflphoned-call.o \ - ../src/sflphoned-conference.o \ - ../src/sflphoned-eventthread.o \ - ../src/sflphoned-managerimpl_registration.o \ - ../src/sflphoned-numbercleaner.o \ - ../src/sflphoned-observer.o \ - ../src/sflphoned-voiplink.o \ - ../src/sip/libsiplink_la-sipcall.o \ - ../src/iax/libiaxlink_la-iaxcall.o \ - ../src/sip/libsiplink_la-sipvoiplink.o \ - ../src/iax/libiaxlink_la-iaxvoiplink.o \ - ../src/sip/libsiplink_la-sipaccount.o \ - ../src/iax/libiaxlink_la-iaxaccount.o \ - ../src/sip/libsiplink_la-sdp.o \ - ../src/sip/libsiplink_la-sdpmedia.o \ - ../src/plug-in/pluginmanager.o \ - ../src/plug-in/audiorecorder/audiorecord.o \ - ../src/audio/samplerateconverter.o \ - ../src/audio/delaydetection.o \ - ../src/history/historymanager.o \ No newline at end of file + ../src/libsflphone.la diff --git a/sflphone-common/test/main.cpp b/sflphone-common/test/main.cpp index 98f792ad1e..131630b33d 100644 --- a/sflphone-common/test/main.cpp +++ b/sflphone-common/test/main.cpp @@ -28,10 +28,10 @@ * as that of the covered work. */ -#include "logger.h" -#include "global.h" -#include "manager.h" -#include "constants.h" +#include <logger.h> +#include <manager.h> + +#define CONFIG_SAMPLE "sflphonedrc-sample" #include <cppunit/CompilerOutputter.h> #include <cppunit/extensions/TestFactoryRegistry.h> -- GitLab From 9433f78bdff63c141c96ade19b197c123c0ff045 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <msavard@msavard-desktop.(none)> Date: Tue, 22 Jun 2010 09:55:18 -0400 Subject: [PATCH 089/197] [#3323] Remove video from sflphone-common/src/Makefile.am --- sflphone-common/src/Makefile.am | 1 - 1 file changed, 1 deletion(-) diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index 31bb049dc8..0a1de77488 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -90,7 +90,6 @@ libsflphone_la_LIBADD = \ ./audio/codecs/libcodecdescriptor.la \ ./audio/alsa/libalsalayer.la \ ./audio/pulseaudio/libpulselayer.la \ - ./video/libvideo.la \ ./dbus/libdbus.la \ ./config/libconfig.la \ ./plug-in/libplugin.la \ -- GitLab From c9f06f22c3a680947b79c956800404de721e944a Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 22 Jun 2010 17:46:47 -0400 Subject: [PATCH 090/197] [#2530] Implement asterisk's jitter buffer --- sflphone-common/src/audio/Makefile.am | 2 + .../src/audio/audiortp/AudioRtpSession.h | 115 ++- sflphone-common/src/audio/jitterbuf.cpp | 876 ++++++++++++++++++ sflphone-common/src/audio/jitterbuf.h | 177 ++++ 4 files changed, 1110 insertions(+), 60 deletions(-) create mode 100755 sflphone-common/src/audio/jitterbuf.cpp create mode 100755 sflphone-common/src/audio/jitterbuf.h diff --git a/sflphone-common/src/audio/Makefile.am b/sflphone-common/src/audio/Makefile.am index 116c324380..fcf2c2e9b7 100644 --- a/sflphone-common/src/audio/Makefile.am +++ b/sflphone-common/src/audio/Makefile.am @@ -21,6 +21,7 @@ libaudio_la_SOURCES = \ speexechocancel.cpp \ audioprocessing.cpp \ dcblocker.cpp \ + jitterbuf.cpp \ $(SPEEX_SOURCES_CPP) noinst_HEADERS = \ @@ -37,6 +38,7 @@ noinst_HEADERS = \ speexechocancel.h \ audioprocessing.h \ dcblocker.h \ + jitterbuf.h \ samplerateconverter.h libaudio_la_LIBADD = \ diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index 0de99baa01..48a44b1d1a 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -52,6 +52,8 @@ #include <speex/speex_jitter.h> +#include "audio/jitterbuf.h" + // Frequency (in packet number) #define RTP_TIMESTAMP_RESET_FREQ 100 @@ -232,11 +234,22 @@ namespace sfl { */ EventQueue _eventQueue; - JitterBuffer *_jbuffer; + /** + * Adaptive jitter buffer + */ + jitterbuf * _jbuffer; + + /** + * Packet size in ms + */ + int _packetLength; int _ts; - int jitterSeqNum; + /** + * Current time in ms + */ + int _currentTime; protected: @@ -283,13 +296,15 @@ namespace sfl { _layerFrameSize = _audiolayer->getFrameSize(); // in ms _layerSampleRate = _audiolayer->getSampleRate(); - _jbuffer = jitter_buffer_init(20); - _ts = 0; - jitterSeqNum = 0; + _jbuffer = jb_new(); - // int i = 160; - // jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_MARGIN, &i); - // jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_CONCEALMENT_SIZE, &i); + _jbuffer->info.conf.max_jitterbuf = 1000; + _jbuffer->info.conf.target_extra = 100; + _jbuffer->info.silence_begin_ts = 0; + + _ts= 0; + _packetLength = 20; + _currentTime = 0; } template <typename D> @@ -318,7 +333,7 @@ namespace sfl { delete _audiocodec; _audiocodec = NULL; } - jitter_buffer_destroy(_jbuffer); + jb_destroy(_jbuffer); } template <typename D> @@ -653,68 +668,51 @@ namespace sfl { } const ost::AppDataUnit* adu = NULL; - int packetTimestamp = static_cast<D*>(this)->getFirstTimestamp(); adu = static_cast<D*>(this)->getData(packetTimestamp); - // packetTimestamp = adu->getgetTimestamp(); - if (adu == NULL) { - // _debug("No RTP audio stream\n"); - return; - } - - unsigned char* spkrData = (unsigned char*) adu->getData(); // data in char - unsigned int size = adu->getSize(); // size in char + if(!adu) + return; - JitterBufferPacket jPacketIn; - jPacketIn.data = (char *)spkrData; - jPacketIn.len = size; - // jPacketIn.timestamp = static_cast<D*>(this)->getFirstTimestamp(); - jPacketIn.timestamp = jitterSeqNum * _timestampIncrement; - jPacketIn.span = _timestampIncrement; - jPacketIn.sequence = ++jitterSeqNum; + unsigned char* spkrDataIn = NULL; + unsigned int size = 0; + int result; - jitter_buffer_put(_jbuffer, &jPacketIn); + jb_frame frame; - JitterBufferPacket jPacketOut; - jPacketOut.data = new char[size]; - jPacketOut.len = size; - jPacketIn.timestamp = 0; - jPacketIn.span = 0; - jPacketIn.sequence = 0; - - int desiredSpan = _timestampIncrement; - spx_int32_t offs = 0; + if (adu) { + + spkrDataIn = (unsigned char*) adu->getData(); // data in char + size = adu->getSize(); // size in char + result = jb_put(_jbuffer, spkrDataIn, JB_TYPE_VOICE, _packetLength, _ts+=20, _currentTime); + // result = jb_get(_jbuffer, &frame, _currentTime+=20, _packetLength); + } + else { + _debug("No RTP packet available !!!!!!!!!!!!!!!!!!!!!!!\n"); + } - int result = JITTER_BUFFER_INTERNAL_ERROR; - result = jitter_buffer_get(_jbuffer, &jPacketOut, desiredSpan, &offs); - jitter_buffer_tick(_jbuffer); + result = jb_get(_jbuffer, &frame, _currentTime+=20, _packetLength); /* switch(result) { - case JITTER_BUFFER_OK: - _debug("JITTER_BUFFER_OK"); - break; - case JITTER_BUFFER_MISSING: - _debug("JITTER_BUFFER_MISSING"); - break; - case JITTER_BUFFER_INTERNAL_ERROR: - _debug("JITTER_BUFFER_INTERNAL_ERROR"); - break; - case JITTER_BUFFER_BAD_ARGUMENT: - _debug("JITTER_BUFFER_BAD_ARGUMENT"); - break; - default: - _debug("Unknown error"); - break; + case 0: printf("You\'ve got frame!\n"); break; + case 1: printf("Here\'s an audio frame you should just drop. Ask me again for this time..\n"); break; + case 2: printf("There\'s no frame scheduled for this time.\n"); break; + case 3: printf("Please interpolate an interpl-length frame for this time (either we need to grow, or there was a lost frame)\n"); break; + case 4: printf("Empty\n"); break; + default: printf("Unknown returned value\n"); break; } */ // DTMF over RTP, size must be over 4 in order to process it as voice data if(size > 4) { - // processDataDecode(spkrData, size); - if(result == JITTER_BUFFER_OK) - processDataDecode ((unsigned char *)jPacketOut.data, jPacketOut.len); + // processDataDecode(spkrDataIn, size); + if(result == 0) { + processDataDecode((unsigned char *)(frame.data), 160); + } + else { + _debug("bad data"); + } } else { // _debug("RTP: Received an RTP event with payload: %d", adu->getType()); @@ -722,8 +720,7 @@ namespace sfl { // _debug("RTP: Data received %d", dtmf->event); } - delete jPacketOut.data; - delete adu; + // delete adu; } template <typename D> @@ -742,8 +739,6 @@ namespace sfl { // Timestamp must be initialized randomly _timestamp = static_cast<D*>(this)->getCurrentTimestamp(); - _ts = 0; - int sessionWaiting; int threadSleep = 0; diff --git a/sflphone-common/src/audio/jitterbuf.cpp b/sflphone-common/src/audio/jitterbuf.cpp new file mode 100755 index 0000000000..06a418090f --- /dev/null +++ b/sflphone-common/src/audio/jitterbuf.cpp @@ -0,0 +1,876 @@ +/* + * Asterisk -- An open source telephony toolkit. + * + * Copyright (C) 2004-2005, Horizon Wimba, Inc. + * + * Contributors: + * Steve Kann <stevek@stevek.com> + * + * A license has been granted to Digium (via disclaimer) for the use of + * this code. + * + * See http://www.asterisk.org for more information about + * the Asterisk project. Please do not directly contact + * any of the maintainers of this project for assistance; + * the project provides a web site, mailing lists and IRC + * channels for your use. + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. See the LICENSE file + * at the top of the source tree. + */ + +/*! \file + * + * \brief jitterbuf: an application-independent jitterbuffer + * \author Steve Kann <stevek@stevek.com> + * + */ + +#include "jitterbuf.h" +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +/*! define these here, just for ancient compiler systems */ +#define JB_LONGMAX 2147483647L +#define JB_LONGMIN (-JB_LONGMAX - 1L) + +#define jb_warn(...) (warnf ? warnf(__VA_ARGS__) : (void)0) +#define jb_err(...) (errf ? errf(__VA_ARGS__) : (void)0) +#define jb_dbg(...) (dbgf ? dbgf(__VA_ARGS__) : (void)0) + +#ifdef DEEP_DEBUG +#define jb_dbg2(...) (dbgf ? dbgf(__VA_ARGS__) : (void)0) +#else +#define jb_dbg2(...) ((void)0) +#endif + +static jb_output_function_t warnf, errf, dbgf; + +void jb_setoutput(jb_output_function_t err, jb_output_function_t warn, jb_output_function_t dbg) +{ + errf = err; + warnf = warn; + dbgf = dbg; +} + +static void increment_losspct(jitterbuf *jb) +{ + jb->info.losspct = (100000 + 499 * jb->info.losspct)/500; +} + +static void decrement_losspct(jitterbuf *jb) +{ + jb->info.losspct = (499 * jb->info.losspct)/500; +} + +void jb_reset(jitterbuf *jb) +{ + /* only save settings */ + jb_conf s = jb->info.conf; + memset(jb, 0, sizeof(*jb)); + jb->info.conf = s; + + /* initialize length, using the default value */ + jb->info.current = jb->info.target = jb->info.conf.target_extra = JB_TARGET_EXTRA; + jb->info.silence_begin_ts = -1; +} + +jitterbuf * jb_new() +{ + jitterbuf *jb; + + if (!(jb = (jitterbuf *)malloc(sizeof(*jb)))) + return NULL; + + jb_reset(jb); + + jb_dbg2("jb_new() = %x\n", jb); + return jb; +} + +void jb_destroy(jitterbuf *jb) +{ + jb_frame *frame; + jb_dbg2("jb_destroy(%x)\n", jb); + + /* free all the frames on the "free list" */ + frame = jb->free; + while (frame != NULL) { + jb_frame *next = frame->next; + free(frame); + frame = next; + } + + /* free ourselves! */ + free(jb); +} + + + +#if 0 +static int longcmp(const void *a, const void *b) +{ + return *(long *)a - *(long *)b; +} +#endif + +/*! \brief simple history manipulation + \note maybe later we can make the history buckets variable size, or something? */ +/* drop parameter determines whether we will drop outliers to minimize + * delay */ +static int history_put(jitterbuf *jb, long ts, long now, long ms) +{ + long delay = now - (ts - jb->info.resync_offset); + long threshold = 2 * jb->info.jitter + jb->info.conf.resync_threshold; + long kicked; + + /* don't add special/negative times to history */ + if (ts <= 0) + return 0; + + /* check for drastic change in delay */ + if (jb->info.conf.resync_threshold != -1) { + if (abs(delay - jb->info.last_delay) > threshold) { + jb->info.cnt_delay_discont++; + if (jb->info.cnt_delay_discont > 3) { + /* resync the jitterbuffer */ + jb->info.cnt_delay_discont = 0; + jb->hist_ptr = 0; + jb->hist_maxbuf_valid = 0; + + jb_warn("Resyncing the jb. last_delay %ld, this delay %ld, threshold %ld, new offset %ld\n", jb->info.last_delay, delay, threshold, ts - now); + jb->info.resync_offset = ts - now; + jb->info.last_delay = delay = 0; /* after resync, frame is right on time */ + } else { + return -1; + } + } else { + jb->info.last_delay = delay; + jb->info.cnt_delay_discont = 0; + } + } + + kicked = jb->history[jb->hist_ptr % JB_HISTORY_SZ]; + + jb->history[(jb->hist_ptr++) % JB_HISTORY_SZ] = delay; + + /* optimization; the max/min buffers don't need to be recalculated, if this packet's + * entry doesn't change them. This happens if this packet is not involved, _and_ any packet + * that got kicked out of the history is also not involved + * We do a number of comparisons, but it's probably still worthwhile, because it will usually + * succeed, and should be a lot faster than going through all 500 packets in history */ + if (!jb->hist_maxbuf_valid) + return 0; + + /* don't do this until we've filled history + * (reduces some edge cases below) */ + if (jb->hist_ptr < JB_HISTORY_SZ) + goto invalidate; + + /* if the new delay would go into min */ + if (delay < jb->hist_minbuf[JB_HISTORY_MAXBUF_SZ-1]) + goto invalidate; + + /* or max.. */ + if (delay > jb->hist_maxbuf[JB_HISTORY_MAXBUF_SZ-1]) + goto invalidate; + + /* or the kicked delay would be in min */ + if (kicked <= jb->hist_minbuf[JB_HISTORY_MAXBUF_SZ-1]) + goto invalidate; + + if (kicked >= jb->hist_maxbuf[JB_HISTORY_MAXBUF_SZ-1]) + goto invalidate; + + /* if we got here, we don't need to invalidate, 'cause this delay didn't + * affect things */ + return 0; + /* end optimization */ + + +invalidate: + jb->hist_maxbuf_valid = 0; + return 0; +} + +static void history_calc_maxbuf(jitterbuf *jb) +{ + int i,j; + + if (jb->hist_ptr == 0) + return; + + + /* initialize maxbuf/minbuf to the latest value */ + for (i=0;i<JB_HISTORY_MAXBUF_SZ;i++) { +/* + * jb->hist_maxbuf[i] = jb->history[(jb->hist_ptr-1) % JB_HISTORY_SZ]; + * jb->hist_minbuf[i] = jb->history[(jb->hist_ptr-1) % JB_HISTORY_SZ]; + */ + jb->hist_maxbuf[i] = JB_LONGMIN; + jb->hist_minbuf[i] = JB_LONGMAX; + } + + /* use insertion sort to populate maxbuf */ + /* we want it to be the top "n" values, in order */ + + /* start at the beginning, or JB_HISTORY_SZ frames ago */ + i = (jb->hist_ptr > JB_HISTORY_SZ) ? (jb->hist_ptr - JB_HISTORY_SZ) : 0; + + for (;i<jb->hist_ptr;i++) { + long toins = jb->history[i % JB_HISTORY_SZ]; + + /* if the maxbuf should get this */ + if (toins > jb->hist_maxbuf[JB_HISTORY_MAXBUF_SZ-1]) { + + /* insertion-sort it into the maxbuf */ + for (j=0;j<JB_HISTORY_MAXBUF_SZ;j++) { + /* found where it fits */ + if (toins > jb->hist_maxbuf[j]) { + /* move over */ + memmove(jb->hist_maxbuf + j + 1, jb->hist_maxbuf + j, (JB_HISTORY_MAXBUF_SZ - (j + 1)) * sizeof(jb->hist_maxbuf[0])); + /* insert */ + jb->hist_maxbuf[j] = toins; + + break; + } + } + } + + /* if the minbuf should get this */ + if (toins < jb->hist_minbuf[JB_HISTORY_MAXBUF_SZ-1]) { + + /* insertion-sort it into the maxbuf */ + for (j=0;j<JB_HISTORY_MAXBUF_SZ;j++) { + /* found where it fits */ + if (toins < jb->hist_minbuf[j]) { + /* move over */ + memmove(jb->hist_minbuf + j + 1, jb->hist_minbuf + j, (JB_HISTORY_MAXBUF_SZ - (j + 1)) * sizeof(jb->hist_minbuf[0])); + /* insert */ + jb->hist_minbuf[j] = toins; + + break; + } + } + } + + if (0) { + int k; + fprintf(stderr, "toins = %ld\n", toins); + fprintf(stderr, "maxbuf ="); + for (k=0;k<JB_HISTORY_MAXBUF_SZ;k++) + fprintf(stderr, "%ld ", jb->hist_maxbuf[k]); + fprintf(stderr, "\nminbuf ="); + for (k=0;k<JB_HISTORY_MAXBUF_SZ;k++) + fprintf(stderr, "%ld ", jb->hist_minbuf[k]); + fprintf(stderr, "\n"); + } + } + + jb->hist_maxbuf_valid = 1; +} + +static void history_get(jitterbuf *jb) +{ + long max, min, jitter; + int idx; + int count; + + if (!jb->hist_maxbuf_valid) + history_calc_maxbuf(jb); + + /* count is how many items in history we're examining */ + count = (jb->hist_ptr < JB_HISTORY_SZ) ? jb->hist_ptr : JB_HISTORY_SZ; + + /* idx is the "n"ths highest/lowest that we'll look for */ + idx = count * JB_HISTORY_DROPPCT / 100; + + /* sanity checks for idx */ + if (idx > (JB_HISTORY_MAXBUF_SZ - 1)) + idx = JB_HISTORY_MAXBUF_SZ - 1; + + if (idx < 0) { + jb->info.min = 0; + jb->info.jitter = 0; + return; + } + + max = jb->hist_maxbuf[idx]; + min = jb->hist_minbuf[idx]; + + jitter = max - min; + + /* these debug stmts compare the difference between looking at the absolute jitter, and the + * values we get by throwing away the outliers */ + // printf("[%ld] min=%ld, max=%ld, jitter=%ld\n", index, min, max, jitter); + // printf("[%ld] min=%ld, max=%ld, jitter=%ld\n", 0, jb->hist_minbuf[0], jb->hist_maxbuf[0], jb->hist_maxbuf[0]-jb->hist_minbuf[0]); + + jb->info.min = min; + jb->info.jitter = jitter; +} + +/* returns 1 if frame was inserted into head of queue, 0 otherwise */ +static int queue_put(jitterbuf *jb, void *data, const enum jb_frame_type type, long ms, long ts) +{ + jb_frame *frame; + jb_frame *p; + int head = 0; + long resync_ts = ts - jb->info.resync_offset; + + if ((frame = jb->free)) { + jb->free = frame->next; + } else if (!(frame = (jb_frame *)malloc(sizeof(*frame)))) { + jb_err("cannot allocate frame\n"); + return 0; + } + + jb->info.frames_cur++; + + frame->data = data; + frame->ts = resync_ts; + frame->ms = ms; + frame->type = type; + + /* + * frames are a circular list, jb-frames points to to the lowest ts, + * jb->frames->prev points to the highest ts + */ + + if (!jb->frames) { /* queue is empty */ + jb->frames = frame; + frame->next = frame; + frame->prev = frame; + head = 1; + } else if (resync_ts < jb->frames->ts) { + frame->next = jb->frames; + frame->prev = jb->frames->prev; + + frame->next->prev = frame; + frame->prev->next = frame; + + /* frame is out of order */ + jb->info.frames_ooo++; + + jb->frames = frame; + head = 1; + } else { + p = jb->frames; + + /* frame is out of order */ + if (resync_ts < p->prev->ts) jb->info.frames_ooo++; + + while (resync_ts < p->prev->ts && p->prev != jb->frames) + p = p->prev; + + frame->next = p; + frame->prev = p->prev; + + frame->next->prev = frame; + frame->prev->next = frame; + } + return head; +} + +static long queue_next(jitterbuf *jb) +{ + if (jb->frames) + return jb->frames->ts; + else + return -1; +} + +static long queue_last(jitterbuf *jb) +{ + if (jb->frames) + return jb->frames->prev->ts; + else + return -1; +} + +static jb_frame *_queue_get(jitterbuf *jb, long ts, int all) +{ + jb_frame *frame; + frame = jb->frames; + + if (!frame) + return NULL; + + printf("queue_get: ASK %ld FIRST %ld\n", ts, frame->ts); + + if (all || ts >= frame->ts) { + /* remove this frame */ + frame->prev->next = frame->next; + frame->next->prev = frame->prev; + + if (frame->next == frame) + jb->frames = NULL; + else + jb->frames = frame->next; + + + /* insert onto "free" single-linked list */ + frame->next = jb->free; + jb->free = frame; + + jb->info.frames_cur--; + + /* we return the frame pointer, even though it's on free list, + * but caller must copy data */ + return frame; + } + + return NULL; +} + +static jb_frame *queue_get(jitterbuf *jb, long ts) +{ + return _queue_get(jb,ts,0); +} + +static jb_frame *queue_getall(jitterbuf *jb) +{ + return _queue_get(jb,0,1); +} + +/* some diagnostics */ +void jb_dbginfo(jitterbuf *jb) +{ + + printf("\njb info: fin=%ld fout=%ld flate=%ld flost=%ld fdrop=%ld fcur=%ld\n", + jb->info.frames_in, jb->info.frames_out, jb->info.frames_late, jb->info.frames_lost, jb->info.frames_dropped, jb->info.frames_cur); + + printf("jitter=%ld current=%ld target=%ld min=%ld sil=%ld len=%ld len/fcur=%ld\n", + jb->info.jitter, jb->info.current, jb->info.target, jb->info.min, jb->info.silence_begin_ts, jb->info.current - jb->info.min, + jb->info.frames_cur ? (jb->info.current - jb->info.min)/jb->info.frames_cur : -8); + if (jb->info.frames_in > 0) + printf("jb info: Loss PCT = %ld%%, Late PCT = %ld%%\n", + jb->info.frames_lost * 100/(jb->info.frames_in + jb->info.frames_lost), + jb->info.frames_late * 100/jb->info.frames_in); + printf("jb info: queue %ld -> %ld. last_ts %ld (queue len: %ld) last_ms %ld\n\n", + queue_next(jb), + queue_last(jb), + jb->info.next_voice_ts, + queue_last(jb) - queue_next(jb), + jb->info.last_voice_ms); +} + + +#ifdef DEEP_DEBUG +static void jb_chkqueue(jitterbuf *jb) +{ + int i=0; + jb_frame *p = jb->frames; + + if (!p) { + return; + } + + do { + if (p->next == NULL) { + jb_err("Queue is BROKEN at item [%d]", i); + } + i++; + p=p->next; + } while (p->next != jb->frames); +} + +static void jb_dbgqueue(jitterbuf *jb) +{ + int i=0; + jb_frame *p = jb->frames; + + jb_dbg("queue: "); + + if (!p) { + jb_dbg("EMPTY\n"); + return; + } + + do { + jb_dbg("[%d]=%ld ", i++, p->ts); + p=p->next; + } while (p->next != jb->frames); + + jb_dbg("\n"); +} +#endif + +enum jb_return_code jb_put(jitterbuf *jb, void *data, const enum jb_frame_type type, long ms, long ts, long now) +{ + long numts; + + printf("jb_put(%p,%p,%ld,%ld,%ld)\n", jb, data, ms, ts, now); + + numts = 0; + if (jb->frames) + numts = jb->frames->prev->ts - jb->frames->ts; + + printf("numts %ld\n", numts); + + if (numts >= jb->info.conf.max_jitterbuf) { + if (!jb->dropem) { + printf("Attempting to exceed Jitterbuf max %ld timeslots\n", + jb->info.conf.max_jitterbuf); + jb->dropem = 1; + } + jb->info.frames_dropped++; + return JB_DROP; + } else { + jb->dropem = 0; + } + + if (type == JB_TYPE_VOICE) { + /* presently, I'm only adding VOICE frames to history and drift calculations; mostly because with the + * IAX integrations, I'm sending retransmitted control frames with their awkward timestamps through */ + if (history_put(jb,ts,now,ms)) { + jb->info.frames_dropped++; + return JB_DROP; + } + } + + jb->info.frames_in++; + + /* if put into head of queue, caller needs to reschedule */ + if (queue_put(jb,data,type,ms,ts)) { + return JB_SCHED; + } + return JB_OK; +} + + +static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now, long interpl) +{ + jb_frame *frame; + long diff; + static int dbg_cnt = 0; + + printf("_jb_get\n"); + + /*if ((now - jb_next(jb)) > 2 * jb->info.last_voice_ms) jb_warn("SCHED: %ld", (now - jb_next(jb))); */ + /* get jitter info */ + history_get(jb); + + if (dbg_cnt && dbg_cnt % 50 == 0) { + jb_dbg("\n"); + } + dbg_cnt++; + + /* target */ + jb->info.target = jb->info.jitter + jb->info.min + jb->info.conf.target_extra; + + /* if a hard clamp was requested, use it */ + if ((jb->info.conf.max_jitterbuf) && ((jb->info.target - jb->info.min) > jb->info.conf.max_jitterbuf)) { + printf("clamping target from %ld to %ld\n", (jb->info.target - jb->info.min), jb->info.conf.max_jitterbuf); + jb->info.target = jb->info.min + jb->info.conf.max_jitterbuf; + } + + diff = jb->info.target - jb->info.current; + + printf("diff = %ld lms=%ld last = %ld now = %ld, djust delay = %ld\n", diff, + jb->info.last_voice_ms, jb->info.last_adjustment, now); + + /* let's work on non-silent case first */ + if (!jb->info.silence_begin_ts) { + + /* + if(diff > 0) + printf("diff > 0\n"); + + if((jb->info.last_adjustment + JB_ADJUST_DELAY) < now) + printf("(jb->info.last_adjustment + JB_ADJUST_DELAY) < now\n"); + + if((diff > queue_last(jb) - queue_next(jb))) + printf("diff > queue_last(jb) - queue_next(jb)\n"); + */ + printf("** Non-silent case update timing info **\n"); + printf("diff %ld\n", diff); + printf("jb->info.last_adjustment %ld\n", jb->info.last_adjustment); + printf("JB_ADJUST_DELAY %ld\n", JB_ADJUST_DELAY); + printf("now %ld\n", now); + + /* we want to grow */ + if ((diff > 0) && + /* we haven't grown in the delay length */ + (((jb->info.last_adjustment + JB_ADJUST_DELAY) < now) || + /* we need to grow more than the "length" we have left */ + (diff > queue_last(jb) - queue_next(jb)) ) ) { + + + + + /* grow by interp frame length */ + jb->info.current += interpl; + jb->info.next_voice_ts += interpl; + jb->info.last_voice_ms = interpl; + jb->info.last_adjustment = now; + jb->info.cnt_contig_interp++; + if (jb->info.conf.max_contig_interp && jb->info.cnt_contig_interp >= jb->info.conf.max_contig_interp) { + jb->info.silence_begin_ts = jb->info.next_voice_ts - jb->info.current; + } + + printf("Non silent case\n"); + return JB_INTERP; + } + + printf("queue get\n"); + + frame = queue_get(jb, jb->info.next_voice_ts - jb->info.current); + + if(!frame) + printf("frame not valid\n"); + + /* not a voice frame; just return it. */ + if (frame && frame->type != JB_TYPE_VOICE) { + if (frame->type == JB_TYPE_SILENCE) { + jb->info.silence_begin_ts = frame->ts; + jb->info.cnt_contig_interp = 0; + } + + *frameout = *frame; + jb->info.frames_out++; + printf("Not a voice packet\n"); + return JB_OK; + } + + + /* voice frame is later than expected */ + if (frame && frame->ts + jb->info.current < jb->info.next_voice_ts) { + if (frame->ts + jb->info.current > jb->info.next_voice_ts - jb->info.last_voice_ms) { + /* either we interpolated past this frame in the last jb_get */ + /* or the frame is still in order, but came a little too quick */ + *frameout = *frame; + /* reset expectation for next frame */ + jb->info.next_voice_ts = frame->ts + jb->info.current + frame->ms; + jb->info.frames_out++; + decrement_losspct(jb); + jb->info.cnt_contig_interp = 0; + printf("Either we interpolated past this frame in the last jb_get" \ + "or the frame is still in order, but came a little too quick\n"); + return JB_OK; + } else { + /* voice frame is late */ + *frameout = *frame; + jb->info.frames_out++; + decrement_losspct(jb); + jb->info.frames_late++; + jb->info.frames_lost--; + printf("Voice frame is late\n"); + printf("late: wanted=%ld, this=%ld, next=%ld\n", jb->info.next_voice_ts - jb->info.current, frame->ts, queue_next(jb)); + return JB_DROP; + } + } + + /* keep track of frame sizes, to allow for variable sized-frames */ + if (frame && frame->ms > 0) { + jb->info.last_voice_ms = frame->ms; + } + + /* we want to shrink; shrink at 1 frame / 500ms */ + /* unless we don't have a frame, then shrink 1 frame */ + /* every 80ms (though perhaps we can shrink even faster */ + /* in this case) */ + if (diff < -jb->info.conf.target_extra && + ((!frame && jb->info.last_adjustment + 80 < now) || + (jb->info.last_adjustment + 500 < now))) { + + jb->info.last_adjustment = now; + jb->info.cnt_contig_interp = 0; + + if (frame) { + *frameout = *frame; + /* shrink by frame size we're throwing out */ + jb->info.current -= frame->ms; + jb->info.frames_out++; + decrement_losspct(jb); + jb->info.frames_dropped++; + printf("Shrink by frame size we're throwing out"); + return JB_DROP; + } else { + /* shrink by last_voice_ms */ + jb->info.current -= jb->info.last_voice_ms; + jb->info.frames_lost++; + increment_losspct(jb); + jb_dbg("S"); + printf("No frames, shrink by last_voice_ms"); + return JB_NOFRAME; + } + } + + /* lost frame */ + if (!frame) { + /* this is a bit of a hack for now, but if we're close to + * target, and we find a missing frame, it makes sense to + * grow, because the frame might just be a bit late; + * otherwise, we presently get into a pattern where we return + * INTERP for the lost frame, then it shows up next, and we + * throw it away because it's late */ + /* I've recently only been able to replicate this using + * iaxclient talking to app_echo on asterisk. In this case, + * my outgoing packets go through asterisk's (old) + * jitterbuffer, and then might get an unusual increasing delay + * there if it decides to grow?? */ + /* Update: that might have been a different bug, that has been fixed.. + * But, this still seemed like a good idea, except that it ended up making a single actual + * lost frame get interpolated two or more times, when there was "room" to grow, so it might + * be a bit of a bad idea overall */ + /*if (diff > -1 * jb->info.last_voice_ms) { + jb->info.current += jb->info.last_voice_ms; + jb->info.last_adjustment = now; + jb_warn("g"); + return JB_INTERP; + } */ + jb->info.frames_lost++; + increment_losspct(jb); + jb->info.next_voice_ts += interpl; + jb->info.last_voice_ms = interpl; + jb->info.cnt_contig_interp++; + if (jb->info.conf.max_contig_interp && jb->info.cnt_contig_interp >= jb->info.conf.max_contig_interp) { + jb->info.silence_begin_ts = jb->info.next_voice_ts - jb->info.current; + } + + return JB_INTERP; + } + + /* normal case; return the frame, increment stuff */ + *frameout = *frame; + jb->info.next_voice_ts += frame->ms; + jb->info.frames_out++; + jb->info.cnt_contig_interp = 0; + decrement_losspct(jb); + jb_dbg("v"); + return JB_OK; + } else { + + printf("Silence???\n"); + /* TODO: after we get the non-silent case down, we'll make the + * silent case -- basically, we'll just grow and shrink faster + * here, plus handle next_voice_ts a bit differently */ + + /* to disable silent special case altogether, just uncomment this: */ + /* jb->info.silence_begin_ts = 0; */ + + /* shrink interpl len every 10ms during silence */ + if (diff < -jb->info.conf.target_extra && + jb->info.last_adjustment + 10 <= now) { + jb->info.current -= interpl; + jb->info.last_adjustment = now; + } + + frame = queue_get(jb, now - jb->info.current); + if (!frame) { + return JB_NOFRAME; + } else if (frame->type != JB_TYPE_VOICE) { + /* normal case; in silent mode, got a non-voice frame */ + *frameout = *frame; + jb->info.frames_out++; + return JB_OK; + } + if (frame->ts < jb->info.silence_begin_ts) { + /* voice frame is late */ + *frameout = *frame; + jb->info.frames_out++; + decrement_losspct(jb); + jb->info.frames_late++; + jb->info.frames_lost--; + jb_dbg("l"); + /*jb_warn("\nlate: wanted=%ld, this=%ld, next=%ld\n", jb->info.next_voice_ts - jb->info.current, frame->ts, queue_next(jb)); + jb_warninfo(jb); */ + return JB_DROP; + } else { + /* voice frame */ + /* try setting current to target right away here */ + jb->info.current = jb->info.target; + jb->info.silence_begin_ts = 0; + jb->info.next_voice_ts = frame->ts + jb->info.current + frame->ms; + jb->info.last_voice_ms = frame->ms; + jb->info.frames_out++; + decrement_losspct(jb); + *frameout = *frame; + jb_dbg("V"); + return JB_OK; + } + } +} + +long jb_next(jitterbuf *jb) +{ + if (jb->info.silence_begin_ts) { + if (jb->frames) { + long next = queue_next(jb); + history_get(jb); + /* shrink during silence */ + if (jb->info.target - jb->info.current < -jb->info.conf.target_extra) + return jb->info.last_adjustment + 10; + return next + jb->info.target; + } + else + return JB_LONGMAX; + } else { + return jb->info.next_voice_ts; + } +} + +enum jb_return_code jb_get(jitterbuf *jb, jb_frame *frameout, long now, long interpl) +{ + enum jb_return_code ret = _jb_get(jb, frameout, now, interpl); +#if 0 + static int lastts=0; + int thists = ((ret == JB_OK) || (ret == JB_DROP)) ? frameout->ts : 0; + jb_warn("jb_get(%x,%x,%ld) = %d (%d)\n", jb, frameout, now, ret, thists); + if (thists && thists < lastts) jb_warn("XXXX timestamp roll-back!!!\n"); + lastts = thists; +#endif + if (ret == JB_INTERP) + frameout->ms = jb->info.last_voice_ms; + + return ret; +} + +enum jb_return_code jb_getall(jitterbuf *jb, jb_frame *frameout) +{ + jb_frame *frame; + frame = queue_getall(jb); + + if (!frame) { + return JB_NOFRAME; + } + + *frameout = *frame; + return JB_OK; +} + + +enum jb_return_code jb_getinfo(jitterbuf *jb, jb_info *stats) +{ + + history_get(jb); + + *stats = jb->info; + + return JB_OK; +} + +enum jb_return_code jb_setconf(jitterbuf *jb, jb_conf *conf) +{ + /* take selected settings from the struct */ + + jb->info.conf.max_jitterbuf = conf->max_jitterbuf; + jb->info.conf.resync_threshold = conf->resync_threshold; + jb->info.conf.max_contig_interp = conf->max_contig_interp; + + /* -1 indicates use of the default JB_TARGET_EXTRA value */ + jb->info.conf.target_extra = ( conf->target_extra == -1 ) + ? JB_TARGET_EXTRA + : conf->target_extra + ; + + /* update these to match new target_extra setting */ + jb->info.current = jb->info.conf.target_extra; + jb->info.target = jb->info.conf.target_extra; + + return JB_OK; +} + + diff --git a/sflphone-common/src/audio/jitterbuf.h b/sflphone-common/src/audio/jitterbuf.h new file mode 100755 index 0000000000..8de8bf0885 --- /dev/null +++ b/sflphone-common/src/audio/jitterbuf.h @@ -0,0 +1,177 @@ +/* + * jitterbuf: an application-independent jitterbuffer + * + * Copyrights: + * Copyright (C) 2004-2005, Horizon Wimba, Inc. + * + * Contributors: + * Steve Kann <stevek@stevek.com> + * + * This program is free software, distributed under the terms of + * the GNU Lesser (Library) General Public License + * + * Copyright on this file is disclaimed to Digium for inclusion in Asterisk + */ + +/*! \file + * \brief + * jitterbuf: an application-independent jitterbuffer + * \ref jitterbuf.c + */ + + +#ifndef _JITTERBUF_H_ +#define _JITTERBUF_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/*! \name configuration constants */ +/*@{ */ + /*! Number of historical timestamps to use in calculating jitter and drift */ +#define JB_HISTORY_SZ 500 + /*! what percentage of timestamps should we drop from the history when we examine it; + * this might eventually be something made configurable */ +#define JB_HISTORY_DROPPCT 3 + /*! the maximum droppct we can handle (say it was configurable). */ +#define JB_HISTORY_DROPPCT_MAX 4 + /*! the size of the buffer we use to keep the top and botton timestamps for dropping */ +#define JB_HISTORY_MAXBUF_SZ JB_HISTORY_SZ * JB_HISTORY_DROPPCT_MAX / 100 + /*! amount of additional jitterbuffer adjustment */ +#define JB_TARGET_EXTRA 40 + /*! ms between growing and shrinking; may not be honored if jitterbuffer runs out of space */ +#define JB_ADJUST_DELAY 40 +/*@} */ + +enum jb_return_code { + /* return codes */ + JB_OK, /* 0 */ + JB_EMPTY, /* 1 */ + JB_NOFRAME, /* 2 */ + JB_INTERP, /* 3 */ + JB_DROP, /* 4 */ + JB_SCHED /* 5 */ +}; + +enum jb_frame_type { + /* frame types */ + JB_TYPE_CONTROL, /*!< 0 */ + JB_TYPE_VOICE, /*!< 1 */ + JB_TYPE_VIDEO, /*!< 2 - reserved */ + JB_TYPE_SILENCE /*!< 3 */ +}; + +typedef struct jb_conf { + /* settings */ + long max_jitterbuf; /*!< defines a hard clamp to use in setting the jitter buffer delay */ + long resync_threshold; /*!< the jb will resync when delay increases to (2 * jitter) + this param */ + long max_contig_interp; /*!< the max interp frames to return in a row */ + long target_extra ; /*!< amount of additional jitterbuffer adjustment, overrides JB_TARGET_EXTRA */ +} jb_conf; + +typedef struct jb_info { + jb_conf conf; + + /* statistics */ + long frames_in; /*!< number of frames input to the jitterbuffer.*/ + long frames_out; /*!< number of frames output from the jitterbuffer.*/ + long frames_late; /*!< number of frames which were too late, and dropped.*/ + long frames_lost; /*!< number of missing frames.*/ + long frames_dropped; /*!< number of frames dropped (shrinkage) */ + long frames_ooo; /*!< number of frames received out-of-order */ + long frames_cur; /*!< number of frames presently in jb, awaiting delivery.*/ + long jitter; /*!< jitter measured within current history interval*/ + long min; /*!< minimum lateness within current history interval */ + long current; /*!< the present jitterbuffer adjustment */ + long target; /*!< the target jitterbuffer adjustment */ + long losspct; /*!< recent lost frame percentage (* 1000) */ + long next_voice_ts; /*!< the ts of the next frame to be read from the jb - in receiver's time */ + long last_voice_ms; /*!< the duration of the last voice frame */ + long silence_begin_ts; /*!< the time of the last CNG frame, when in silence */ + long last_adjustment; /*!< the time of the last adjustment */ + long last_delay; /*!< the last now added to history */ + long cnt_delay_discont; /*!< the count of discontinuous delays */ + long resync_offset; /*!< the amount to offset ts to support resyncs */ + long cnt_contig_interp; /*!< the number of contiguous interp frames returned */ +} jb_info; + +typedef struct jb_frame { + void *data; /* the frame data */ + long ts; /* the relative delivery time expected */ + long ms; /* the time covered by this frame, in sec/8000 */ + enum jb_frame_type type; /* the type of frame */ + struct jb_frame *next, *prev; +} jb_frame; + +typedef struct jitterbuf { + jb_info info; + + /* history */ + long history[JB_HISTORY_SZ]; /*!< history */ + int hist_ptr; /*!< points to index in history for next entry */ + long hist_maxbuf[JB_HISTORY_MAXBUF_SZ]; /*!< a sorted buffer of the max delays (highest first) */ + long hist_minbuf[JB_HISTORY_MAXBUF_SZ]; /*!< a sorted buffer of the min delays (lowest first) */ + int hist_maxbuf_valid; /*!< are the "maxbuf"/minbuf valid? */ + unsigned int dropem:1; /*!< flag to indicate dropping frames (overload) */ + + jb_frame *frames; /*!< queued frames */ + jb_frame *free; /*!< free frames (avoid malloc?) */ +} jitterbuf; + + +/*! \brief new jitterbuf */ +jitterbuf * jb_new(void); + +/*! \brief destroy jitterbuf */ +void jb_destroy(jitterbuf *jb); + +/*! \brief reset jitterbuf + * \note The jitterbuffer should be empty before you call this, otherwise + * you will leak queued frames, and some internal structures */ +void jb_reset(jitterbuf *jb); + +/*!\brief queue a frame + * + * data=frame data, timings (in ms): ms=length of frame (for voice), ts=ts (sender's time) + * now=now (in receiver's time) return value is one of + * JB_OK: Frame added. Last call to jb_next() still valid + * JB_DROP: Drop this frame immediately + * JB_SCHED: Frame added. Call jb_next() to get a new time for the next frame + */ +enum jb_return_code jb_put(jitterbuf *jb, void *data, const enum jb_frame_type type, long ms, long ts, long now); + +/*! \brief get a frame for time now (receiver's time) return value is one of + * JB_OK: You've got frame! + * JB_DROP: Here's an audio frame you should just drop. Ask me again for this time.. + * JB_NOFRAME: There's no frame scheduled for this time. + * JB_INTERP: Please interpolate an interpl-length frame for this time (either we need to grow, or there was a lost frame) + * JB_EMPTY: The jb is empty. + */ +enum jb_return_code jb_get(jitterbuf *jb, jb_frame *frame, long now, long interpl); + +/*! \brief unconditionally get frames from jitterbuf until empty */ +enum jb_return_code jb_getall(jitterbuf *jb, jb_frame *frameout); + +/*! \brief when is the next frame due out, in receiver's time (0=EMPTY) + * This value may change as frames are added (esp non-audio frames) */ +long jb_next(jitterbuf *jb); + +/*! \brief get jitterbuf info: only "statistics" may be valid */ +enum jb_return_code jb_getinfo(jitterbuf *jb, jb_info *stats); + +/* some diagnostics */ +void jb_dbginfo(jitterbuf *jb); + +/*! \brief set jitterbuf conf */ +enum jb_return_code jb_setconf(jitterbuf *jb, jb_conf *conf); + +typedef void __attribute__((format(printf, 1, 2))) (*jb_output_function_t)(const char *fmt, ...); +void jb_setoutput(jb_output_function_t err, jb_output_function_t warn, jb_output_function_t dbg); + +#ifdef __cplusplus +} +#endif + + +#endif -- GitLab From ad0e5c2335f47b92070f2989ab25044d96e9aed7 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 23 Jun 2010 11:47:39 -0400 Subject: [PATCH 091/197] [#2530] Use fixed jitter buffering for now --- .../src/audio/audiortp/AudioRtpSession.h | 40 ++++++++--- sflphone-common/src/audio/jitterbuf.cpp | 71 ++++++++++--------- 2 files changed, 67 insertions(+), 44 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index 48a44b1d1a..ca371658a7 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -680,39 +680,57 @@ namespace sfl { jb_frame frame; + _jbuffer->info.conf.resync_threshold = 0; + if (adu) { - + + if(_jbuffer->frames) { + // _debug("_jbuffer->frames->prev->ts %d, _jbuffer->frames->ts %d", _jbuffer->frames->prev->ts, _jbuffer->frames->ts); + // _debug("_jbuffer->info.conf.max_jitterbuf %d", _jbuffer->info.conf.max_jitterbuf); + } + + // _debug("PUT_DATA: _ts %d, _currentTime %d", _ts, _currentTime); spkrDataIn = (unsigned char*) adu->getData(); // data in char size = adu->getSize(); // size in char result = jb_put(_jbuffer, spkrDataIn, JB_TYPE_VOICE, _packetLength, _ts+=20, _currentTime); - // result = jb_get(_jbuffer, &frame, _currentTime+=20, _packetLength); + /* + switch(result) { + case JB_OK: printf("JB_OK\n"); break; + case JB_EMPTY: printf("JB_EMPTY\n"); break; + case JB_NOFRAME: printf("JB_NOFRAME\n"); break; + case JB_INTERP: printf("JB_INTERP\n"); break; + case JB_DROP: printf("JB_DROP\n"); break; + case JB_SCHED: printf("JB_SCHED\n"); break; + default: printf("Unknown returned value\n"); break; + } + */ } else { _debug("No RTP packet available !!!!!!!!!!!!!!!!!!!!!!!\n"); } + // _debug("GET_DATA: _currentTime %d", _currentTime); result = jb_get(_jbuffer, &frame, _currentTime+=20, _packetLength); - /* switch(result) { - case 0: printf("You\'ve got frame!\n"); break; - case 1: printf("Here\'s an audio frame you should just drop. Ask me again for this time..\n"); break; - case 2: printf("There\'s no frame scheduled for this time.\n"); break; - case 3: printf("Please interpolate an interpl-length frame for this time (either we need to grow, or there was a lost frame)\n"); break; - case 4: printf("Empty\n"); break; + case JB_OK: printf("JB_OK\n"); break; + case JB_EMPTY: printf("JB_EMPTY\n"); break; + case JB_NOFRAME: printf("JB_NOFRAME\n"); break; + case JB_INTERP: printf("JB_INTERP\n"); break; + case JB_DROP: printf("JB_DROP\n"); break; + case JB_SCHED: printf("JB_SCHED\n"); break; default: printf("Unknown returned value\n"); break; } */ + // _debug("packetMisorder %d", static_cast<D*>(this)->getMaxPacketMisorder()); + // DTMF over RTP, size must be over 4 in order to process it as voice data if(size > 4) { // processDataDecode(spkrDataIn, size); if(result == 0) { processDataDecode((unsigned char *)(frame.data), 160); } - else { - _debug("bad data"); - } } else { // _debug("RTP: Received an RTP event with payload: %d", adu->getType()); diff --git a/sflphone-common/src/audio/jitterbuf.cpp b/sflphone-common/src/audio/jitterbuf.cpp index 06a418090f..c72a6387f9 100755 --- a/sflphone-common/src/audio/jitterbuf.cpp +++ b/sflphone-common/src/audio/jitterbuf.cpp @@ -28,10 +28,13 @@ */ #include "jitterbuf.h" + #include <string.h> #include <stdio.h> #include <stdlib.h> +#include "global.h" + /*! define these here, just for ancient compiler systems */ #define JB_LONGMAX 2147483647L #define JB_LONGMIN (-JB_LONGMAX - 1L) @@ -258,14 +261,14 @@ static void history_calc_maxbuf(jitterbuf *jb) if (0) { int k; - fprintf(stderr, "toins = %ld\n", toins); - fprintf(stderr, "maxbuf ="); + _debug("toins = %ld\n", toins); + _debug("maxbuf ="); for (k=0;k<JB_HISTORY_MAXBUF_SZ;k++) - fprintf(stderr, "%ld ", jb->hist_maxbuf[k]); - fprintf(stderr, "\nminbuf ="); + _debug("%ld ", jb->hist_maxbuf[k]); + _debug("\nminbuf ="); for (k=0;k<JB_HISTORY_MAXBUF_SZ;k++) - fprintf(stderr, "%ld ", jb->hist_minbuf[k]); - fprintf(stderr, "\n"); + _debug("%ld ", jb->hist_minbuf[k]); + _debug("\n"); } } @@ -397,7 +400,7 @@ static jb_frame *_queue_get(jitterbuf *jb, long ts, int all) if (!frame) return NULL; - printf("queue_get: ASK %ld FIRST %ld\n", ts, frame->ts); + _debug("queue_get: ASK %ld FIRST %ld\n", ts, frame->ts); if (all || ts >= frame->ts) { /* remove this frame */ @@ -438,17 +441,17 @@ static jb_frame *queue_getall(jitterbuf *jb) void jb_dbginfo(jitterbuf *jb) { - printf("\njb info: fin=%ld fout=%ld flate=%ld flost=%ld fdrop=%ld fcur=%ld\n", + _debug("\njb info: fin=%ld fout=%ld flate=%ld flost=%ld fdrop=%ld fcur=%ld\n", jb->info.frames_in, jb->info.frames_out, jb->info.frames_late, jb->info.frames_lost, jb->info.frames_dropped, jb->info.frames_cur); - printf("jitter=%ld current=%ld target=%ld min=%ld sil=%ld len=%ld len/fcur=%ld\n", + _debug("jitter=%ld current=%ld target=%ld min=%ld sil=%ld len=%ld len/fcur=%ld\n", jb->info.jitter, jb->info.current, jb->info.target, jb->info.min, jb->info.silence_begin_ts, jb->info.current - jb->info.min, jb->info.frames_cur ? (jb->info.current - jb->info.min)/jb->info.frames_cur : -8); if (jb->info.frames_in > 0) - printf("jb info: Loss PCT = %ld%%, Late PCT = %ld%%\n", + _debug("jb info: Loss PCT = %ld%%, Late PCT = %ld%%\n", jb->info.frames_lost * 100/(jb->info.frames_in + jb->info.frames_lost), jb->info.frames_late * 100/jb->info.frames_in); - printf("jb info: queue %ld -> %ld. last_ts %ld (queue len: %ld) last_ms %ld\n\n", + _debug("jb info: queue %ld -> %ld. last_ts %ld (queue len: %ld) last_ms %ld\n\n", queue_next(jb), queue_last(jb), jb->info.next_voice_ts, @@ -497,21 +500,21 @@ static void jb_dbgqueue(jitterbuf *jb) } #endif -enum jb_return_code jb_put(jitterbuf *jb, void *data, const enum jb_frame_type type, long ms, long ts, long now) +jb_return_code jb_put(jitterbuf *jb, void *data, const enum jb_frame_type type, long ms, long ts, long now) { long numts; - printf("jb_put(%p,%p,%ld,%ld,%ld)\n", jb, data, ms, ts, now); + _debug("jb_put(%p,%p,%ld,%ld,%ld)\n", jb, data, ms, ts, now); numts = 0; if (jb->frames) numts = jb->frames->prev->ts - jb->frames->ts; - printf("numts %ld\n", numts); + _debug("numts %ld\n", numts); if (numts >= jb->info.conf.max_jitterbuf) { if (!jb->dropem) { - printf("Attempting to exceed Jitterbuf max %ld timeslots\n", + _debug("Attempting to exceed Jitterbuf max %ld timeslots\n", jb->info.conf.max_jitterbuf); jb->dropem = 1; } @@ -546,7 +549,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now, long diff; static int dbg_cnt = 0; - printf("_jb_get\n"); + _debug("_jb_get\n"); /*if ((now - jb_next(jb)) > 2 * jb->info.last_voice_ms) jb_warn("SCHED: %ld", (now - jb_next(jb))); */ /* get jitter info */ @@ -562,13 +565,13 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now, /* if a hard clamp was requested, use it */ if ((jb->info.conf.max_jitterbuf) && ((jb->info.target - jb->info.min) > jb->info.conf.max_jitterbuf)) { - printf("clamping target from %ld to %ld\n", (jb->info.target - jb->info.min), jb->info.conf.max_jitterbuf); + _debug("clamping target from %ld to %ld\n", (jb->info.target - jb->info.min), jb->info.conf.max_jitterbuf); jb->info.target = jb->info.min + jb->info.conf.max_jitterbuf; } diff = jb->info.target - jb->info.current; - printf("diff = %ld lms=%ld last = %ld now = %ld, djust delay = %ld\n", diff, + _debug("diff = %ld lms=%ld last = %ld now = %ld, djust delay = %ld\n", diff, jb->info.last_voice_ms, jb->info.last_adjustment, now); /* let's work on non-silent case first */ @@ -584,11 +587,11 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now, if((diff > queue_last(jb) - queue_next(jb))) printf("diff > queue_last(jb) - queue_next(jb)\n"); */ - printf("** Non-silent case update timing info **\n"); - printf("diff %ld\n", diff); - printf("jb->info.last_adjustment %ld\n", jb->info.last_adjustment); - printf("JB_ADJUST_DELAY %ld\n", JB_ADJUST_DELAY); - printf("now %ld\n", now); + _debug("** Non-silent case update timing info **\n"); + _debug("diff %ld\n", diff); + _debug("jb->info.last_adjustment %ld\n", jb->info.last_adjustment); + _debug("JB_ADJUST_DELAY %ld\n", JB_ADJUST_DELAY); + _debug("now %ld\n", now); /* we want to grow */ if ((diff > 0) && @@ -610,16 +613,16 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now, jb->info.silence_begin_ts = jb->info.next_voice_ts - jb->info.current; } - printf("Non silent case\n"); + _debug("Non silent case\n"); return JB_INTERP; } - printf("queue get\n"); + _debug("queue get\n"); frame = queue_get(jb, jb->info.next_voice_ts - jb->info.current); if(!frame) - printf("frame not valid\n"); + _debug("frame not valid\n"); /* not a voice frame; just return it. */ if (frame && frame->type != JB_TYPE_VOICE) { @@ -630,7 +633,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now, *frameout = *frame; jb->info.frames_out++; - printf("Not a voice packet\n"); + _debug("Not a voice packet\n"); return JB_OK; } @@ -646,7 +649,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now, jb->info.frames_out++; decrement_losspct(jb); jb->info.cnt_contig_interp = 0; - printf("Either we interpolated past this frame in the last jb_get" \ + _debug("Either we interpolated past this frame in the last jb_get" \ "or the frame is still in order, but came a little too quick\n"); return JB_OK; } else { @@ -656,8 +659,8 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now, decrement_losspct(jb); jb->info.frames_late++; jb->info.frames_lost--; - printf("Voice frame is late\n"); - printf("late: wanted=%ld, this=%ld, next=%ld\n", jb->info.next_voice_ts - jb->info.current, frame->ts, queue_next(jb)); + _debug("Voice frame is late\n"); + _debug("late: wanted=%ld, this=%ld, next=%ld\n", jb->info.next_voice_ts - jb->info.current, frame->ts, queue_next(jb)); return JB_DROP; } } @@ -685,7 +688,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now, jb->info.frames_out++; decrement_losspct(jb); jb->info.frames_dropped++; - printf("Shrink by frame size we're throwing out"); + _debug("Shrink by frame size we're throwing out"); return JB_DROP; } else { /* shrink by last_voice_ms */ @@ -693,7 +696,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now, jb->info.frames_lost++; increment_losspct(jb); jb_dbg("S"); - printf("No frames, shrink by last_voice_ms"); + _debug("No frames, shrink by last_voice_ms"); return JB_NOFRAME; } } @@ -743,7 +746,7 @@ static enum jb_return_code _jb_get(jitterbuf *jb, jb_frame *frameout, long now, return JB_OK; } else { - printf("Silence???\n"); + _debug("Silence???\n"); /* TODO: after we get the non-silent case down, we'll make the * silent case -- basically, we'll just grow and shrink faster * here, plus handle next_voice_ts a bit differently */ @@ -814,6 +817,8 @@ long jb_next(jitterbuf *jb) enum jb_return_code jb_get(jitterbuf *jb, jb_frame *frameout, long now, long interpl) { + _debug("\n***** JB_GET *****\n\n"); + enum jb_return_code ret = _jb_get(jb, frameout, now, interpl); #if 0 static int lastts=0; -- GitLab From 5f6ae1f1c9b8b49dd945ffd51e96d10b5c766e71 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 23 Jun 2010 14:29:55 -0400 Subject: [PATCH 092/197] [#959] Add noise canceller for incoming data --- .../src/audio/audiortp/AudioRtpSession.h | 52 ++++++++++++++++--- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index ca371658a7..24cfba8b74 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -250,7 +250,9 @@ namespace sfl { * Current time in ms */ int _currentTime; - + + SpeexPreprocessState *_noiseState; + protected: SIPCall * _ca; @@ -280,6 +282,7 @@ namespace sfl { _timestampCount(0), _countNotificationTime(0), _jbuffer(NULL), + _noiseState(NULL), _ca (sipcall) { setCancel (cancelDefault); @@ -333,7 +336,14 @@ namespace sfl { delete _audiocodec; _audiocodec = NULL; } - jb_destroy(_jbuffer); + if(_jbuffer) { + jb_destroy(_jbuffer); + } + + if(_noiseState) { + speex_preprocess_state_destroy(_noiseState); + } + } template <typename D> @@ -403,6 +413,29 @@ namespace sfl { _debug ("RTP: Setting static payload format"); static_cast<D*>(this)->setPayloadFormat (ost::StaticPayloadFormat ( (ost::StaticPayloadType) _audiocodec->getPayload())); } + + if(_noiseState) { + speex_preprocess_state_destroy(_noiseState); + _noiseState = NULL; + } + + _noiseState = speex_preprocess_state_init(_codecSampleRate, _codecFrameSize); + int i=1; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); + i=-20; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &i); + i=0; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC, &i); + i=8000; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC_TARGET, &i); + i=16000; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i); + i=0; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i); + float f=0.0; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f); + f=0.0; + speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f); } template <typename D> @@ -596,6 +629,8 @@ namespace sfl { // Store the number of samples for recording _nSamplesSpkr = nbSample; + speex_preprocess_run(_noiseState, _spkrDataConverted); + // put data in audio layer, size in byte _manager->getAudioDriver()->getMainBuffer()->putData (_spkrDataConverted, nbSample * sizeof (SFLDataFormat), 100, _ca->getCallId()); @@ -604,6 +639,7 @@ namespace sfl { // Store the number of samples for recording _nSamplesSpkr = nbSample; + // speex_preprocess_run(_noiseState, _spkrDataDecoded); // put data in audio layer, size in byte _manager->getAudioDriver()->getMainBuffer()->putData (_spkrDataDecoded, expandedSize, 100, _ca->getCallId()); @@ -684,14 +720,17 @@ namespace sfl { if (adu) { - if(_jbuffer->frames) { + // if(_jbuffer->frames) { // _debug("_jbuffer->frames->prev->ts %d, _jbuffer->frames->ts %d", _jbuffer->frames->prev->ts, _jbuffer->frames->ts); // _debug("_jbuffer->info.conf.max_jitterbuf %d", _jbuffer->info.conf.max_jitterbuf); - } + // } // _debug("PUT_DATA: _ts %d, _currentTime %d", _ts, _currentTime); spkrDataIn = (unsigned char*) adu->getData(); // data in char size = adu->getSize(); // size in char + + + result = jb_put(_jbuffer, spkrDataIn, JB_TYPE_VOICE, _packetLength, _ts+=20, _currentTime); /* switch(result) { @@ -710,6 +749,7 @@ namespace sfl { } // _debug("GET_DATA: _currentTime %d", _currentTime); + result = jb_get(_jbuffer, &frame, _currentTime+=20, _packetLength); /* switch(result) { @@ -728,8 +768,8 @@ namespace sfl { // DTMF over RTP, size must be over 4 in order to process it as voice data if(size > 4) { // processDataDecode(spkrDataIn, size); - if(result == 0) { - processDataDecode((unsigned char *)(frame.data), 160); + if(result == JB_OK) { + processDataDecode((unsigned char *)(frame.data), 160); } } else { -- GitLab From b02e589322250dbde749cf4b9e6c0afa5be8c7ee Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 23 Jun 2010 14:31:44 -0400 Subject: [PATCH 093/197] [#959] Use -20 db attenuation for noise canceller --- sflphone-common/src/audio/echocancel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp index 16eb50f480..aab1e8f998 100644 --- a/sflphone-common/src/audio/echocancel.cpp +++ b/sflphone-common/src/audio/echocancel.cpp @@ -93,7 +93,7 @@ EchoCancel::EchoCancel(int smplRate, int frameLength) : _samplingRate(smplRate), _noiseState = speex_preprocess_state_init(_smplPerFrame, _samplingRate); int i=1; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i); - i=-10; + i=-20; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &i); i=0; speex_preprocess_ctl(_noiseState, SPEEX_PREPROCESS_SET_AGC, &i); -- GitLab From 56985ee9133cb13a18f11cc2ab4bdc19c03a669f Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 25 Jun 2010 12:16:10 -0400 Subject: [PATCH 094/197] [#2530] Remove unusefull comments --- .../src/audio/audiortp/AudioRtpSession.h | 42 ++----------------- 1 file changed, 3 insertions(+), 39 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index 24cfba8b74..b9eef55971 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -720,65 +720,29 @@ namespace sfl { if (adu) { - // if(_jbuffer->frames) { - // _debug("_jbuffer->frames->prev->ts %d, _jbuffer->frames->ts %d", _jbuffer->frames->prev->ts, _jbuffer->frames->ts); - // _debug("_jbuffer->info.conf.max_jitterbuf %d", _jbuffer->info.conf.max_jitterbuf); - // } - - // _debug("PUT_DATA: _ts %d, _currentTime %d", _ts, _currentTime); spkrDataIn = (unsigned char*) adu->getData(); // data in char size = adu->getSize(); // size in char result = jb_put(_jbuffer, spkrDataIn, JB_TYPE_VOICE, _packetLength, _ts+=20, _currentTime); - /* - switch(result) { - case JB_OK: printf("JB_OK\n"); break; - case JB_EMPTY: printf("JB_EMPTY\n"); break; - case JB_NOFRAME: printf("JB_NOFRAME\n"); break; - case JB_INTERP: printf("JB_INTERP\n"); break; - case JB_DROP: printf("JB_DROP\n"); break; - case JB_SCHED: printf("JB_SCHED\n"); break; - default: printf("Unknown returned value\n"); break; - } - */ + } else { _debug("No RTP packet available !!!!!!!!!!!!!!!!!!!!!!!\n"); } - // _debug("GET_DATA: _currentTime %d", _currentTime); - result = jb_get(_jbuffer, &frame, _currentTime+=20, _packetLength); - /* - switch(result) { - case JB_OK: printf("JB_OK\n"); break; - case JB_EMPTY: printf("JB_EMPTY\n"); break; - case JB_NOFRAME: printf("JB_NOFRAME\n"); break; - case JB_INTERP: printf("JB_INTERP\n"); break; - case JB_DROP: printf("JB_DROP\n"); break; - case JB_SCHED: printf("JB_SCHED\n"); break; - default: printf("Unknown returned value\n"); break; - } - */ - - // _debug("packetMisorder %d", static_cast<D*>(this)->getMaxPacketMisorder()); // DTMF over RTP, size must be over 4 in order to process it as voice data if(size > 4) { // processDataDecode(spkrDataIn, size); if(result == JB_OK) { - processDataDecode((unsigned char *)(frame.data), 160); + processDataDecode((unsigned char *)(frame.data), 160); } } - else { - // _debug("RTP: Received an RTP event with payload: %d", adu->getType()); - // ost::RTPPacket::RFC2833Payload *dtmf = (ost::RTPPacket::RFC2833Payload *)adu->getData(); - // _debug("RTP: Data received %d", dtmf->event); - } - // delete adu; + delete adu; } template <typename D> -- GitLab From 0ccbe36bbef4546b494acc152798b291c86e54f6 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 25 Jun 2010 17:44:53 -0400 Subject: [PATCH 095/197] [#2165] Record a conference, instanciate recorder thread --- sflphone-common/src/audio/mainbuffer.cpp | 90 ++++++++++++++----- sflphone-common/src/audio/mainbuffer.h | 22 ++++- sflphone-common/src/audio/recordable.cpp | 5 +- sflphone-common/src/audio/recordable.h | 8 +- sflphone-common/src/call.cpp | 21 +++++ sflphone-common/src/call.h | 6 +- sflphone-common/src/conference.cpp | 28 ++++++ sflphone-common/src/conference.h | 2 + sflphone-common/src/eventthread.h | 1 + sflphone-common/src/managerimpl.cpp | 19 ++-- sflphone-common/src/managerimpl.h | 10 +-- .../src/plug-in/audiorecorder/Makefile.am | 3 +- 12 files changed, 169 insertions(+), 46 deletions(-) diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 4782b6ddf7..91e0d238d8 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -203,6 +203,22 @@ void MainBuffer::bindCallID (CallID call_id1, CallID call_id2) } +void MainBuffer::bindHalfDuplexOut(CallID process_id, CallID call_id) +{ + + // This method is used only for active calls, if this call does not exist, do nothing + if(!getRingBuffer(call_id)) + return; + + if(!getCallIDSet(process_id)) + createCallIDSet(process_id); + + getRingBuffer(call_id)->createReadPointer(process_id); + + addCallIDtoSet(process_id, call_id); + +} + void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2) { @@ -216,7 +232,7 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2) ringbuffer = getRingBuffer (call_id2); - if (ringbuffer != NULL) { + if (ringbuffer) { ringbuffer->removeReadPointer (call_id1); @@ -229,18 +245,36 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2) ringbuffer = getRingBuffer (call_id1); - if (ringbuffer != NULL) { - ringbuffer->removeReadPointer (call_id2); - - if (ringbuffer->getNbReadPointer() == 0) { - removeCallIDSet (call_id1); - removeRingBuffer (call_id1); - } + if (ringbuffer) { + ringbuffer->removeReadPointer (call_id2); + + if (ringbuffer->getNbReadPointer() == 0) { + removeCallIDSet (call_id1); + removeRingBuffer (call_id1); + } } +} +void MainBuffer::unBindHalfDuplexOut(CallID call_id, CallID process_id) +{ + + removeCallIDfromSet(process_id, call_id); + + RingBuffer* ringbuffer; + + ringbuffer = getRingBuffer(process_id); + + if(ringbuffer) { + ringbuffer->removeReadPointer(call_id); + if(ringbuffer->getNbReadPointer() == 0) { + removeCallIDSet(process_id); + removeRingBuffer(process_id); + } + } } + void MainBuffer::unBindAll (CallID call_id) { @@ -268,10 +302,32 @@ void MainBuffer::unBindAll (CallID call_id) } -int MainBuffer::putData (void *buffer, int toCopy, unsigned short volume, CallID call_id) +void MainBuffer::unBindAllHalfDuplexOut(CallID process_id) { - // ost::MutexLock guard (_mutex); + CallIDSet* callid_set = getCallIDSet(process_id); + + if(!callid_set) + return; + + if(callid_set->empty()) + return; + + CallIDSet temp_set = *callid_set; + + CallIDSet::iterator iter_set = temp_set.begin(); + + while(iter_set != temp_set.end()) { + CallID call_id_in_set = *iter_set; + unBindCallID(process_id, call_id_in_set); + + iter_set++; + } +} + + +int MainBuffer::putData (void *buffer, int toCopy, unsigned short volume, CallID call_id) +{ RingBuffer* ring_buffer = getRingBuffer (call_id); @@ -281,7 +337,6 @@ int MainBuffer::putData (void *buffer, int toCopy, unsigned short volume, CallID int a; - // ost::MutexLock guard (_mutex); a = ring_buffer->AvailForPut(); if (a >= toCopy) { @@ -298,8 +353,6 @@ int MainBuffer::putData (void *buffer, int toCopy, unsigned short volume, CallID int MainBuffer::availForPut (CallID call_id) { - // ost::MutexLock guard (_mutex); - RingBuffer* ringbuffer = getRingBuffer (call_id); if (ringbuffer == NULL) @@ -312,7 +365,6 @@ int MainBuffer::availForPut (CallID call_id) int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID call_id) { - // ost::MutexLock guard (_mutex); CallIDSet* callid_set = getCallIDSet (call_id); @@ -377,8 +429,6 @@ int MainBuffer::getDataByID (void *buffer, int toCopy, unsigned short volume, Ca int MainBuffer::availForGet (CallID call_id) { - // ost::MutexLock guard (_mutex); - CallIDSet* callid_set = getCallIDSet (call_id); if (callid_set == NULL) @@ -396,10 +446,10 @@ int MainBuffer::availForGet (CallID call_id) _debug ("This problem should not occur since we have %i element", (int) callid_set->size()); } - // else return availForGetByID (*iter_id, call_id); + } else { - // _debug("CallIDSet with ID: \"%s\" is a conference!", call_id.c_str()); + int avail_bytes = 99999; int nb_bytes; CallIDSet::iterator iter_id = callid_set->begin(); @@ -437,9 +487,6 @@ int MainBuffer::availForGetByID (CallID call_id, CallID reader_id) int MainBuffer::discard (int toDiscard, CallID call_id) { - // _debug("MainBuffer::discard"); - - // ost::MutexLock guard (_mutex); CallIDSet* callid_set = getCallIDSet (call_id); @@ -447,7 +494,6 @@ int MainBuffer::discard (int toDiscard, CallID call_id) return 0; if (callid_set->empty()) { - // _debug("CallIDSet with ID: \"%s\" is empty!", call_id.c_str()); return 0; } diff --git a/sflphone-common/src/audio/mainbuffer.h b/sflphone-common/src/audio/mainbuffer.h index 402fe84d6d..551cf8c087 100644 --- a/sflphone-common/src/audio/mainbuffer.h +++ b/sflphone-common/src/audio/mainbuffer.h @@ -51,7 +51,7 @@ typedef std::map<CallID, CallIDSet*> CallIDMap; class MainBuffer { -public: + public: MainBuffer(); @@ -67,20 +67,40 @@ public: bool removeCallIDSet(CallID set_id); + /** + * Add a new call id to this set + */ void addCallIDtoSet(CallID set_id, CallID call_id); void removeCallIDfromSet(CallID set_id, CallID call_id); + /** + * Create a new ringbuffer with default readpointer + */ RingBuffer* createRingBuffer(CallID call_id); bool removeRingBuffer(CallID call_id); void bindCallID(CallID call_id1, CallID call_id2 = default_id); + /** + * Add a new call_id to unidirectional outgoing stream + * \param call_id New call id to be added for this stream + * \param process_id Process that require this stream + */ + void bindHalfDuplexOut(CallID process_id, CallID call_id = default_id); + + /** + * Unbind two calls + */ void unBindCallID(CallID call_id1, CallID call_id2 = default_id); + void unBindHalfDuplexOut(CallID process_id, CallID call_id = default_id); + void unBindAll(CallID call_id); + void unBindAllHalfDuplexOut(CallID process_id); + int putData(void *buffer, int toCopy, unsigned short volume = 100, CallID call_id = default_id); int getData(void *buffer, int toCopy, unsigned short volume = 100, CallID call_id = default_id); diff --git a/sflphone-common/src/audio/recordable.cpp b/sflphone-common/src/audio/recordable.cpp index f8044c12a4..7e3c37addf 100644 --- a/sflphone-common/src/audio/recordable.cpp +++ b/sflphone-common/src/audio/recordable.cpp @@ -29,8 +29,9 @@ #include "recordable.h" #include "manager.h" +#include "mainbuffer.h" -Recordable::Recordable() +Recordable::Recordable() : recorder(&recAudio) { FILE_TYPE fileType = FILE_WAV; @@ -61,3 +62,5 @@ void Recordable::setRecordingSmplRate (int smplRate) recAudio.setSndSamplingRate (smplRate); } + + diff --git a/sflphone-common/src/audio/recordable.h b/sflphone-common/src/audio/recordable.h index 8ab5281cc9..4cd83dcc50 100644 --- a/sflphone-common/src/audio/recordable.h +++ b/sflphone-common/src/audio/recordable.h @@ -31,6 +31,7 @@ #define RECORDABLE_H #include "../plug-in/audiorecorder/audiorecord.h" +#include "../plug-in/audiorecorder/audiorecorder.h" class Recordable { @@ -42,7 +43,7 @@ class Recordable { bool isRecording(){ return recAudio.isRecording(); } - bool setRecording(){ return recAudio.setRecording(); } + virtual bool setRecording() = 0; void stopRecording(){ recAudio.stopRecording(); } @@ -61,13 +62,12 @@ class Recordable { */ AudioRecord recAudio; + AudioRecorder recorder; private: /** File name for his call : time YY-MM-DD */ - // std::string _filename; - - + // std::string _filename; }; diff --git a/sflphone-common/src/call.cpp b/sflphone-common/src/call.cpp index 93e71226af..65195f5f50 100644 --- a/sflphone-common/src/call.cpp +++ b/sflphone-common/src/call.cpp @@ -30,6 +30,7 @@ */ #include "call.h" #include "manager.h" +#include "audio/mainbuffer.h" Call::Call (const CallID& id, Call::CallType type) : _callMutex() @@ -184,3 +185,23 @@ Call::isAudioStarted() return _audioStarted; } + +bool +Call::setRecording() +{ + bool recordStatus = Recordable::recAudio.setRecording(); + + if(!recordStatus) + return false; + + MainBuffer *mbuffer = &(Manager::instance()._mainBuffer); + + CallID process_id = Recordable::recorder.getRecorderID(); + + mbuffer->bindHalfDuplexOut(process_id, _id); + mbuffer->bindHalfDuplexOut(process_id); + + Recordable::recorder.start(); + + return recordStatus; +} diff --git a/sflphone-common/src/call.h b/sflphone-common/src/call.h index 6fcc87fd2f..89c81c1f67 100644 --- a/sflphone-common/src/call.h +++ b/sflphone-common/src/call.h @@ -235,9 +235,11 @@ class Call: public Recordable{ */ unsigned int getLocalAudioPort(); - std::string getRecFileId(){ return getPeerName(); } + std::string getRecFileId(void){ return getPeerName(); } - std::string getFileName() { return _filename; } + std::string getFileName(void) { return _filename; } + + virtual bool setRecording(void); protected: /** Protect every attribute that can be changed by two threads */ diff --git a/sflphone-common/src/conference.cpp b/sflphone-common/src/conference.cpp index d93cf8a0a4..17ee9a39b5 100644 --- a/sflphone-common/src/conference.cpp +++ b/sflphone-common/src/conference.cpp @@ -34,6 +34,7 @@ #include "conference.h" #include "manager.h" #include "audio/audiolayer.h" +#include "audio/mainbuffer.h" int Conference::count = 0; @@ -157,3 +158,30 @@ ParticipantSet Conference::getParticipantList() return _participants; } + + +bool Conference::setRecording() { + + bool recordStatus = Recordable::recAudio.setRecording(); + + if(!recordStatus) + return false; + + MainBuffer *mbuffer = &(Manager::instance()._mainBuffer); + + ParticipantSet::iterator iter = _participants.begin(); + + CallID process_id = Recordable::recorder.getRecorderID(); + + while(iter != _participants.end()) { + mbuffer->bindHalfDuplexOut(process_id, *iter); + iter++; + } + + mbuffer->bindHalfDuplexOut(process_id); + + Recordable::recorder.start(); + + return recordStatus; + +} diff --git a/sflphone-common/src/conference.h b/sflphone-common/src/conference.h index a20a9a2584..77952531d1 100644 --- a/sflphone-common/src/conference.h +++ b/sflphone-common/src/conference.h @@ -75,6 +75,8 @@ class Conference: public Recordable{ std::string getRecFileId(){ return getConfID(); } + virtual bool setRecording(); + private: /** Unique ID of the conference */ diff --git a/sflphone-common/src/eventthread.h b/sflphone-common/src/eventthread.h index aed9f5b515..eca20c22dc 100644 --- a/sflphone-common/src/eventthread.h +++ b/sflphone-common/src/eventthread.h @@ -33,6 +33,7 @@ #include <cc++/thread.h> + class VoIPLink; class AlsaLayer; diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 69ae92be43..da9bbcf51f 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2556,16 +2556,19 @@ void ManagerImpl::setVolumeControls (bool display) { } void ManagerImpl::setRecordingCall (const CallID& id) { - /* - _debug ("ManagerImpl::setRecording()! "); - AccountID accountid = getAccountFromCall (id); + /* + _debug ("ManagerImpl::setRecording()! "); + AccountID accountid = getAccountFromCall (id); + + getAccountLink (accountid)->setRecording (id); + */ - getAccountLink (accountid)->setRecording (id); - */ - AccountID accountid = getAccountFromCall(id); - Recordable* rec = (Recordable*) getAccountLink(accountid)->getCall(id); + AccountID accountid = getAccountFromCall(id); + Recordable* rec = (Recordable *) getAccountLink(accountid)->getCall(id); - rec->setRecording(); + rec->setRecording(); + + } bool ManagerImpl::isRecording (const CallID& id) { diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index 3c88ba6a14..700bb1721d 100644 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -93,7 +93,6 @@ typedef std::map<CallID, Conference*> ConferenceMap; static CallID default_conf = "conf"; - static char * mapStateToChar[] = { (char*) "UNREGISTERED", (char*) "TRYING", @@ -1241,6 +1240,7 @@ class ManagerImpl { void unloadAccountMap(); + public: /** * Instance of the MainBuffer for the whole application * @@ -1250,8 +1250,6 @@ class ManagerImpl { */ MainBuffer _mainBuffer; - - public: /** * Tell if there is a current call processed @@ -1309,14 +1307,12 @@ class ManagerImpl { int isStunEnabled (void); void enableStun (void); - // Map + // Map containing reference between conferences and calls ConferenceCallMap _conferencecall; - // + // Map containing conference pointers ConferenceMap _conferencemap; - - private: // Copy Constructor diff --git a/sflphone-common/src/plug-in/audiorecorder/Makefile.am b/sflphone-common/src/plug-in/audiorecorder/Makefile.am index 2a37f14729..811f75102f 100644 --- a/sflphone-common/src/plug-in/audiorecorder/Makefile.am +++ b/sflphone-common/src/plug-in/audiorecorder/Makefile.am @@ -3,4 +3,5 @@ include $(top_srcdir)/globals.mak noinst_LTLIBRARIES = libaudiorecorder.la libaudiorecorder_la_SOURCES = \ - audiorecord.cpp \ No newline at end of file + audiorecord.cpp \ + audiorecorder.cpp \ No newline at end of file -- GitLab From 70ccd93da5c9dd0c890d37bdb4562bd6f06bdb15 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 28 Jun 2010 09:53:43 -0400 Subject: [PATCH 096/197] [#2165] Add audio recorder class --- .../plug-in/audiorecorder/audiorecorder.cpp | 56 +++++++++++++++++ .../src/plug-in/audiorecorder/audiorecorder.h | 60 +++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 sflphone-common/src/plug-in/audiorecorder/audiorecorder.cpp create mode 100644 sflphone-common/src/plug-in/audiorecorder/audiorecorder.h diff --git a/sflphone-common/src/plug-in/audiorecorder/audiorecorder.cpp b/sflphone-common/src/plug-in/audiorecorder/audiorecorder.cpp new file mode 100644 index 0000000000..77587a5011 --- /dev/null +++ b/sflphone-common/src/plug-in/audiorecorder/audiorecorder.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#include "audiorecorder.h" + +AudioRecorder::AudioRecorder (AudioRecord *arec) + : Thread(), recorderId("recorder_id") +{ + setCancel (cancelDeferred); + + arecord = arec; +} + + +/** + * Reimplementation of run() + */ +void AudioRecorder::run (void) +{ + + SFLDataFormat buffer[10000]; + + // int availBytes = mbuffer->availForGet(recorderId); + + // mbuffer->getData(buffer, availBytes, 100, recorderId); + + // arecord->recData(buffer, availBytes/sizeof(SFLDataFormat)); + +} diff --git a/sflphone-common/src/plug-in/audiorecorder/audiorecorder.h b/sflphone-common/src/plug-in/audiorecorder/audiorecorder.h new file mode 100644 index 0000000000..9b3ef3d26e --- /dev/null +++ b/sflphone-common/src/plug-in/audiorecorder/audiorecorder.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#ifndef __AUDIORECORDER_H_ +#define __AUDIORECORDER_H_ + +#include <cc++/thread.h> +#include "audiorecord.h" +#include <string> + +class AudioRecorder : public ost::Thread { + + public: + AudioRecorder(AudioRecord *arec); + + ~AudioRecorder(void){ terminate(); } + + std::string getRecorderID() { return recorderId; } + + virtual void run(); + + private: + AudioRecorder (const AudioRecorder& ar); + AudioRecorder& operator=(const AudioRecorder& ar); + + // MainBuffer *mbuffer; + + std::string recorderId; + + AudioRecord *arecord; +}; + +#endif -- GitLab From 1f85379ffdddb6d247cd4c82a0a5eccfe4f690bc Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 28 Jun 2010 12:12:29 -0400 Subject: [PATCH 097/197] [#2165] Fix inclusion errors for audio recorder --- sflphone-common/configure.ac | 1 - sflphone-common/src/Makefile.am | 1 - sflphone-common/src/audio/Makefile.am | 6 +- sflphone-common/src/audio/alsa/Makefile.am | 2 +- sflphone-common/src/audio/audiolayer.h | 5 +- .../audiorecorder => audio}/audiorecord.cpp | 0 .../audiorecorder => audio}/audiorecord.h | 5 +- .../audiorecorder => audio}/audiorecorder.cpp | 10 ++- .../audiorecorder => audio}/audiorecorder.h | 6 +- sflphone-common/src/audio/mainbuffer.h | 6 +- sflphone-common/src/audio/recordable.cpp | 1 - sflphone-common/src/audio/recordable.h | 25 ++++-- sflphone-common/src/call.h | 1 - sflphone-common/src/plug-in/Makefile.am | 2 +- .../src/plug-in/audiorecorder/Makefile.am | 7 -- .../src/plug-in/audiorecorder/audiodsp.cpp | 80 ------------------ .../src/plug-in/audiorecorder/audiodsp.h | 83 ------------------- 17 files changed, 42 insertions(+), 199 deletions(-) rename sflphone-common/src/{plug-in/audiorecorder => audio}/audiorecord.cpp (100%) rename sflphone-common/src/{plug-in/audiorecorder => audio}/audiorecord.h (98%) rename sflphone-common/src/{plug-in/audiorecorder => audio}/audiorecorder.cpp (94%) rename sflphone-common/src/{plug-in/audiorecorder => audio}/audiorecorder.h (97%) delete mode 100644 sflphone-common/src/plug-in/audiorecorder/Makefile.am delete mode 100644 sflphone-common/src/plug-in/audiorecorder/audiodsp.cpp delete mode 100644 sflphone-common/src/plug-in/audiorecorder/audiodsp.h diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index b1d3d4d7d9..0cf89b3821 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -61,7 +61,6 @@ AC_CONFIG_FILES([Makefile]) src/audio/codecs/Makefile \ src/config/Makefile \ src/dbus/Makefile \ - src/plug-in/audiorecorder/Makefile \ src/plug-in/Makefile \ src/plug-in/test/Makefile \ src/hooks/Makefile \ diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index 0a1de77488..40c11cb6b7 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -93,7 +93,6 @@ libsflphone_la_LIBADD = \ ./dbus/libdbus.la \ ./config/libconfig.la \ ./plug-in/libplugin.la \ - ./plug-in/audiorecorder/libaudiorecorder.la \ ./hooks/libhooks.la \ ./history/libhistory.la diff --git a/sflphone-common/src/audio/Makefile.am b/sflphone-common/src/audio/Makefile.am index fcf2c2e9b7..8f49c29cc5 100644 --- a/sflphone-common/src/audio/Makefile.am +++ b/sflphone-common/src/audio/Makefile.am @@ -12,6 +12,8 @@ libaudio_la_SOURCES = \ audioloop.cpp \ ringbuffer.cpp \ mainbuffer.cpp \ + audiorecord.cpp \ + audiorecorder.cpp \ recordable.cpp \ audiolayer.cpp \ audiodevice.cpp \ @@ -28,9 +30,11 @@ noinst_HEADERS = \ audioloop.h \ common.h \ ringbuffer.h \ + mainbuffer.h \ + audiorecord.h \ + audiorecorder.h \ audiolayer.h \ audiodevice.h \ - mainbuffer.h \ recordable.h \ algorithm.h \ delaydetection.h \ diff --git a/sflphone-common/src/audio/alsa/Makefile.am b/sflphone-common/src/audio/alsa/Makefile.am index bcc584432f..8f67710b33 100644 --- a/sflphone-common/src/audio/alsa/Makefile.am +++ b/sflphone-common/src/audio/alsa/Makefile.am @@ -4,5 +4,5 @@ noinst_LTLIBRARIES = libalsalayer.la libalsalayer_la_SOURCES = alsalayer.cpp -noinst_HEADERS = alsalayer.h +noinst_HEADERS = alsalayer.h diff --git a/sflphone-common/src/audio/audiolayer.h b/sflphone-common/src/audio/audiolayer.h index f9935e2bc7..ab2a4559fa 100644 --- a/sflphone-common/src/audio/audiolayer.h +++ b/sflphone-common/src/audio/audiolayer.h @@ -37,20 +37,17 @@ #include "audiodevice.h" #include "ringbuffer.h" #include "mainbuffer.h" - -#include <cc++/thread.h> // for ost::Mutex - #include "dcblocker.h" #include "speexechocancel.h" #include "echocancel.h" +#include <cc++/thread.h> // for ost::Mutex /** * @file audiolayer.h * @brief Main sound class. Manages the data transfers between the application and the hardware. */ -class Recordable; class ManagerImpl; class AudioLayer { diff --git a/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp b/sflphone-common/src/audio/audiorecord.cpp similarity index 100% rename from sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp rename to sflphone-common/src/audio/audiorecord.cpp diff --git a/sflphone-common/src/plug-in/audiorecorder/audiorecord.h b/sflphone-common/src/audio/audiorecord.h similarity index 98% rename from sflphone-common/src/plug-in/audiorecorder/audiorecord.h rename to sflphone-common/src/audio/audiorecord.h index de58f9535e..8e42bd2a24 100644 --- a/sflphone-common/src/plug-in/audiorecorder/audiorecord.h +++ b/sflphone-common/src/audio/audiorecord.h @@ -36,10 +36,7 @@ #include <stdlib.h> #include <sstream> -#include "plug-in/plugin.h" -// #include "audiodsp.h" - -// class AudioDSP; +#include "global.h" using namespace std; diff --git a/sflphone-common/src/plug-in/audiorecorder/audiorecorder.cpp b/sflphone-common/src/audio/audiorecorder.cpp similarity index 94% rename from sflphone-common/src/plug-in/audiorecorder/audiorecorder.cpp rename to sflphone-common/src/audio/audiorecorder.cpp index 77587a5011..6b736b94d0 100644 --- a/sflphone-common/src/plug-in/audiorecorder/audiorecorder.cpp +++ b/sflphone-common/src/audio/audiorecorder.cpp @@ -44,8 +44,16 @@ AudioRecorder::AudioRecorder (AudioRecord *arec) */ void AudioRecorder::run (void) { + /* + while(true) { - SFLDataFormat buffer[10000]; + _debug("Audiorecord"); + sleep(1); + + } + */ + + // SFLDataFormat buffer[10000]; // int availBytes = mbuffer->availForGet(recorderId); diff --git a/sflphone-common/src/plug-in/audiorecorder/audiorecorder.h b/sflphone-common/src/audio/audiorecorder.h similarity index 97% rename from sflphone-common/src/plug-in/audiorecorder/audiorecorder.h rename to sflphone-common/src/audio/audiorecorder.h index 9b3ef3d26e..4a579c3c88 100644 --- a/sflphone-common/src/plug-in/audiorecorder/audiorecorder.h +++ b/sflphone-common/src/audio/audiorecorder.h @@ -35,6 +35,8 @@ #include "audiorecord.h" #include <string> +class MainBuffer; + class AudioRecorder : public ost::Thread { public: @@ -50,10 +52,10 @@ class AudioRecorder : public ost::Thread { AudioRecorder (const AudioRecorder& ar); AudioRecorder& operator=(const AudioRecorder& ar); - // MainBuffer *mbuffer; - std::string recorderId; + MainBuffer *mbuffer; + AudioRecord *arecord; }; diff --git a/sflphone-common/src/audio/mainbuffer.h b/sflphone-common/src/audio/mainbuffer.h index 551cf8c087..95dd787ea4 100644 --- a/sflphone-common/src/audio/mainbuffer.h +++ b/sflphone-common/src/audio/mainbuffer.h @@ -37,12 +37,10 @@ #include <cc++/thread.h> // for ost::Mutex #include <string> -#include "../global.h" -#include "../call.h" +#include "global.h" +#include "call.h" #include "ringbuffer.h" - - typedef std::map<CallID, RingBuffer*> RingBufferMap; typedef std::set<CallID> CallIDSet; diff --git a/sflphone-common/src/audio/recordable.cpp b/sflphone-common/src/audio/recordable.cpp index 7e3c37addf..79740fb777 100644 --- a/sflphone-common/src/audio/recordable.cpp +++ b/sflphone-common/src/audio/recordable.cpp @@ -29,7 +29,6 @@ #include "recordable.h" #include "manager.h" -#include "mainbuffer.h" Recordable::Recordable() : recorder(&recAudio) { diff --git a/sflphone-common/src/audio/recordable.h b/sflphone-common/src/audio/recordable.h index 4cd83dcc50..6b08db9196 100644 --- a/sflphone-common/src/audio/recordable.h +++ b/sflphone-common/src/audio/recordable.h @@ -30,8 +30,8 @@ #ifndef RECORDABLE_H #define RECORDABLE_H -#include "../plug-in/audiorecorder/audiorecord.h" -#include "../plug-in/audiorecorder/audiorecorder.h" +#include "audiorecord.h" +#include "audiorecorder.h" class Recordable { @@ -41,14 +41,30 @@ class Recordable { ~Recordable(); + /** + * Return recording state (true/false) + */ bool isRecording(){ return recAudio.isRecording(); } + /** + * This method must be implemented for this interface as calls and conferences + * have different behavior. + */ virtual bool setRecording() = 0; + /** + * Stop recording + */ void stopRecording(){ recAudio.stopRecording(); } + /** + * Init the recording file name according to path specified in configuration + */ void initRecFileName(); + /** + * Set recording sampling rate. + */ void setRecordingSmplRate(int smplRate); virtual std::string getRecFileId() = 0; @@ -64,11 +80,6 @@ class Recordable { AudioRecorder recorder; - private: - - /** File name for his call : time YY-MM-DD */ - // std::string _filename; - }; #endif diff --git a/sflphone-common/src/call.h b/sflphone-common/src/call.h index 89c81c1f67..713f23e560 100644 --- a/sflphone-common/src/call.h +++ b/sflphone-common/src/call.h @@ -35,7 +35,6 @@ #include <cc++/thread.h> // for mutex #include <sstream> -// #include "plug-in/audiorecorder/audiorecord.h" #include "audio/recordable.h" #define SIP_SCHEME "sip:" diff --git a/sflphone-common/src/plug-in/Makefile.am b/sflphone-common/src/plug-in/Makefile.am index 35ea21e039..ec8d438006 100644 --- a/sflphone-common/src/plug-in/Makefile.am +++ b/sflphone-common/src/plug-in/Makefile.am @@ -1,6 +1,6 @@ include ../../globals.mak -SUBDIRS=audiorecorder test +SUBDIRS=test noinst_LTLIBRARIES = libplugin.la diff --git a/sflphone-common/src/plug-in/audiorecorder/Makefile.am b/sflphone-common/src/plug-in/audiorecorder/Makefile.am deleted file mode 100644 index 811f75102f..0000000000 --- a/sflphone-common/src/plug-in/audiorecorder/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -include $(top_srcdir)/globals.mak - -noinst_LTLIBRARIES = libaudiorecorder.la - -libaudiorecorder_la_SOURCES = \ - audiorecord.cpp \ - audiorecorder.cpp \ No newline at end of file diff --git a/sflphone-common/src/plug-in/audiorecorder/audiodsp.cpp b/sflphone-common/src/plug-in/audiorecorder/audiodsp.cpp deleted file mode 100644 index fb95d1a52c..0000000000 --- a/sflphone-common/src/plug-in/audiorecorder/audiodsp.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. - * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * 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., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * Additional permission under GNU GPL version 3 section 7: - * - * If you modify this program, or any covered work, by linking or - * combining it with the OpenSSL project's OpenSSL library (or a - * modified version of that library), containing parts covered by the - * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. - * grants you additional permission to convey the resulting work. - * Corresponding Source for a non-source form of such a combination - * shall include the source code for the parts of OpenSSL used as well - * as that of the covered work. - */ - -#include "audiodsp.h" - -AudioDSP::AudioDSP() -{ - - bufPointer_ = 0; - bufferLength_ = 1024; - circBuffer_ = new float[bufferLength_]; - -} - - -AudioDSP::~AudioDSP() -{ - - delete[] circBuffer_; - -} - - -float AudioDSP::getRMS (int data) -{ - // printf("AudioDSP::getRMS() : bufPointer_ %i ", bufPointer_); - printf ("AudioDSP::getRMS() : %i ", data); - circBuffer_[bufPointer_++] = (float) data; - - if (bufPointer_ >= bufferLength_) - bufPointer_ = 0; - - return computeRMS(); -} - - -float AudioDSP::computeRMS() -{ - - rms = 0.0; - - - for (int i = 0; i < bufferLength_; i++) { - // printf("AudioDSP::computeRMS() : i_ %i ", i); - rms += (float) (circBuffer_[i]*circBuffer_[i]); - } - - rms = sqrt (rms / (float) bufferLength_); - - // printf("AudioDSP::computeRMS() : RMS VALUE: %f ", rms); - return rms; - -} diff --git a/sflphone-common/src/plug-in/audiorecorder/audiodsp.h b/sflphone-common/src/plug-in/audiorecorder/audiodsp.h deleted file mode 100644 index bc2279494c..0000000000 --- a/sflphone-common/src/plug-in/audiorecorder/audiodsp.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. - * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * 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., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * Additional permission under GNU GPL version 3 section 7: - * - * If you modify this program, or any covered work, by linking or - * combining it with the OpenSSL project's OpenSSL library (or a - * modified version of that library), containing parts covered by the - * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. - * grants you additional permission to convey the resulting work. - * Corresponding Source for a non-source form of such a combination - * shall include the source code for the parts of OpenSSL used as well - * as that of the covered work. - */ - -#ifndef _AUDIO_DSP_H -#define _AUDIO_DSP_H - -#include <math.h> -#include <iostream> -#include <string.h> -#include <stdlib.h> -#include <sstream> - -class AudioDSP -{ - -public: - - AudioDSP(); - - ~AudioDSP(); - - /** - * Return rms value - */ - float getRMS(int data); - -protected: - - /** - * Compute Rms value - */ - float computeRMS(); - - /** - * Internal buffer pointer - */ - int bufPointer_; - - /** - * Internal buffer length - */ - int bufferLength_; - - /** - * Internal buffer to compute RMS - */ - float* circBuffer_; - - /** - * Variable to compute RMS value - */ - float rms; - -}; - -#endif // _AUDIO_DSP_H -- GitLab From b702dea20395f5a5f7186479dadcc77cbaf32af4 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 28 Jun 2010 13:16:40 -0400 Subject: [PATCH 098/197] [#2165] Implement run method in audiorecorder --- sflphone-common/src/audio/recordable.cpp | 2 +- sflphone-common/src/call.cpp | 2 +- sflphone-common/src/conference.cpp | 2 +- sflphone-common/src/managerimpl.h | 9 ++++++++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/audio/recordable.cpp b/sflphone-common/src/audio/recordable.cpp index 79740fb777..8371bf7ec8 100644 --- a/sflphone-common/src/audio/recordable.cpp +++ b/sflphone-common/src/audio/recordable.cpp @@ -30,7 +30,7 @@ #include "recordable.h" #include "manager.h" -Recordable::Recordable() : recorder(&recAudio) +Recordable::Recordable() : recorder(&recAudio, Manager::instance().getMainBuffer()) { FILE_TYPE fileType = FILE_WAV; diff --git a/sflphone-common/src/call.cpp b/sflphone-common/src/call.cpp index 65195f5f50..0185cf6817 100644 --- a/sflphone-common/src/call.cpp +++ b/sflphone-common/src/call.cpp @@ -194,7 +194,7 @@ Call::setRecording() if(!recordStatus) return false; - MainBuffer *mbuffer = &(Manager::instance()._mainBuffer); + MainBuffer *mbuffer = Manager::instance().getMainBuffer(); CallID process_id = Recordable::recorder.getRecorderID(); diff --git a/sflphone-common/src/conference.cpp b/sflphone-common/src/conference.cpp index 17ee9a39b5..b32629acb6 100644 --- a/sflphone-common/src/conference.cpp +++ b/sflphone-common/src/conference.cpp @@ -167,7 +167,7 @@ bool Conference::setRecording() { if(!recordStatus) return false; - MainBuffer *mbuffer = &(Manager::instance()._mainBuffer); + MainBuffer *mbuffer = Manager::instance().getMainBuffer(); ParticipantSet::iterator iter = _participants.begin(); diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index 700bb1721d..fc457c767d 100644 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -1240,7 +1240,6 @@ class ManagerImpl { void unloadAccountMap(); - public: /** * Instance of the MainBuffer for the whole application * @@ -1251,6 +1250,14 @@ class ManagerImpl { MainBuffer _mainBuffer; + public: + + /** + * Return a pointer to the instance of the mainbuffer + */ + MainBuffer *getMainBuffer(void) { return &_mainBuffer; } + + /** * Tell if there is a current call processed * @return bool True if there is a current call -- GitLab From b021cff02538936f5c59d317d5ec34581183e32d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 28 Jun 2010 13:17:24 -0400 Subject: [PATCH 099/197] [#2165] Remove old call recording implementation --- sflphone-common/src/audio/audiorecorder.cpp | 28 ++++++++++++------- sflphone-common/src/audio/audiorecorder.h | 2 +- .../src/audio/audiortp/AudioRtpSession.h | 3 ++ 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/sflphone-common/src/audio/audiorecorder.cpp b/sflphone-common/src/audio/audiorecorder.cpp index 6b736b94d0..99f4efaef0 100644 --- a/sflphone-common/src/audio/audiorecorder.cpp +++ b/sflphone-common/src/audio/audiorecorder.cpp @@ -29,13 +29,15 @@ */ #include "audiorecorder.h" +#include "mainbuffer.h" -AudioRecorder::AudioRecorder (AudioRecord *arec) +AudioRecorder::AudioRecorder (AudioRecord *arec, MainBuffer *mb) : Thread(), recorderId("recorder_id") { setCancel (cancelDeferred); arecord = arec; + mbuffer = mb; } @@ -44,21 +46,27 @@ AudioRecorder::AudioRecorder (AudioRecord *arec) */ void AudioRecorder::run (void) { - /* + SFLDataFormat buffer[10000]; + while(true) { - _debug("Audiorecord"); - sleep(1); + if(!mbuffer) + _warn("AudioRecorder: Error: No instance of ringbuffer"); - } - */ + int availBytes = mbuffer->availForGet(recorderId); + + _debug("Audiorecord: avail for get (before) %d", availBytes); - // SFLDataFormat buffer[10000]; + mbuffer->getData(buffer, availBytes, 100, recorderId); - // int availBytes = mbuffer->availForGet(recorderId); + availBytes = mbuffer->availForGet(recorderId); - // mbuffer->getData(buffer, availBytes, 100, recorderId); + _debug("Audiorecord: avail for get (after) %d", availBytes); - // arecord->recData(buffer, availBytes/sizeof(SFLDataFormat)); + // arecord->recData(buffer, availBytes/sizeof(SFLDataFormat)); + + sleep(20); + + } } diff --git a/sflphone-common/src/audio/audiorecorder.h b/sflphone-common/src/audio/audiorecorder.h index 4a579c3c88..a6ea97146e 100644 --- a/sflphone-common/src/audio/audiorecorder.h +++ b/sflphone-common/src/audio/audiorecorder.h @@ -40,7 +40,7 @@ class MainBuffer; class AudioRecorder : public ost::Thread { public: - AudioRecorder(AudioRecord *arec); + AudioRecorder(AudioRecord *arec, MainBuffer *mb); ~AudioRecorder(void){ terminate(); } diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index b9eef55971..07ff2dd786 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -815,6 +815,8 @@ namespace sfl { // Recv session receiveSpeakerData (); + /* + // Let's wait for the next transmit cycle if (sessionWaiting == 1) { // Record mic and speaker during conversation @@ -823,6 +825,7 @@ namespace sfl { // Record mic only while leaving a message _ca->recAudio.recData (_micData,_nSamplesMic); } + */ _manager->getAudioLayerMutex()->leave(); -- GitLab From 8735167e8197419ba4f86ac79cc3905aeb65eb84 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 28 Jun 2010 14:45:02 -0400 Subject: [PATCH 100/197] [#2165] Fix intermitent recording --- sflphone-common/src/audio/audiorecord.cpp | 9 ++++-- sflphone-common/src/audio/audiorecorder.cpp | 13 +++++--- .../src/audio/audiortp/AudioRtpSession.h | 8 ++--- sflphone-common/src/audio/dcblocker.cpp | 2 +- sflphone-common/src/call.cpp | 31 ++++++++++++++----- 5 files changed, 44 insertions(+), 19 deletions(-) diff --git a/sflphone-common/src/audio/audiorecord.cpp b/sflphone-common/src/audio/audiorecord.cpp index 4cc6d17794..125339fe8c 100644 --- a/sflphone-common/src/audio/audiorecord.cpp +++ b/sflphone-common/src/audio/audiorecord.cpp @@ -120,8 +120,6 @@ void AudioRecord::initFileName (std::string peerNumber) void AudioRecord::openFile() { - _info ("AudioRecord: Open file()"); - bool result = false; _debug ("AudioRecord: Open file()"); @@ -408,6 +406,8 @@ void AudioRecord::closeWavFile() return; } + _debug("AudioRecord: Close wave file"); + SINT32 bytes = byteCounter_ * channels_; @@ -473,6 +473,8 @@ void AudioRecord::recData (SFLDataFormat* buffer, int nSamples) if (recordingEnabled_) { + _debug("Recording enabled"); + if (fp == 0) { _debug ("AudioRecord: Can't record data, a file has not yet been opened!"); return; @@ -486,6 +488,7 @@ void AudioRecord::recData (SFLDataFormat* buffer, int nSamples) else { fflush (fp); byteCounter_ += (unsigned long) (nSamples*sizeof (SFLDataFormat)); + _debug("AudioRecord: wrote %d bytes", byteCounter_); } } } @@ -499,6 +502,8 @@ void AudioRecord::recData (SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int if (recordingEnabled_) { + _debug("Recording enabled"); + if (fp == 0) { _debug ("AudioRecord: Can't record data, a file has not yet been opened!"); return; diff --git a/sflphone-common/src/audio/audiorecorder.cpp b/sflphone-common/src/audio/audiorecorder.cpp index 99f4efaef0..420572729a 100644 --- a/sflphone-common/src/audio/audiorecorder.cpp +++ b/sflphone-common/src/audio/audiorecorder.cpp @@ -57,13 +57,18 @@ void AudioRecorder::run (void) _debug("Audiorecord: avail for get (before) %d", availBytes); - mbuffer->getData(buffer, availBytes, 100, recorderId); + if(availBytes > 0) { - availBytes = mbuffer->availForGet(recorderId); + int got = mbuffer->getData(buffer, availBytes, 100, recorderId); - _debug("Audiorecord: avail for get (after) %d", availBytes); + _debug("Audiorecord: audio get from main buffer %d", got); - // arecord->recData(buffer, availBytes/sizeof(SFLDataFormat)); + int availBytesAfter = mbuffer->availForGet(recorderId); + + _debug("Audiorecord: avail for get (after) %d", availBytesAfter); + + arecord->recData(buffer, availBytes/sizeof(SFLDataFormat)); + } sleep(20); diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index 07ff2dd786..5144d37679 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -736,10 +736,10 @@ namespace sfl { // DTMF over RTP, size must be over 4 in order to process it as voice data if(size > 4) { - // processDataDecode(spkrDataIn, size); - if(result == JB_OK) { - processDataDecode((unsigned char *)(frame.data), 160); - } + processDataDecode(spkrDataIn, size); + //if(result == JB_OK) { + // processDataDecode((unsigned char *)(frame.data), 160); + //} } delete adu; diff --git a/sflphone-common/src/audio/dcblocker.cpp b/sflphone-common/src/audio/dcblocker.cpp index bef34f6a51..b1a18eb1a2 100644 --- a/sflphone-common/src/audio/dcblocker.cpp +++ b/sflphone-common/src/audio/dcblocker.cpp @@ -54,7 +54,7 @@ void DcBlocker::process (SFLDataFormat *data, int nbBytes) for (int i = 0; i < nbSamples; i++) { _x = data[i]; - _y = (SFLDataFormat) ( (float) _x - (float) _xm1 + 0.9999 * (float) _ym1); + _y = (SFLDataFormat) ( (float) _x - (float) _xm1 + 0.995 * (float) _ym1); _xm1 = _x; _ym1 = _y; diff --git a/sflphone-common/src/call.cpp b/sflphone-common/src/call.cpp index 0185cf6817..c640ad77b8 100644 --- a/sflphone-common/src/call.cpp +++ b/sflphone-common/src/call.cpp @@ -189,18 +189,33 @@ Call::isAudioStarted() bool Call::setRecording() { - bool recordStatus = Recordable::recAudio.setRecording(); + bool recordStatus = Recordable::recAudio.isRecording(); - if(!recordStatus) - return false; + Recordable::recAudio.setRecording(); - MainBuffer *mbuffer = Manager::instance().getMainBuffer(); + // Start recording + if(!recordStatus) { - CallID process_id = Recordable::recorder.getRecorderID(); + MainBuffer *mbuffer = Manager::instance().getMainBuffer(); + CallID process_id = Recordable::recorder.getRecorderID(); + + mbuffer->bindHalfDuplexOut(process_id, _id); + mbuffer->bindHalfDuplexOut(process_id); + + } + // Stop recording + else { + + MainBuffer *mbuffer = Manager::instance().getMainBuffer(); + CallID process_id = Recordable::recorder.getRecorderID(); + + mbuffer->unBindHalfDuplexOut(process_id, _id); + mbuffer->unBindHalfDuplexOut(process_id); + + } + + Manager::instance().getMainBuffer()->stateInfo(); - mbuffer->bindHalfDuplexOut(process_id, _id); - mbuffer->bindHalfDuplexOut(process_id); - Recordable::recorder.start(); return recordStatus; -- GitLab From bf312a826ffccf528b5bc4681ae185e3da56e788 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 28 Jun 2010 16:27:11 -0400 Subject: [PATCH 101/197] [#2165] Fix undind half duplex audio streams in mainbuffer --- sflphone-common/src/audio/audiorecord.cpp | 5 +-- sflphone-common/src/audio/audiorecorder.cpp | 25 +++++++++----- sflphone-common/src/audio/audiorecorder.h | 2 ++ sflphone-common/src/audio/mainbuffer.cpp | 28 +++++++++------ sflphone-common/src/conference.cpp | 38 ++++++++++++++++----- 5 files changed, 67 insertions(+), 31 deletions(-) diff --git a/sflphone-common/src/audio/audiorecord.cpp b/sflphone-common/src/audio/audiorecord.cpp index 125339fe8c..06d97d0b30 100644 --- a/sflphone-common/src/audio/audiorecord.cpp +++ b/sflphone-common/src/audio/audiorecord.cpp @@ -471,9 +471,7 @@ void AudioRecord::recMicData (SFLDataFormat* buffer, int nSamples) void AudioRecord::recData (SFLDataFormat* buffer, int nSamples) { - if (recordingEnabled_) { - - _debug("Recording enabled"); + if (recordingEnabled_) { if (fp == 0) { _debug ("AudioRecord: Can't record data, a file has not yet been opened!"); @@ -488,7 +486,6 @@ void AudioRecord::recData (SFLDataFormat* buffer, int nSamples) else { fflush (fp); byteCounter_ += (unsigned long) (nSamples*sizeof (SFLDataFormat)); - _debug("AudioRecord: wrote %d bytes", byteCounter_); } } } diff --git a/sflphone-common/src/audio/audiorecorder.cpp b/sflphone-common/src/audio/audiorecorder.cpp index 420572729a..bb846e022b 100644 --- a/sflphone-common/src/audio/audiorecorder.cpp +++ b/sflphone-common/src/audio/audiorecorder.cpp @@ -31,13 +31,26 @@ #include "audiorecorder.h" #include "mainbuffer.h" -AudioRecorder::AudioRecorder (AudioRecord *arec, MainBuffer *mb) - : Thread(), recorderId("recorder_id") +int AudioRecorder::count = 0; + +AudioRecorder::AudioRecorder (AudioRecord *arec, MainBuffer *mb) : Thread() { setCancel (cancelDeferred); + ++count; + + std::string id("processid_"); + + // convert count into string + std::string s; + std::stringstream out; + out << count; + s = out.str(); + + recorderId = id.append(s); + arecord = arec; - mbuffer = mb; + mbuffer = mb; } @@ -55,18 +68,12 @@ void AudioRecorder::run (void) int availBytes = mbuffer->availForGet(recorderId); - _debug("Audiorecord: avail for get (before) %d", availBytes); - if(availBytes > 0) { int got = mbuffer->getData(buffer, availBytes, 100, recorderId); - _debug("Audiorecord: audio get from main buffer %d", got); - int availBytesAfter = mbuffer->availForGet(recorderId); - _debug("Audiorecord: avail for get (after) %d", availBytesAfter); - arecord->recData(buffer, availBytes/sizeof(SFLDataFormat)); } diff --git a/sflphone-common/src/audio/audiorecorder.h b/sflphone-common/src/audio/audiorecorder.h index a6ea97146e..b1c15f3a48 100644 --- a/sflphone-common/src/audio/audiorecorder.h +++ b/sflphone-common/src/audio/audiorecorder.h @@ -44,6 +44,8 @@ class AudioRecorder : public ost::Thread { ~AudioRecorder(void){ terminate(); } + static int count; + std::string getRecorderID() { return recorderId; } virtual void run(); diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 91e0d238d8..2ccc1f8d6e 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -255,23 +255,33 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2) } } -void MainBuffer::unBindHalfDuplexOut(CallID call_id, CallID process_id) +void MainBuffer::unBindHalfDuplexOut(CallID process_id, CallID call_id) { removeCallIDfromSet(process_id, call_id); - RingBuffer* ringbuffer; - - ringbuffer = getRingBuffer(process_id); + RingBuffer* ringbuffer = getRingBuffer(call_id); if(ringbuffer) { - ringbuffer->removeReadPointer(call_id); + ringbuffer->removeReadPointer(process_id); if(ringbuffer->getNbReadPointer() == 0) { - removeCallIDSet(process_id); - removeRingBuffer(process_id); + removeCallIDSet(call_id); + removeRingBuffer(call_id); } } + else { + _debug("Error: did not found ringbuffer %s", process_id.c_str()); + removeCallIDSet(process_id); + } + + + CallIDSet* callid_set = getCallIDSet(process_id); + if(callid_set) { + if(callid_set->empty()) + removeCallIDSet(process_id); + } + } @@ -387,9 +397,7 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID return 0; } else { - for (int k = 0; k < nbSmplToCopy; k++) { - ( (SFLDataFormat*) (buffer)) [k] = 0; - } + memset(buffer, 0, nbSmplToCopy*sizeof(SFLDataFormat*)); int size = 0; diff --git a/sflphone-common/src/conference.cpp b/sflphone-common/src/conference.cpp index b32629acb6..20219fc592 100644 --- a/sflphone-common/src/conference.cpp +++ b/sflphone-common/src/conference.cpp @@ -162,23 +162,45 @@ ParticipantSet Conference::getParticipantList() bool Conference::setRecording() { - bool recordStatus = Recordable::recAudio.setRecording(); + bool recordStatus = Recordable::recAudio.isRecording(); - if(!recordStatus) - return false; + Recordable::recAudio.setRecording(); - MainBuffer *mbuffer = Manager::instance().getMainBuffer(); + // start recording + if(!recordStatus){ - ParticipantSet::iterator iter = _participants.begin(); + MainBuffer *mbuffer = Manager::instance().getMainBuffer(); - CallID process_id = Recordable::recorder.getRecorderID(); + ParticipantSet::iterator iter = _participants.begin(); - while(iter != _participants.end()) { + CallID process_id = Recordable::recorder.getRecorderID(); + + while(iter != _participants.end()) { mbuffer->bindHalfDuplexOut(process_id, *iter); iter++; + } + + mbuffer->bindHalfDuplexOut(process_id); + + } + // stop recording + else { + + MainBuffer *mbuffer = Manager::instance().getMainBuffer(); + + ParticipantSet::iterator iter = _participants.begin(); + + CallID process_id = Recordable::recorder.getRecorderID(); + + while(iter != _participants.end()) { + mbuffer->unBindHalfDuplexOut(process_id, *iter); + iter++; + } + + mbuffer->unBindHalfDuplexOut(process_id); + } - mbuffer->bindHalfDuplexOut(process_id); Recordable::recorder.start(); -- GitLab From cd92d21ff63c09c286a2d8e7cd2e27790382d25c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 28 Jun 2010 18:40:00 -0400 Subject: [PATCH 102/197] [#3611] Get previous and current username in configuration panel --- .../src/config/accountconfigdialog.c | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 081391da70..7d15bf2fcf 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -1251,6 +1251,9 @@ void show_account_window (account_t * a) { // we must resolve published address from interface name gchar * local_interface; gchar * published_address; + + gchar *previous_username, *current_username; + gboolean username_changed = FALSE; currentAccount = a; @@ -1345,10 +1348,17 @@ void show_account_window (account_t * a) { gtk_widget_destroy (GTK_WIDGET(dialog)); return; } - + + gchar *key = g_strdup(ACCOUNT_USERNAME); + + // Get username at loadtime to determine if it changed. If so, update authentication name accordingly + // if(g_hash_table_lookup_extended(currentAccount->properties, g_strdup(ACCOUNT_USERNAME), NULL, previous_username)) + // If accept button is if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) { + previous_username = (gchar *)g_hash_table_lookup(currentAccount->properties, g_strdup(ACCOUNT_USERNAME)); + DEBUG("------------------------------ USERNAME BEFORE %s", previous_username); g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_ALIAS), @@ -1368,8 +1378,18 @@ void show_account_window (account_t * a) { g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_MAILBOX), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryMailbox)))); + + current_username = (gchar *)g_hash_table_lookup(currentAccount->properties, g_strdup(ACCOUNT_USERNAME)); + DEBUG("------------------------------ USERNAME AFTER %s", current_username); } + if(strcmp(previous_username, current_username) != 0) + username_changed = TRUE; + + if(username_changed) + DEBUG("--------------------------------- CHANGED"); + + if (proto && strcmp (proto, "SIP") == 0) { if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) { -- GitLab From cba9b332f2c0bdac683452f2fd81dcc08b59500d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 29 Jun 2010 12:09:28 -0400 Subject: [PATCH 103/197] [#3611] Update account authentication name on username change --- .../src/config/accountconfigdialog.c | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 7d15bf2fcf..b4a75d272c 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -3,6 +3,7 @@ * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> * Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com> * Author: Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com> + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -106,6 +107,9 @@ GtkWidget * overrtp; GHashTable * directIpCallsProperties = NULL; +gchar *current_username; + + // Credentials enum { COLUMN_CREDENTIAL_REALM, @@ -193,12 +197,17 @@ static GPtrArray* getNewCredential (GHashTable * properties) { -1); g_hash_table_insert(properties, g_strdup(ACCOUNT_REALM), realm); - g_hash_table_insert(properties, g_strdup(ACCOUNT_AUTHENTICATION_USERNAME), username); + + // better use the current_username as it is the account username in the + // g_hash_table_insert(properties, g_strdup(ACCOUNT_AUTHENTICATION_USERNAME), username); + g_hash_table_insert(properties, g_strdup(ACCOUNT_AUTHENTICATION_USERNAME), current_username); // Do not change the password if nothing has been changed by the user if (g_strcasecmp (password, PW_HIDDEN) != 0) g_hash_table_insert(properties, g_strdup(ACCOUNT_PASSWORD), password); + + valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(credentialStore), &iter); while (valid) { @@ -1251,9 +1260,6 @@ void show_account_window (account_t * a) { // we must resolve published address from interface name gchar * local_interface; gchar * published_address; - - gchar *previous_username, *current_username; - gboolean username_changed = FALSE; currentAccount = a; @@ -1351,14 +1357,8 @@ void show_account_window (account_t * a) { gchar *key = g_strdup(ACCOUNT_USERNAME); - // Get username at loadtime to determine if it changed. If so, update authentication name accordingly - // if(g_hash_table_lookup_extended(currentAccount->properties, g_strdup(ACCOUNT_USERNAME), NULL, previous_username)) - // If accept button is if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) { - - previous_username = (gchar *)g_hash_table_lookup(currentAccount->properties, g_strdup(ACCOUNT_USERNAME)); - DEBUG("------------------------------ USERNAME BEFORE %s", previous_username); g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_ALIAS), @@ -1379,16 +1379,10 @@ void show_account_window (account_t * a) { g_strdup(ACCOUNT_MAILBOX), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryMailbox)))); + // Variable used to update credentials current_username = (gchar *)g_hash_table_lookup(currentAccount->properties, g_strdup(ACCOUNT_USERNAME)); - DEBUG("------------------------------ USERNAME AFTER %s", current_username); - } - - if(strcmp(previous_username, current_username) != 0) - username_changed = TRUE; - - if(username_changed) - DEBUG("--------------------------------- CHANGED"); + } if (proto && strcmp (proto, "SIP") == 0) { -- GitLab From ca22b5e9555bfd213142510592fae010acf9ef85 Mon Sep 17 00:00:00 2001 From: Pierre-Luc Bacon <pierrelucbacon@aqra.ca> Date: Tue, 29 Jun 2010 16:38:21 -0400 Subject: [PATCH 104/197] [#3561] Fixed previous commit, which was failing in this branch. --- sflphone-common/src/Makefile.am | 33 ++---------------------- sflphone-common/test/Makefile.am | 29 ++++++++++----------- sflphone-common/test/main.cpp | 44 ++++++++------------------------ 3 files changed, 25 insertions(+), 81 deletions(-) diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index 40c11cb6b7..2f82de3f12 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -37,27 +37,8 @@ endif sflphoned_CXXFLAGS = \ -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(IAX_CXXFLAG) $(NETWORKMANAGER) \ - -DVERSION=\"$(VERSION)\" \ - @ZRTPCPP_CFLAGS@ \ - @libssl_CFLAGS@ - - -# Add here the dynamic libraries sflphoned should be linked against -sflphoned_LDADD = \ - ./libsflphone.la \ - @CCGNU2_LIBS@ \ - @CCEXT2_LIBS@ \ - @ZRTPCPP_LIBS@ \ - $(PJSIP_LIBS) \ - @CCRTP_LIBS@ \ - @ALSA_LIBS@ \ - @PULSEAUDIO_LIBS@ \ - @SAMPLERATE_LIBS@ \ - @libssl_LIBS@ - -# sflphoned_LDFLAGS= -pg -luuid -sflphoned_LDFLAGS= $(UUID_LIBS) -DVERSION=\"$(VERSION)\" + # libsflphone sflphoned_LDADD = ./libsflphone.la @@ -85,14 +66,10 @@ libsflphone_la_LIBADD = \ $(IAX_LIB) \ ./sip/libsiplink.la \ ./audio/libaudio.la \ - ./audio/audiortp/libaudiortp.la \ - ./audio/sound/libsound.la \ - ./audio/codecs/libcodecdescriptor.la \ - ./audio/alsa/libalsalayer.la \ - ./audio/pulseaudio/libpulselayer.la \ ./dbus/libdbus.la \ ./config/libconfig.la \ ./plug-in/libplugin.la \ + ./plug-in/audiorecorder/libaudiorecorder.la \ ./hooks/libhooks.la \ ./history/libhistory.la @@ -100,9 +77,6 @@ libsflphone_la_LDFLAGS = \ @CCGNU2_LIBS@ \ @CCEXT2_LIBS@ \ @ZRTPCPP_LIBS@ \ - @GSTREAMER_LIBS@ \ - @LIBAVCODEC_LIBS@ \ - @LIBSWSCALE_LIBS@ \ $(PJSIP_LIBS) \ @CCRTP_LIBS@ \ @ALSA_LIBS@ \ @@ -115,9 +89,6 @@ libsflphone_la_CFLAGS = \ @CCGNU2_CFLAGS@ \ @CCEXT2_CFLAGS@ \ @ZRTPCPP_CFLAGS@ \ - @GSTREAMER_CFLAGS@ \ - @LIBAVCODEC_CFLAGS@ \ - @LIBSWSCALE_CFLAGS@ \ $(PJSIP_CFLAGS) \ @CCRTP_CFLAGS@ \ @ALSA_CFLAGS@ \ diff --git a/sflphone-common/test/Makefile.am b/sflphone-common/test/Makefile.am index b2ae6aae0c..ed3baa511e 100644 --- a/sflphone-common/test/Makefile.am +++ b/sflphone-common/test/Makefile.am @@ -26,22 +26,19 @@ test_SOURCES = \ rtptest.h \ rtptest.cpp \ sdesnegotiatortest.h \ - sdesnegotiatortest.cpp \ - delaydetectiontest.h \ - delaydetectiontest.cpp - - - + sdesnegotiatortest.cpp LLIBS=$(CPPUNIT_LIBS) \ - @ALSA_LIBS@ \ - @PULSEAUDIO_LIBS@ \ - @CPPUNIT_LIBS@ \ - @CCEXT2_LIBS@ \ - @CCGNU2_LIBS@ \ - @CCRTP_LIBS@ \ - @ZRTPCPP_LIBS@ \ - @libssl_LIBS@ \ - @SAMPLERATE_LIBS@ \ - $(PJSIP_LIBS) \ + ../src/sflphoned-logger.o \ + ../src/sflphoned-managerimpl.o \ + ../src/sflphoned-account.o\ + ../src/sflphoned-accountcreator.o \ + ../src/sflphoned-call.o \ + ../src/sflphoned-conference.o \ + ../src/sflphoned-eventthread.o \ + ../src/sflphoned-managerimpl_registration.o \ + ../src/sflphoned-numbercleaner.o \ + ../src/sflphoned-observer.o \ + ../src/sflphoned-voiplink.o \ ../src/libsflphone.la + diff --git a/sflphone-common/test/main.cpp b/sflphone-common/test/main.cpp index 131630b33d..ada12320f8 100644 --- a/sflphone-common/test/main.cpp +++ b/sflphone-common/test/main.cpp @@ -37,40 +37,21 @@ #include <cppunit/extensions/TestFactoryRegistry.h> #include <cppunit/ui/text/TextTestRunner.h> -// TODO: Why some header cannot be included ? -#include "accounttest.h" -#include "audiolayertest.h" -#include "configurationtest.h" -//#include "historytest.h" -//#include "hookmanagertest.h" -#include "mainbuffertest.h" -#include "numbercleanertest.h" -//#include "pluginmanagertest.h" -//#include "rtptest.h" -#include "sdesnegotiatortest.h" - - int main(int argc, char* argv[]) { printf("\nSFLphone Daemon Test Suite, by Savoir-Faire Linux 2004-2010\n\n"); - Logger::setConsoleLog(true); - Logger::setDebugMode(true); - /* - Logger::setDebugMode(false); - + int argvIndex = 1; if (argc > 1) { if (strcmp("--help", argv[1]) == 0) { argvIndex++; - CPPUNIT_NS::Test - *suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry( - "All Tests").makeTest(); + CPPUNIT_NS::Test* suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry("All Tests").makeTest(); + int testSuiteCount = suite->getChildTestCount(); - printf("Usage: test [OPTIONS] [TEST_SUITE]\n"); printf("\nOptions:\n"); printf(" --debug - Debug mode\n"); @@ -89,6 +70,7 @@ int main(int argc, char* argv[]) { } } + // Default test suite : all tests std::string testSuiteName = "All Tests"; if(argvIndex < argc) { @@ -100,34 +82,28 @@ int main(int argc, char* argv[]) { Manager::instance().initConfigFile(true, CONFIG_SAMPLE); Manager::instance().init(); - printf("\n\n=== Test Suite: %s ===\n\n", testSuiteName.c_str()); // Get the top level suite from the registry + printf("\n\n=== Test Suite: %s ===\n\n", testSuiteName.c_str()); CPPUNIT_NS::Test *suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry(testSuiteName).makeTest(); - */ - CPPUNIT_NS::Test *suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest(); - /* if(suite->getChildTestCount() == 0) { _error("Invalid test suite name: %s", testSuiteName.c_str()); exit(-1); } - */ - Manager::instance().initConfigFile(true, CONFIG_SAMPLE); - Manager::instance().init(); - + // Adds the test to the list of test to run CppUnit::TextTestRunner runner; runner.addTest(suite); // Change the default outputter to a compiler error format outputter - runner.setOutputter(new CppUnit::CompilerOutputter(&runner.result(), - std::cerr)); + runner.setOutputter(new CppUnit::CompilerOutputter(&runner.result(), std::cerr)); + // Run the tests. bool wasSucessful = runner.run(); + Manager::instance().terminate(); + // Return error code 1 if the one of test failed. return wasSucessful ? 0 : 1; - - Manager::instance().terminate(); } -- GitLab From 5ef72f40b1d95998170b78da71eb491b3bc69e54 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 29 Jun 2010 17:16:36 -0400 Subject: [PATCH 105/197] [#3561] plugin/libaudiorecorder.la not used anymore --- sflphone-common/src/Makefile.am | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index 2f82de3f12..10950a2903 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -38,7 +38,7 @@ endif sflphoned_CXXFLAGS = \ -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(IAX_CXXFLAG) $(NETWORKMANAGER) \ -DVERSION=\"$(VERSION)\" - + # libsflphone sflphoned_LDADD = ./libsflphone.la @@ -69,7 +69,6 @@ libsflphone_la_LIBADD = \ ./dbus/libdbus.la \ ./config/libconfig.la \ ./plug-in/libplugin.la \ - ./plug-in/audiorecorder/libaudiorecorder.la \ ./hooks/libhooks.la \ ./history/libhistory.la -- GitLab From 6007308ccd22d3c9b68fdc688f92a91f80769a18 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 29 Jun 2010 18:34:00 -0400 Subject: [PATCH 106/197] [#2524] Base classes for serialization --- sflphone-common/src/config/engine.cpp | 86 +++++++++++++++++++++++ sflphone-common/src/config/engine.h | 55 +++++++++++++++ sflphone-common/src/config/serializable.h | 49 +++++++++++++ 3 files changed, 190 insertions(+) create mode 100644 sflphone-common/src/config/engine.cpp create mode 100644 sflphone-common/src/config/engine.h create mode 100644 sflphone-common/src/config/serializable.h diff --git a/sflphone-common/src/config/engine.cpp b/sflphone-common/src/config/engine.cpp new file mode 100644 index 0000000000..4074552118 --- /dev/null +++ b/sflphone-common/src/config/engine.cpp @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + + +#include "engine.h" + + +/* Set a generic writer. */ +void *ext = ...; +int write_handler(void *ext, char *buffer, int size) { + + int error = 0; + + /* + ... + Write `size` bytes. + ... + */ + return error ? 0 : 1; +} + + +Engine::Engine() +{ + open(); +} + +Engine::~Engine() +{ + close(); +} + +void Engine::open() +{ + + yaml_emitter_initialize(&emitter); + + yaml_emitter_set_output(&emitter, write_handler, ext); + + yaml_stream_start_event_initialize(&event, YAML_UTF8_ENCODING); + if (!yaml_emitter_emit(&emitter, &event)) + return; + +} + +void Engine::close() { + + /* Create and emit the STREAM-END event. */ + yaml_stream_end_event_initialize(&event); + if (!yaml_emitter_emit(&emitter, &event)) + return; + + /* Destroy the Emitter object. */ + yaml_emitter_delete(&emitter); + +} + +void Engine::write() {} + diff --git a/sflphone-common/src/config/engine.h b/sflphone-common/src/config/engine.h new file mode 100644 index 0000000000..014116872c --- /dev/null +++ b/sflphone-common/src/config/engine.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#ifndef __ENGINE_H__ +#define __ENGINE_H__ + +#include <yaml.h> + +class Engine { + + public: + + Engine(); + + ~Engine(); + + void open(); + + void write(); + + private: + + yaml_emitter_t emitter; + + yaml_event_t event; +}; + +#endif diff --git a/sflphone-common/src/config/serializable.h b/sflphone-common/src/config/serializable.h new file mode 100644 index 0000000000..781b3a45be --- /dev/null +++ b/sflphone-common/src/config/serializable.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#ifndef __SERIALIZABLE_H__ +#define __SERIALIZABLE_H__ + + +class Engine; + +class Serializable { + + public: + + Serializable(); + + ~Serializable(); + + virtual void Serialize(Engine *engine) = 0; + + private: + +}; -- GitLab From 257fbcc2556ccb5009539545bd02695bb40095fb Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 30 Jun 2010 11:39:51 -0400 Subject: [PATCH 107/197] [#2524] Implemented first yaml parser --- sflphone-common/src/config/engine.h | 13 +- sflphone-common/src/config/yamlemitter.cpp | 43 +++++ sflphone-common/src/config/yamlemitter.h | 56 +++++++ sflphone-common/src/config/yamlengine.cpp | 43 +++++ sflphone-common/src/config/yamlengine.h | 61 +++++++ sflphone-common/src/config/yamlparser.cpp | 153 ++++++++++++++++++ .../src/config/{engine.cpp => yamlparser.h} | 75 +++++---- 7 files changed, 397 insertions(+), 47 deletions(-) create mode 100644 sflphone-common/src/config/yamlemitter.cpp create mode 100644 sflphone-common/src/config/yamlemitter.h create mode 100644 sflphone-common/src/config/yamlengine.cpp create mode 100644 sflphone-common/src/config/yamlengine.h create mode 100644 sflphone-common/src/config/yamlparser.cpp rename sflphone-common/src/config/{engine.cpp => yamlparser.h} (64%) diff --git a/sflphone-common/src/config/engine.h b/sflphone-common/src/config/engine.h index 014116872c..c2345b656e 100644 --- a/sflphone-common/src/config/engine.h +++ b/sflphone-common/src/config/engine.h @@ -37,19 +37,14 @@ class Engine { public: - Engine(); + virtual void open() = 0; - ~Engine(); + virtual void close() = 0; - void open(); + virtual void write() = 0; - void write(); + virtual void read() = 0; - private: - - yaml_emitter_t emitter; - - yaml_event_t event; }; #endif diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp new file mode 100644 index 0000000000..abb04e1676 --- /dev/null +++ b/sflphone-common/src/config/yamlemitter.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#include "yamlemitter.h" + +YamlEmitter::YamlEmitter() {} + +YamlEmitter::~YamlEmitter() {} + +void YamlEmitter::open() {} + +void YamlEmitter::close() {} + +void YamlEmitter::read() {} + +void YamlEmitter::write() {} diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h new file mode 100644 index 0000000000..411ebba7e1 --- /dev/null +++ b/sflphone-common/src/config/yamlemitter.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#ifndef __YAMLEMITTER_H__ +#define __YAMLEMITTER_H__ + +class YamlEmitter { + + public: + + YamlEmitter(); + + ~YamlEmitter(); + + void open(); + + void close(); + + void read(); + + void write(); + + + private: + +}; + + +#endif diff --git a/sflphone-common/src/config/yamlengine.cpp b/sflphone-common/src/config/yamlengine.cpp new file mode 100644 index 0000000000..9b9f3a8108 --- /dev/null +++ b/sflphone-common/src/config/yamlengine.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#include "yamlengine.h" + +YamlEngine::YamlEngine() {} + +YamlEngine::~YamlEngine() {} + +void YamlEngine::open() {} + +void YamlEngine::close() {} + +void YamlEngine::read() {} + +void YamlEngine::write() {} diff --git a/sflphone-common/src/config/yamlengine.h b/sflphone-common/src/config/yamlengine.h new file mode 100644 index 0000000000..22cb6198d8 --- /dev/null +++ b/sflphone-common/src/config/yamlengine.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#ifndef __YAMLENGINE_H__ +#define __YAMLENGINE_H__ + +#include "yamlparser.h" +#include "yamlemiter.h" + +class YamlEngine : Engine { + + public: + + YamlEngine(); + + ~YamlEngine(); + + virtual void open(); + + virtual void close(); + + virtual void write(); + + virtual void read(); + + private: + + YamlParser *parser; + + YamlEmiter *emiter; + +}; + +#endif diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp new file mode 100644 index 0000000000..8a30402343 --- /dev/null +++ b/sflphone-common/src/config/yamlparser.cpp @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#include "yamlparser.h" + +#include <assert.h> + +YamlParser::YamlParser() +{ + memset(buffer, 0, BUFFER_SIZE); + + open(); +} + +YamlParser::~YamlParser() +{ + close(); +} + +void YamlParser::open() +{ + + fd = fopen("test.yaml", "rb"); + if(!fd) + throw 20; + + if(!yaml_parser_initialize(&parser)) + throw 20; + + yaml_parser_set_input_file(&parser, fd); +} + +void YamlParser::close() +{ + + yaml_parser_delete(&parser); + + if(!fclose(fd)) + throw 20; + +} + +void YamlParser::parse() +{ + bool done; + yaml_event_t event; + + while(!done) { + + if(!yaml_parser_parse(&parse, &event)) + throw 20; + + done = (event.type == YAML_STREAM_END_EVENT); + + if(eventNumber > PARSER_MAXEVENT) + throw 20; + + if(!copyEvent(&(events[eventNumber++]), &event)) + throw 20; + + } +} + + +int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) +{ + switch (event_from->type) { + case YAML_STREAM_START_EVENT: + return yaml_stream_start_event_initialize(event_to, + event_from->data.stream_start.encoding); + + case YAML_STREAM_END_EVENT: + return yaml_stream_end_event_initialize(event_to); + + case YAML_DOCUMENT_START_EVENT: + return yaml_document_start_event_initialize(event_to, + event_from->data.document_start.version_directive, + event_from->data.document_start.tag_directives.start, + event_from->data.document_start.tag_directives.end, + event_from->data.document_start.implicit); + + case YAML_DOCUMENT_END_EVENT: + return yaml_document_end_event_initialize(event_to, + event_from->data.document_end.implicit); + + case YAML_ALIAS_EVENT: + return yaml_alias_event_initialize(event_to, + event_from->data.alias.anchor); + + case YAML_SCALAR_EVENT: + return yaml_scalar_event_initialize(event_to, + event_from->data.scalar.anchor, + event_from->data.scalar.tag, + event_from->data.scalar.value, + event_from->data.scalar.length, + event_from->data.scalar.plain_implicit, + event_from->data.scalar.quoted_implicit, + event_from->data.scalar.style); + + case YAML_SEQUENCE_START_EVENT: + return yaml_sequence_start_event_initialize(event_to, + event_from->data.sequence_start.anchor, + event_from->data.sequence_start.tag, + event_from->data.sequence_start.implicit, + event_from->data.sequence_start.style); + + case YAML_SEQUENCE_END_EVENT: + return yaml_sequence_end_event_initialize(event_to); + + case YAML_MAPPING_START_EVENT: + return yaml_mapping_start_event_initialize(event_to, + event_from->data.mapping_start.anchor, + event_from->data.mapping_start.tag, + event_from->data.mapping_start.implicit, + event_from->data.mapping_start.style); + + case YAML_MAPPING_END_EVENT: + return yaml_mapping_end_event_initialize(event_to); + + default: + assert(1); + + } + + return 0; +} diff --git a/sflphone-common/src/config/engine.cpp b/sflphone-common/src/config/yamlparser.h similarity index 64% rename from sflphone-common/src/config/engine.cpp rename to sflphone-common/src/config/yamlparser.h index 4074552118..b1e8dcef7e 100644 --- a/sflphone-common/src/config/engine.cpp +++ b/sflphone-common/src/config/yamlparser.h @@ -28,59 +28,58 @@ * as that of the covered work. */ +#ifndef __YAMLPARSER_H__ +#define __YAMLPARSER_H__ -#include "engine.h" +#include <yaml.h> +#include <stdio.h> +#define PARSER_BUFFERSIZE 65536 +#define PARSER_MAXEVENT 1024 -/* Set a generic writer. */ -void *ext = ...; -int write_handler(void *ext, char *buffer, int size) { +class YamlParser { - int error = 0; + public: - /* - ... - Write `size` bytes. - ... - */ - return error ? 0 : 1; -} + YamlParser(); + ~YamlParsere(); -Engine::Engine() -{ - open(); -} + void open(); -Engine::~Engine() -{ - close(); -} + void close(); -void Engine::open() -{ + void parse(); - yaml_emitter_initialize(&emitter); + private: - yaml_emitter_set_output(&emitter, write_handler, ext); + /** + * Copy yaml parser event in event_to according to their type. + */ + int copyEvent(yaml_event_t *event_to, yaml_event_t *event_from); - yaml_stream_start_event_initialize(&event, YAML_UTF8_ENCODING); - if (!yaml_emitter_emit(&emitter, &event)) - return; + FILE *fd; -} + /** + * The parser structure. + */ + yaml_parser_t parser; -void Engine::close() { + /** + * The event structure array. + */ + yaml_event_t event[PARSER_MAXEVENT]; - /* Create and emit the STREAM-END event. */ - yaml_stream_end_event_initialize(&event); - if (!yaml_emitter_emit(&emitter, &event)) - return; + /** + * + */ + unsigned char buffer[PARSER_BUFFERSIZE]; - /* Destroy the Emitter object. */ - yaml_emitter_delete(&emitter); + /** + * Number of event actually parsed + */ + int eventNumber; -} - -void Engine::write() {} +}; +#endif -- GitLab From a8da4e1ba4bedf036bcc1d59a103fda67855697b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 30 Jun 2010 12:54:49 -0400 Subject: [PATCH 108/197] [#2524] Add libyaml in configure and makefile --- sflphone-common/configure.ac | 18 +++++++++++++++++- sflphone-common/src/config/Makefile.am | 19 ++++++++++++++++++- sflphone-common/src/config/yamlengine.h | 7 ++++--- sflphone-common/src/config/yamlparser.cpp | 6 +++--- sflphone-common/src/config/yamlparser.h | 4 ++-- 5 files changed, 44 insertions(+), 10 deletions(-) diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index 0cf89b3821..e057d6f955 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -265,9 +265,24 @@ fi xml_CFLAGS= xml_LIBS=-lexpat - AC_SUBST(xml_CFLAGS) +AC_SUBST(xml_CFLAGS) AC_SUBST(xml_LIBS) +AC_CHECK_LIB([yaml], yaml_parser_initialize, + [AC_CHECK_HEADERS(expat.h, have_expat=true, have_expat=false)], + have_yaml = false) + +if ! $have_yaml; then +AC_MSG_ERROR([You need the eXpat xml parser] + [http://expat.sourceforge.net/]) +fi + +yaml_CFLAGS= +yaml_LIBS=lyaml + +AC_SUBST(yaml_CFLAGS) +AC_SUBST(yaml_LIBS) + AC_CHECK_LIB([pthread], pthread_create, [AC_CHECK_HEADERS(pthread.h, have_pthread=true, have_pthread=false)], have_pthread=false) @@ -292,6 +307,7 @@ AC_SUBST(PCRE_CFLAGS) + # For the tools/, we need libdbus-c++ for the "build" architecture as well AM_CONDITIONAL(CROSS_COMPILING, test "$cross_compiling" = "yes") diff --git a/sflphone-common/src/config/Makefile.am b/sflphone-common/src/config/Makefile.am index d72225850f..d3c2bb709a 100644 --- a/sflphone-common/src/config/Makefile.am +++ b/sflphone-common/src/config/Makefile.am @@ -3,4 +3,21 @@ SUBDIRS = noinst_LTLIBRARIES = libconfig.la libconfig_la_SOURCES = \ - config.cpp config.h + config.cpp \ + yamlengine.cpp \ + yamlemitter.cpp \ + yamlparser.cpp + +noinst_HEADERS = \ + config.h \ + engine.h \ + serializable.h \ + yamlengine.h \ + yamlemitter.h \ + yamlparser.h + +libconfig_la_LDFLAGS = \ + ${yaml_LIBS} + +libconfig_la_CFLAGS = \ + ${yaml_CFLAGS} \ No newline at end of file diff --git a/sflphone-common/src/config/yamlengine.h b/sflphone-common/src/config/yamlengine.h index 22cb6198d8..665330be88 100644 --- a/sflphone-common/src/config/yamlengine.h +++ b/sflphone-common/src/config/yamlengine.h @@ -31,10 +31,11 @@ #ifndef __YAMLENGINE_H__ #define __YAMLENGINE_H__ +#include "engine.h" #include "yamlparser.h" -#include "yamlemiter.h" +#include "yamlemitter.h" -class YamlEngine : Engine { +class YamlEngine : public Engine { public: @@ -54,7 +55,7 @@ class YamlEngine : Engine { YamlParser *parser; - YamlEmiter *emiter; + YamlEmitter *emitter; }; diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index 8a30402343..0d34db1760 100644 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -34,7 +34,7 @@ YamlParser::YamlParser() { - memset(buffer, 0, BUFFER_SIZE); + memset(buffer, 0, PARSER_BUFFERSIZE); open(); } @@ -69,12 +69,12 @@ void YamlParser::close() void YamlParser::parse() { - bool done; + bool done = false; yaml_event_t event; while(!done) { - if(!yaml_parser_parse(&parse, &event)) + if(!yaml_parser_parse(&parser, &event)) throw 20; done = (event.type == YAML_STREAM_END_EVENT); diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h index b1e8dcef7e..510cf00f8b 100644 --- a/sflphone-common/src/config/yamlparser.h +++ b/sflphone-common/src/config/yamlparser.h @@ -43,7 +43,7 @@ class YamlParser { YamlParser(); - ~YamlParsere(); + ~YamlParser(); void open(); @@ -68,7 +68,7 @@ class YamlParser { /** * The event structure array. */ - yaml_event_t event[PARSER_MAXEVENT]; + yaml_event_t events[PARSER_MAXEVENT]; /** * -- GitLab From 6be503113e7a1a978fb7572b8a2cf73d40594ea9 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 30 Jun 2010 18:25:58 -0400 Subject: [PATCH 109/197] [#2524] Implemented initial composer from serialization --- sflphone-common/configure.ac | 2 +- sflphone-common/src/Makefile.am | 6 +- sflphone-common/src/config/Makefile.am | 6 +- sflphone-common/src/config/config.cpp | 34 +++++ sflphone-common/src/config/yamlemitter.cpp | 4 + sflphone-common/src/config/yamlemitter.h | 12 ++ sflphone-common/src/config/yamlengine.cpp | 4 + sflphone-common/src/config/yamlengine.h | 12 ++ sflphone-common/src/config/yamlparser.cpp | 145 +++++++++++++++++---- sflphone-common/src/config/yamlparser.h | 38 ++++++ sflphone-common/test/configurationtest.cpp | 10 ++ sflphone-common/test/configurationtest.h | 4 + 12 files changed, 245 insertions(+), 32 deletions(-) diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index e057d6f955..0157615570 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -278,7 +278,7 @@ AC_MSG_ERROR([You need the eXpat xml parser] fi yaml_CFLAGS= -yaml_LIBS=lyaml +yaml_LIBS=-lyaml AC_SUBST(yaml_CFLAGS) AC_SUBST(yaml_LIBS) diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index 10950a2903..606f981112 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -82,7 +82,8 @@ libsflphone_la_LDFLAGS = \ @PULSEAUDIO_LIBS@ \ @SAMPLERATE_LIBS@ \ @libssl_LIBS@ \ - @UUID_LIBS@ + @UUID_LIBS@ \ + @yaml_LIBS@ libsflphone_la_CFLAGS = \ @CCGNU2_CFLAGS@ \ @@ -94,7 +95,8 @@ libsflphone_la_CFLAGS = \ @PULSEAUDIO_CFLAGS@ \ @SAMPLERATE_CFLAGS@ \ @libssl_CFLAGS@ \ - @UUID_CFLAGS@ + @UUID_CFLAGS@ \ + @yaml_CFLAGS@ libsflphone_la_SOURCES = diff --git a/sflphone-common/src/config/Makefile.am b/sflphone-common/src/config/Makefile.am index d3c2bb709a..483a4ac246 100644 --- a/sflphone-common/src/config/Makefile.am +++ b/sflphone-common/src/config/Makefile.am @@ -16,8 +16,6 @@ noinst_HEADERS = \ yamlemitter.h \ yamlparser.h -libconfig_la_LDFLAGS = \ - ${yaml_LIBS} +libconfig_la_LDFLAGS = @yaml_LIBS@ -libconfig_la_CFLAGS = \ - ${yaml_CFLAGS} \ No newline at end of file +libconfig_la_CFLAGS = @yaml_CFLAGS@ \ No newline at end of file diff --git a/sflphone-common/src/config/config.cpp b/sflphone-common/src/config/config.cpp index 83bba767b1..6635821993 100644 --- a/sflphone-common/src/config/config.cpp +++ b/sflphone-common/src/config/config.cpp @@ -38,6 +38,7 @@ #include <errno.h> #include <iostream> #include <string.h> +#include "yamlparser.h" namespace Conf { @@ -45,11 +46,44 @@ namespace Conf // ctor ConfigTree::ConfigTree() :_sections() { + + YamlParser *parser; + try { + parser = new YamlParser(); + } + catch (YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } + + + try { + parser->parse(); + } + catch(YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } + + try { + parser->composeEvents(); + } + catch(YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } + + try { + delete parser; + parser = NULL; + } + catch (YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } } // dtor ConfigTree::~ConfigTree() { + + // erase every new ItemMap (by CreateSection) SectionMap::iterator iter = _sections.begin(); diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp index abb04e1676..1e0f1b481f 100644 --- a/sflphone-common/src/config/yamlemitter.cpp +++ b/sflphone-common/src/config/yamlemitter.cpp @@ -30,6 +30,8 @@ #include "yamlemitter.h" +namespace Conf { + YamlEmitter::YamlEmitter() {} YamlEmitter::~YamlEmitter() {} @@ -41,3 +43,5 @@ void YamlEmitter::close() {} void YamlEmitter::read() {} void YamlEmitter::write() {} + +} diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h index 411ebba7e1..3e55d102b1 100644 --- a/sflphone-common/src/config/yamlemitter.h +++ b/sflphone-common/src/config/yamlemitter.h @@ -31,6 +31,17 @@ #ifndef __YAMLEMITTER_H__ #define __YAMLEMITTER_H__ +#include <exception> + +namespace Conf { + +class YamlEmitterException : public std::exception { + + virtual const char *what() const throw() { + return "YamlEmitterException occured"; + } +}; + class YamlEmitter { public: @@ -52,5 +63,6 @@ class YamlEmitter { }; +} #endif diff --git a/sflphone-common/src/config/yamlengine.cpp b/sflphone-common/src/config/yamlengine.cpp index 9b9f3a8108..2a75afacfa 100644 --- a/sflphone-common/src/config/yamlengine.cpp +++ b/sflphone-common/src/config/yamlengine.cpp @@ -30,6 +30,8 @@ #include "yamlengine.h" +namespace Conf { + YamlEngine::YamlEngine() {} YamlEngine::~YamlEngine() {} @@ -41,3 +43,5 @@ void YamlEngine::close() {} void YamlEngine::read() {} void YamlEngine::write() {} + +} diff --git a/sflphone-common/src/config/yamlengine.h b/sflphone-common/src/config/yamlengine.h index 665330be88..100fc8cc89 100644 --- a/sflphone-common/src/config/yamlengine.h +++ b/sflphone-common/src/config/yamlengine.h @@ -34,6 +34,16 @@ #include "engine.h" #include "yamlparser.h" #include "yamlemitter.h" +#include <exception> + +namespace Conf { + +class YamlEngineException : public std::exception { + + virtual const char *what() const throw() { + return "YamlEngineException occured"; + } +}; class YamlEngine : public Engine { @@ -59,4 +69,6 @@ class YamlEngine : public Engine { }; +} + #endif diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index 0d34db1760..796bfd8a91 100644 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -30,7 +30,11 @@ #include "yamlparser.h" -#include <assert.h> +#include "../global.h" +#include "config.h" +#include <stdio.h> + +namespace Conf { YamlParser::YamlParser() { @@ -47,12 +51,15 @@ YamlParser::~YamlParser() void YamlParser::open() { - fd = fopen("test.yaml", "rb"); + std::string filename = "sequence.yml"; + + fd = fopen(filename.c_str(), "rb"); + if(!fd) - throw 20; + throw YamlParserException("Could not open file descriptor"); if(!yaml_parser_initialize(&parser)) - throw 20; + throw YamlParserException("Could not open file descriptor"); yaml_parser_set_input_file(&parser, fd); } @@ -62,8 +69,11 @@ void YamlParser::close() yaml_parser_delete(&parser); + if(!fd) + throw YamlParserException("File descriptor not valid"); + if(!fclose(fd)) - throw 20; + throw YamlParserException("Error closing file descriptor"); } @@ -75,15 +85,15 @@ void YamlParser::parse() while(!done) { if(!yaml_parser_parse(&parser, &event)) - throw 20; + throw YamlParserException("Error while parsing"); done = (event.type == YAML_STREAM_END_EVENT); if(eventNumber > PARSER_MAXEVENT) - throw 20; + throw YamlParserException("Reached maximum of event"); if(!copyEvent(&(events[eventNumber++]), &event)) - throw 20; + throw YamlParserException("Error copying event"); } } @@ -91,30 +101,40 @@ void YamlParser::parse() int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) { + switch (event_from->type) { - case YAML_STREAM_START_EVENT: + case YAML_STREAM_START_EVENT: { + // _debug("YAML_STREAM_START_EVENT"); return yaml_stream_start_event_initialize(event_to, - event_from->data.stream_start.encoding); + event_from->data.stream_start.encoding); + } - case YAML_STREAM_END_EVENT: + case YAML_STREAM_END_EVENT: { + // _debug("YAML_STREAM_END_EVENT"); return yaml_stream_end_event_initialize(event_to); + } - case YAML_DOCUMENT_START_EVENT: + case YAML_DOCUMENT_START_EVENT: { + // _debug("YAML_DOCUMENT_START_EVENT"); return yaml_document_start_event_initialize(event_to, event_from->data.document_start.version_directive, event_from->data.document_start.tag_directives.start, event_from->data.document_start.tag_directives.end, event_from->data.document_start.implicit); + } - case YAML_DOCUMENT_END_EVENT: + case YAML_DOCUMENT_END_EVENT: { + // _debug("YAML_DOCUMENT_END_EVENT"); return yaml_document_end_event_initialize(event_to, event_from->data.document_end.implicit); - - case YAML_ALIAS_EVENT: + } + case YAML_ALIAS_EVENT:{ + // _debug("YAML_ALIAS_EVENT"); return yaml_alias_event_initialize(event_to, event_from->data.alias.anchor); - - case YAML_SCALAR_EVENT: + } + case YAML_SCALAR_EVENT: { + // _debug("YAML_SCALAR_EVENT"); return yaml_scalar_event_initialize(event_to, event_from->data.scalar.anchor, event_from->data.scalar.tag, @@ -123,27 +143,32 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) event_from->data.scalar.plain_implicit, event_from->data.scalar.quoted_implicit, event_from->data.scalar.style); - - case YAML_SEQUENCE_START_EVENT: + } + case YAML_SEQUENCE_START_EVENT: { + // _debug("YAML_SEQUENCE_START_EVENT"); return yaml_sequence_start_event_initialize(event_to, event_from->data.sequence_start.anchor, event_from->data.sequence_start.tag, event_from->data.sequence_start.implicit, event_from->data.sequence_start.style); - - case YAML_SEQUENCE_END_EVENT: + } + case YAML_SEQUENCE_END_EVENT: { + // _debug("YAML_SEQUENCE_END_EVENT"); return yaml_sequence_end_event_initialize(event_to); - - case YAML_MAPPING_START_EVENT: + } + case YAML_MAPPING_START_EVENT: { + // _debug("YAML_MAPPING_START_EVENT"); return yaml_mapping_start_event_initialize(event_to, event_from->data.mapping_start.anchor, event_from->data.mapping_start.tag, event_from->data.mapping_start.implicit, event_from->data.mapping_start.style); - - case YAML_MAPPING_END_EVENT: + } + case YAML_MAPPING_END_EVENT: { + // _debug("YAML_MAPPING_END_EVENT"); return yaml_mapping_end_event_initialize(event_to); + } default: assert(1); @@ -151,3 +176,73 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) return 0; } + + +void YamlParser::composeEvents() { + + if(eventNumber == 0) + throw YamlParserException("No event available"); + + for (int i = 0; i < eventNumber;) { + + switch(events[i].type) { + case YAML_STREAM_START_EVENT: + _debug("YAML_STREAM_START_EVENT"); + break; + case YAML_STREAM_END_EVENT: + _debug("YAML_STREAM_END_EVENT"); + break; + case YAML_DOCUMENT_START_EVENT: + _debug("YAML_DOCUMENT_START_EVENT"); + break; + case YAML_DOCUMENT_END_EVENT: + _debug("YAML_DOCUMENT_END_EVENT"); + break; + case YAML_ALIAS_EVENT: + _debug("YAML_ALIAS_EVENT"); + break; + case YAML_SCALAR_EVENT: { + _debug("YAML_SCALAR_EVENT: anchor %s, tag %s, value %s", events[i].data.scalar.anchor, events[i].data.scalar.tag, events[i].data.scalar.value); + // std::string tmp(events[i].data.scalar.value); + std::string tmp("ok"); + size_t found = tmp.find("account"); + // if this is an account + if(found != std::string::npos) + composeAccount(i); + } + break; + case YAML_SEQUENCE_START_EVENT: + _debug("YAML_SEQUENCE_START_EVENT: anchor %s, tag %s", events[i].data.sequence_start.anchor, events[i].data.sequence_start.tag); + break; + case YAML_SEQUENCE_END_EVENT: + _debug("YAML_SEQUENCE_END_EVENT"); + break; + case YAML_MAPPING_START_EVENT: + _debug("YAML_MAPPING_START_EVENT: anchor %s, tag %s", events[i].data.mapping_start.anchor, events[i].data.sequence_start.tag); + break; + case YAML_MAPPING_END_EVENT: + _debug("YAML_MAPPING_END_EVENT"); + break; + default: + throw YamlParserException("Unknown Event"); + } + + i++; + } +} + +int YamlParser::composeAccount(int index) +{ + + // YamlScalar accid((const char*)(events[index].data.scalar.value)); + YamlScalar accid("ok"); + YamlSequence seq; + // YamlAccount acc(accid, seq); + + // accountlist.insert(acc); + + return index+1; +} + + +} diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h index 510cf00f8b..1f0dfc05b6 100644 --- a/sflphone-common/src/config/yamlparser.h +++ b/sflphone-common/src/config/yamlparser.h @@ -33,10 +33,40 @@ #include <yaml.h> #include <stdio.h> +#include <exception> +#include <string> +#include <map> +#include <list> + +namespace Conf { #define PARSER_BUFFERSIZE 65536 #define PARSER_MAXEVENT 1024 +typedef std::string YamlScalar; +typedef std::map<YamlScalar, YamlScalar> YamlMapping; +typedef std::list<YamlMapping> YamlSequence; +typedef std::map<YamlScalar, YamlSequence> YamlAccount; +typedef std::list<YamlAccount> AccountList; + +class YamlParserException : public std::exception +{ + public: + YamlParserException(const std::string& str="") throw() : errstr(str) {} + + virtual ~YamlParserException() throw() {} + + virtual const char *what() const throw() { + std::string expt("YamlParserException occured: "); + expt.append(errstr); + + return expt.c_str(); + } + private: + std::string errstr; +}; + + class YamlParser { public: @@ -51,6 +81,10 @@ class YamlParser { void parse(); + void composeEvents(); + + int composeAccount(int i); + private: /** @@ -80,6 +114,10 @@ class YamlParser { */ int eventNumber; + AccountList accountlist; + }; +} + #endif diff --git a/sflphone-common/test/configurationtest.cpp b/sflphone-common/test/configurationtest.cpp index 23294f67cc..f42ea1be83 100644 --- a/sflphone-common/test/configurationtest.cpp +++ b/sflphone-common/test/configurationtest.cpp @@ -150,3 +150,13 @@ void ConfigurationTest::testInitAudioDriver() { else CPPUNIT_FAIL ("Wrong audio layer type"); } + + +void ConfigurationTest::testYamlParser() +{ + YamlParser *parser = new YamlParser(); + + delete parser; + parser = NULL; + +} diff --git a/sflphone-common/test/configurationtest.h b/sflphone-common/test/configurationtest.h index 1e2f572aa5..1688819ea6 100644 --- a/sflphone-common/test/configurationtest.h +++ b/sflphone-common/test/configurationtest.h @@ -50,6 +50,7 @@ #include "audio/audiolayer.h" #include "global.h" #include "user_cfg.h" +#include "config/yamlparser.h" class ConfigurationTest: public CppUnit::TestFixture { @@ -62,6 +63,7 @@ CPPUNIT_TEST_SUITE( ConfigurationTest ); CPPUNIT_TEST( testDefaultValuePreferences ); CPPUNIT_TEST( testDefaultValueSignalisation ); CPPUNIT_TEST( testInitAudioDriver ); + CPPUNIT_TEST( testYamlParser ); CPPUNIT_TEST_SUITE_END(); public: @@ -91,6 +93,8 @@ public: void testInitVolume(); void testInitAudioDriver(); + + void testYamlParser(); }; /* Register our test module */ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ConfigurationTest, "ConfigurationTest"); -- GitLab From 3fd35272e2c2039150f4ae7fc7334913b1bf3044 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 2 Jul 2010 10:15:18 -0400 Subject: [PATCH 110/197] [#3647] First implementation of the yaml parser --- sflphone-common/src/config/Makefile.am | 6 +- sflphone-common/src/config/config.cpp | 4 +- sflphone-common/src/config/config.h | 0 sflphone-common/src/config/engine.h | 0 sflphone-common/src/config/serializable.h | 0 sflphone-common/src/config/yamlemitter.cpp | 0 sflphone-common/src/config/yamlemitter.h | 0 sflphone-common/src/config/yamlengine.cpp | 0 sflphone-common/src/config/yamlengine.h | 0 sflphone-common/src/config/yamlnode.cpp | 68 +++++++++ sflphone-common/src/config/yamlnode.h | 154 +++++++++++++++++++++ sflphone-common/src/config/yamlparser.cpp | 32 ++--- sflphone-common/src/config/yamlparser.h | 18 +-- 13 files changed, 241 insertions(+), 41 deletions(-) mode change 100644 => 100755 sflphone-common/src/config/Makefile.am mode change 100644 => 100755 sflphone-common/src/config/config.cpp mode change 100644 => 100755 sflphone-common/src/config/config.h mode change 100644 => 100755 sflphone-common/src/config/engine.h mode change 100644 => 100755 sflphone-common/src/config/serializable.h mode change 100644 => 100755 sflphone-common/src/config/yamlemitter.cpp mode change 100644 => 100755 sflphone-common/src/config/yamlemitter.h mode change 100644 => 100755 sflphone-common/src/config/yamlengine.cpp mode change 100644 => 100755 sflphone-common/src/config/yamlengine.h create mode 100755 sflphone-common/src/config/yamlnode.cpp create mode 100755 sflphone-common/src/config/yamlnode.h mode change 100644 => 100755 sflphone-common/src/config/yamlparser.cpp mode change 100644 => 100755 sflphone-common/src/config/yamlparser.h diff --git a/sflphone-common/src/config/Makefile.am b/sflphone-common/src/config/Makefile.am old mode 100644 new mode 100755 index 483a4ac246..4d84e41e59 --- a/sflphone-common/src/config/Makefile.am +++ b/sflphone-common/src/config/Makefile.am @@ -6,7 +6,8 @@ libconfig_la_SOURCES = \ config.cpp \ yamlengine.cpp \ yamlemitter.cpp \ - yamlparser.cpp + yamlparser.cpp \ + yamlnode.cpp noinst_HEADERS = \ config.h \ @@ -14,7 +15,8 @@ noinst_HEADERS = \ serializable.h \ yamlengine.h \ yamlemitter.h \ - yamlparser.h + yamlparser.h \ + yamlnode.h libconfig_la_LDFLAGS = @yaml_LIBS@ diff --git a/sflphone-common/src/config/config.cpp b/sflphone-common/src/config/config.cpp old mode 100644 new mode 100755 index 6635821993..74169b7547 --- a/sflphone-common/src/config/config.cpp +++ b/sflphone-common/src/config/config.cpp @@ -49,7 +49,7 @@ ConfigTree::ConfigTree() :_sections() YamlParser *parser; try { - parser = new YamlParser(); + parser = new YamlParser("sequence.yml"); } catch (YamlParserException &e) { _error("ConfigTree: %s", e.what()); @@ -57,7 +57,7 @@ ConfigTree::ConfigTree() :_sections() try { - parser->parse(); + parser->serializeEvents(); } catch(YamlParserException &e) { _error("ConfigTree: %s", e.what()); diff --git a/sflphone-common/src/config/config.h b/sflphone-common/src/config/config.h old mode 100644 new mode 100755 diff --git a/sflphone-common/src/config/engine.h b/sflphone-common/src/config/engine.h old mode 100644 new mode 100755 diff --git a/sflphone-common/src/config/serializable.h b/sflphone-common/src/config/serializable.h old mode 100644 new mode 100755 diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp old mode 100644 new mode 100755 diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h old mode 100644 new mode 100755 diff --git a/sflphone-common/src/config/yamlengine.cpp b/sflphone-common/src/config/yamlengine.cpp old mode 100644 new mode 100755 diff --git a/sflphone-common/src/config/yamlengine.h b/sflphone-common/src/config/yamlengine.h old mode 100644 new mode 100755 diff --git a/sflphone-common/src/config/yamlnode.cpp b/sflphone-common/src/config/yamlnode.cpp new file mode 100755 index 0000000000..1daa148ce9 --- /dev/null +++ b/sflphone-common/src/config/yamlnode.cpp @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#include "yamlnode.h" + +namespace Conf { + + +void MappingNode::setKeyValue(Key key, YamlNode *value) +{ + Mapping::iterator it = map.end(); + map.insert(it, std::pair<Key, YamlNode *>(key, value)); +} + +void MappingNode::removeKeyValue(Key key) +{ + + Mapping::iterator it = map.find(key); + map.erase(it); +} + + +YamlNode *MappingNode::getValue(Key key) +{ + Mapping::iterator it = map.find(key); + + return it->second; +} + + +void SequenceNode::addNode(YamlNode *node) +{ + Sequence::iterator it = seq.end(); + + seq.insert(it, node); +} + + + +} + diff --git a/sflphone-common/src/config/yamlnode.h b/sflphone-common/src/config/yamlnode.h new file mode 100755 index 0000000000..ad8c240bc3 --- /dev/null +++ b/sflphone-common/src/config/yamlnode.h @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#ifndef __YAMLNODE_H__ +#define __YAMLNODE_H__ + +#include <string> +#include <list> +#include <map> +#include <exception> + +namespace Conf { + + +class YamlNode; + +typedef std::string Key; +typedef std::string Value; +typedef std::list<YamlNode *> Sequence; +typedef std::map<Key, YamlNode *> Mapping; + + +class YamlNodeException : public std::exception +{ + + public: + YamlNodeException(const std::string& str="") throw() : errstr(str) {} + + virtual ~YamlNodeException() throw() {} + + virtual const char *what() const throw() { + std::string expt("YamlNodeException occured: "); + expt.append(errstr); + + return expt.c_str(); + } + private: + std::string errstr; + +}; + + +enum NodeType { DOCUMENT, SCALAR, MAPPING, SEQUENCE }; + + +class YamlNode { + + public: + + YamlNode(NodeType t) : type(t) {} + + ~YamlNode() {} + + NodeType getType() { return type; } + + private: + + NodeType type; + +}; + + +class SequenceNode : public YamlNode { + + public: + + SequenceNode() : YamlNode(SEQUENCE) {} + + ~SequenceNode() {} + + Sequence *getSequence() { return &seq; } + + void addNode(YamlNode *node); + + private: + + Sequence seq; + +}; + + +class MappingNode : public YamlNode { + + public: + + MappingNode() : YamlNode(MAPPING) {} + + ~MappingNode() {} + + Mapping *getMapping() { return ↦ } + + void setKeyValue(Key key, YamlNode *value); + + void removeKeyValue(Key key); + + YamlNode *getValue(Key key); + + private: + + Mapping map; + +}; + + +class ScalarNode : public YamlNode { + + public: + + ScalarNode(Value v="") : YamlNode(SCALAR), val(v) {} + + ~ScalarNode() {} + + Value getValue() { return val; } + + void setValue(Value v) { val = v; } + + private: + + Value val; + +}; + +} + + + +#endif diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp old mode 100644 new mode 100755 index 796bfd8a91..a603293708 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -32,11 +32,12 @@ #include "../global.h" #include "config.h" +#include "yamlnode.h" #include <stdio.h> namespace Conf { -YamlParser::YamlParser() +YamlParser::YamlParser(const char *file) : filename(file) { memset(buffer, 0, PARSER_BUFFERSIZE); @@ -51,8 +52,6 @@ YamlParser::~YamlParser() void YamlParser::open() { - std::string filename = "sequence.yml"; - fd = fopen(filename.c_str(), "rb"); if(!fd) @@ -77,7 +76,7 @@ void YamlParser::close() } -void YamlParser::parse() +void YamlParser::serializeEvents() { bool done = false; yaml_event_t event; @@ -203,12 +202,12 @@ void YamlParser::composeEvents() { break; case YAML_SCALAR_EVENT: { _debug("YAML_SCALAR_EVENT: anchor %s, tag %s, value %s", events[i].data.scalar.anchor, events[i].data.scalar.tag, events[i].data.scalar.value); - // std::string tmp(events[i].data.scalar.value); - std::string tmp("ok"); - size_t found = tmp.find("account"); - // if this is an account - if(found != std::string::npos) - composeAccount(i); + char buffer[1000]; + snprintf(buffer, 1000, "%s", events[i].data.scalar.value); + _debug("----------------------------- THE BUFFER: %s", buffer); + ScalarNode *sclr = new ScalarNode(buffer); + _debug("----------------------------- THE VALUE: %s", (sclr->getValue()).c_str()); + // ScalarNode *sclr = new ScalarNode("ok"); } break; case YAML_SEQUENCE_START_EVENT: @@ -231,18 +230,5 @@ void YamlParser::composeEvents() { } } -int YamlParser::composeAccount(int index) -{ - - // YamlScalar accid((const char*)(events[index].data.scalar.value)); - YamlScalar accid("ok"); - YamlSequence seq; - // YamlAccount acc(accid, seq); - - // accountlist.insert(acc); - - return index+1; -} - } diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h old mode 100644 new mode 100755 index 1f0dfc05b6..73cc66331a --- a/sflphone-common/src/config/yamlparser.h +++ b/sflphone-common/src/config/yamlparser.h @@ -35,20 +35,12 @@ #include <stdio.h> #include <exception> #include <string> -#include <map> -#include <list> namespace Conf { #define PARSER_BUFFERSIZE 65536 #define PARSER_MAXEVENT 1024 -typedef std::string YamlScalar; -typedef std::map<YamlScalar, YamlScalar> YamlMapping; -typedef std::list<YamlMapping> YamlSequence; -typedef std::map<YamlScalar, YamlSequence> YamlAccount; -typedef std::list<YamlAccount> AccountList; - class YamlParserException : public std::exception { public: @@ -71,7 +63,7 @@ class YamlParser { public: - YamlParser(); + YamlParser(const char *file); ~YamlParser(); @@ -79,12 +71,10 @@ class YamlParser { void close(); - void parse(); + void serializeEvents(); void composeEvents(); - int composeAccount(int i); - private: /** @@ -92,6 +82,8 @@ class YamlParser { */ int copyEvent(yaml_event_t *event_to, yaml_event_t *event_from); + std::string filename; + FILE *fd; /** @@ -114,8 +106,6 @@ class YamlParser { */ int eventNumber; - AccountList accountlist; - }; } -- GitLab From 50b3798b943048dae1e49c1e6978c3fb26b63cb4 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 2 Jul 2010 10:15:47 -0400 Subject: [PATCH 111/197] [#3647] Unit test the yaml parser --- sflphone-common/test/configurationtest.cpp | 65 +++++++++++++++++++++- sflphone-common/test/configurationtest.h | 16 ++++-- 2 files changed, 72 insertions(+), 9 deletions(-) mode change 100644 => 100755 sflphone-common/test/configurationtest.cpp mode change 100644 => 100755 sflphone-common/test/configurationtest.h diff --git a/sflphone-common/test/configurationtest.cpp b/sflphone-common/test/configurationtest.cpp old mode 100644 new mode 100755 index f42ea1be83..473753e991 --- a/sflphone-common/test/configurationtest.cpp +++ b/sflphone-common/test/configurationtest.cpp @@ -154,9 +154,68 @@ void ConfigurationTest::testInitAudioDriver() { void ConfigurationTest::testYamlParser() { - YamlParser *parser = new YamlParser(); - delete parser; - parser = NULL; + Conf::YamlParser *parser; + try { + parser = new Conf::YamlParser("sequence.yml"); + } + catch (Conf::YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } + + + try { + parser->serializeEvents(); + } + catch(Conf::YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } + + try { + parser->composeEvents(); + } + catch(Conf::YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } + + try { + delete parser; + parser = NULL; + } + catch (Conf::YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } } + + +void ConfigurationTest::testYamlComposition() +{ + + Conf::SequenceNode *seq = new Conf::SequenceNode(); + Conf::MappingNode *map = new Conf::MappingNode(); + Conf::ScalarNode *sclr = new Conf::ScalarNode(); + + CPPUNIT_ASSERT(seq->getType() == Conf::SEQUENCE); + CPPUNIT_ASSERT(map->getType() == Conf::MAPPING); + CPPUNIT_ASSERT(sclr->getType() == Conf::SCALAR); + + seq->addNode(map); + seq->addNode(sclr); + + Conf::Key key("username"); + Conf::ScalarNode *val = new Conf::ScalarNode("alexandre"); + + map->setKeyValue(key, val); + + Conf::YamlNode *node = map->getValue(key); + + CPPUNIT_ASSERT(node->getType() == Conf::SCALAR); + + delete val; + + delete seq; + delete map; + delete sclr; + +} diff --git a/sflphone-common/test/configurationtest.h b/sflphone-common/test/configurationtest.h old mode 100644 new mode 100755 index 1688819ea6..8c9ff82fea --- a/sflphone-common/test/configurationtest.h +++ b/sflphone-common/test/configurationtest.h @@ -51,6 +51,7 @@ #include "global.h" #include "user_cfg.h" #include "config/yamlparser.h" +#include "config/yamlnode.h" class ConfigurationTest: public CppUnit::TestFixture { @@ -58,12 +59,13 @@ class ConfigurationTest: public CppUnit::TestFixture { * Use cppunit library macros to add unit test the factory */ CPPUNIT_TEST_SUITE( ConfigurationTest ); - CPPUNIT_TEST( testInitVolume ); - CPPUNIT_TEST( testDefaultValueAudio ); - CPPUNIT_TEST( testDefaultValuePreferences ); - CPPUNIT_TEST( testDefaultValueSignalisation ); - CPPUNIT_TEST( testInitAudioDriver ); - CPPUNIT_TEST( testYamlParser ); +// CPPUNIT_TEST( testInitVolume ); +// CPPUNIT_TEST( testDefaultValueAudio ); +// CPPUNIT_TEST( testDefaultValuePreferences ); +// CPPUNIT_TEST( testDefaultValueSignalisation ); +// CPPUNIT_TEST( testInitAudioDriver ); + CPPUNIT_TEST( testYamlParser ); + CPPUNIT_TEST( testYamlComposition ); CPPUNIT_TEST_SUITE_END(); public: @@ -95,6 +97,8 @@ public: void testInitAudioDriver(); void testYamlParser(); + + void testYamlComposition(); }; /* Register our test module */ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ConfigurationTest, "ConfigurationTest"); -- GitLab From 24f4cdd8264402c10a4906e7df61cb158f80188a Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 2 Jul 2010 10:37:27 -0400 Subject: [PATCH 112/197] [#3648] Add document class in yaml nodes --- sflphone-common/src/config/yamlnode.cpp | 21 +++++++++++++++++---- sflphone-common/src/config/yamlnode.h | 22 +++++++++++++++++++--- sflphone-common/test/configurationtest.cpp | 4 +++- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/sflphone-common/src/config/yamlnode.cpp b/sflphone-common/src/config/yamlnode.cpp index 1daa148ce9..ebfb8f245c 100755 --- a/sflphone-common/src/config/yamlnode.cpp +++ b/sflphone-common/src/config/yamlnode.cpp @@ -33,6 +33,23 @@ namespace Conf { +void YamlDocument::addNode(YamlNode *node) +{ + Sequence::iterator it = doc.end(); + doc.insert(it, node); +} + +YamlNode *YamlDocument::popNode() +{ + Sequence::iterator it = doc.begin(); + YamlNode *node = doc.front(); + + //removed element's destructor is called + doc.pop_front(); + + return node; +} + void MappingNode::setKeyValue(Key key, YamlNode *value) { Mapping::iterator it = map.end(); @@ -50,7 +67,6 @@ void MappingNode::removeKeyValue(Key key) YamlNode *MappingNode::getValue(Key key) { Mapping::iterator it = map.find(key); - return it->second; } @@ -58,11 +74,8 @@ YamlNode *MappingNode::getValue(Key key) void SequenceNode::addNode(YamlNode *node) { Sequence::iterator it = seq.end(); - seq.insert(it, node); } - - } diff --git a/sflphone-common/src/config/yamlnode.h b/sflphone-common/src/config/yamlnode.h index ad8c240bc3..d6efa03c08 100755 --- a/sflphone-common/src/config/yamlnode.h +++ b/sflphone-common/src/config/yamlnode.h @@ -46,7 +46,6 @@ typedef std::string Value; typedef std::list<YamlNode *> Sequence; typedef std::map<Key, YamlNode *> Mapping; - class YamlNodeException : public std::exception { @@ -66,10 +65,8 @@ class YamlNodeException : public std::exception }; - enum NodeType { DOCUMENT, SCALAR, MAPPING, SEQUENCE }; - class YamlNode { public: @@ -87,6 +84,24 @@ class YamlNode { }; +class YamlDocument : YamlNode { + + public: + + YamlDocument() : YamlNode(DOCUMENT) {} + + ~YamlDocument() {} + + void addNode(YamlNode *node); + + YamlNode *popNode(); + + private: + + Sequence doc; + + }; + class SequenceNode : public YamlNode { public: @@ -147,6 +162,7 @@ class ScalarNode : public YamlNode { }; + } diff --git a/sflphone-common/test/configurationtest.cpp b/sflphone-common/test/configurationtest.cpp index 473753e991..488318271c 100755 --- a/sflphone-common/test/configurationtest.cpp +++ b/sflphone-common/test/configurationtest.cpp @@ -191,7 +191,7 @@ void ConfigurationTest::testYamlParser() void ConfigurationTest::testYamlComposition() { - + Conf::SequenceNode *seq = new Conf::SequenceNode(); Conf::MappingNode *map = new Conf::MappingNode(); Conf::ScalarNode *sclr = new Conf::ScalarNode(); @@ -218,4 +218,6 @@ void ConfigurationTest::testYamlComposition() delete map; delete sclr; + + } -- GitLab From 451c5f694fcd4b96c364f279007b9d5afbbc6af1 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Fri, 2 Jul 2010 11:04:16 -0400 Subject: [PATCH 113/197] [#2833] Store notification preferences via gconf --- .../src/config/preferencesdialog.c | 5 ++- sflphone-client-gnome/src/dbus/dbus.c | 38 ------------------- sflphone-client-gnome/src/dbus/dbus.h | 12 ------ sflphone-client-gnome/src/sflnotify.c | 2 +- sflphone-client-gnome/src/sflphone_const.h | 1 + 5 files changed, 5 insertions(+), 53 deletions(-) diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index 01be2abd63..b4295eea0c 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -96,7 +96,8 @@ set_popup_mode (GtkWidget *widget, gpointer *userdata) void set_notif_level () { - dbus_set_notify (); + gboolean current_state = eel_gconf_get_integer (NOTIFY_ALL); + eel_gconf_set_integer (NOTIFY_ALL, !current_state); } static void @@ -161,7 +162,7 @@ create_general_settings () // Notification All notifAll = gtk_check_button_new_with_mnemonic (_("_Enable notifications")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(notifAll), dbus_get_notify ()); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(notifAll), eel_gconf_get_integer (NOTIFY_ALL)); g_signal_connect(G_OBJECT( notifAll ) , "clicked" , G_CALLBACK( set_notif_level ) , NULL ); gtk_table_attach (GTK_TABLE(table), notifAll, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index a5273a2ee0..ac3ec7cb14 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -1992,44 +1992,6 @@ dbus_switch_popup_mode(void) } } -void -dbus_set_notify(void) -{ - GError* error = NULL; - org_sflphone_SFLphone_ConfigurationManager_set_notify( - configurationManagerProxy, &error); - if (error) - { - g_error_free(error); - } -} - -guint -dbus_get_notify(void) -{ - gint level; - GError* error = NULL; - if (!org_sflphone_SFLphone_ConfigurationManager_get_notify( - configurationManagerProxy, &level, &error)) - { - if (error->domain == DBUS_GERROR && error->code - == DBUS_GERROR_REMOTE_EXCEPTION) - { - ERROR ("Caught remote method (get_notify) exception %s: %s", dbus_g_error_get_name(error), error->message); - } - else - { - ERROR ("Error while calling get_notify: %s", error->message); - } - g_error_free(error); - return 0; - } - else - { - return (guint) level; - } -} - void dbus_set_audio_manager(int api) { diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h index bf497ff5a4..e7fce25dbf 100644 --- a/sflphone-client-gnome/src/dbus/dbus.h +++ b/sflphone-client-gnome/src/dbus/dbus.h @@ -482,18 +482,6 @@ int dbus_get_audio_manager( void ); */ void dbus_set_audio_manager( int api ); -/** - * ConfigurationManager - Configure the notification level - * @return int 0 disable - * 1 enable - */ -guint dbus_get_notify( void ); - -/** - * ConfigurationManager - Configure the notification level - */ -void dbus_set_notify( void ); - /** * ConfigurationManager - Start a tone when a new call is open and no numbers have been dialed * @param start 1 to start diff --git a/sflphone-client-gnome/src/sflnotify.c b/sflphone-client-gnome/src/sflnotify.c index 5ac960e003..4a2f000cfa 100644 --- a/sflphone-client-gnome/src/sflnotify.c +++ b/sflphone-client-gnome/src/sflnotify.c @@ -36,7 +36,7 @@ void create_new_gnome_notification (gchar *title, gchar *body, NotifyUrgency urg { GnomeNotification *_notif; - if( dbus_get_notify()){ + if (eel_gconf_get_integer (NOTIFY_ALL)){ _notif = g_new0 (GnomeNotification, 1); diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index 2432c50f90..a0020b8fa4 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -187,5 +187,6 @@ log4c_category_t* log4c_sfl_gtk_category; #define CONF_MAIN_WINDOW_POSITION_Y CONF_PREFIX "/state/window_position_y" /** Show/Hide the dialpad */ #define CONF_SHOW_DIALPAD CONF_PREFIX "/state/dialpad" +#define NOTIFY_ALL CONF_PREFIX "/state/notify_all" #endif -- GitLab From 9b900c5b16d25da9595b832f210ce19d3f77be62 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Fri, 2 Jul 2010 11:13:06 -0400 Subject: [PATCH 114/197] [#2833] gconf: display volume controls --- sflphone-client-gnome/src/config/audioconf.c | 2 +- sflphone-client-gnome/src/dbus/dbus.c | 26 -------------------- sflphone-client-gnome/src/dbus/dbus.h | 12 --------- sflphone-client-gnome/src/sflphone_const.h | 3 ++- sflphone-client-gnome/src/uimanager.c | 2 +- 5 files changed, 4 insertions(+), 41 deletions(-) diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c index bab96d27e7..d27b64d2f2 100644 --- a/sflphone-client-gnome/src/config/audioconf.c +++ b/sflphone-client-gnome/src/config/audioconf.c @@ -767,7 +767,7 @@ select_audio_manager( void ) if (gtk_toggle_action_get_active ( GTK_TOGGLE_ACTION (volumeToggle))) { main_window_volume_controls(FALSE); - dbus_set_volume_controls (FALSE); + eel_gconf_set_integer (SHOW_VOLUME_CONTROLS, FALSE); gtk_toggle_action_set_active ( GTK_TOGGLE_ACTION (volumeToggle), FALSE); } gtk_action_set_sensitive (GTK_ACTION (volumeToggle), FALSE); diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index ac3ec7cb14..a14d089e5a 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -1726,32 +1726,6 @@ dbus_set_searchbar() } } -int -dbus_get_volume_controls() -{ - int state; - GError* error = NULL; - org_sflphone_SFLphone_ConfigurationManager_get_volume_controls( - configurationManagerProxy, &state, &error); - if (error) - { - g_error_free(error); - } - return state; -} - -void -dbus_set_volume_controls(gboolean display) -{ - GError* error = NULL; - org_sflphone_SFLphone_ConfigurationManager_set_volume_controls( - configurationManagerProxy, display, &error); - if (error) - { - g_error_free(error); - } -} - void dbus_join_participant(const gchar* sel_callID, const gchar* drag_callID) { diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h index e7fce25dbf..2ebdceae5e 100644 --- a/sflphone-client-gnome/src/dbus/dbus.h +++ b/sflphone-client-gnome/src/dbus/dbus.h @@ -414,18 +414,6 @@ void dbus_set_searchbar( ); */ int dbus_get_searchbar( void ); -/** - * ConfigurationManager - Set the volume controls visible or not - */ -void dbus_set_volume_controls (gboolean display); - -/** - * ConfigurationManager - Tells if the user wants to display the volume controls or not - * @return int 1 if the controls have to be displayed - * 0 otherwise - */ -int dbus_get_volume_controls( void ); - /** * ConfigurationManager - Configure the start-up option * At startup, SFLphone can be displayed or start hidden in the system tray diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index a0020b8fa4..c675713d2a 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -140,7 +140,7 @@ log4c_category_t* log4c_sfl_gtk_category; /** Show/Hide the alsa configuration panel */ #define SHOW_ALSA_CONF ( dbus_get_audio_manager() == ALSA ) /** Show/Hide the volume controls */ -#define SHOW_VOLUME (dbus_get_volume_controls() && SHOW_ALSA_CONF) +#define SHOW_VOLUME (eel_gconf_get_integer (SHOW_VOLUME_CONTROLS) && SHOW_ALSA_CONF) /** Audio Managers */ #define ALSA 0 @@ -187,6 +187,7 @@ log4c_category_t* log4c_sfl_gtk_category; #define CONF_MAIN_WINDOW_POSITION_Y CONF_PREFIX "/state/window_position_y" /** Show/Hide the dialpad */ #define CONF_SHOW_DIALPAD CONF_PREFIX "/state/dialpad" +#define SHOW_VOLUME_CONTROLS CONF_PREFIX "/state/volume_controls" #define NOTIFY_ALL CONF_PREFIX "/state/notify_all" #endif diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c index 6812ba62ef..d5ed013e54 100644 --- a/sflphone-client-gnome/src/uimanager.c +++ b/sflphone-client-gnome/src/uimanager.c @@ -353,7 +353,7 @@ volume_bar_cb(GtkToggleAction *togglemenuitem, gpointer user_data) return; main_window_volume_controls(toggled); if (toggled || SHOW_VOLUME) - dbus_set_volume_controls(toggled); + eel_gconf_set_integer (SHOW_VOLUME_CONTROLS, toggled); } static void -- GitLab From 955bed1861fe77c4490a949bd20225e4f3d6efa4 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Fri, 2 Jul 2010 11:31:11 -0400 Subject: [PATCH 115/197] [#2833] gconf: Icon in the system tray --- .../src/config/preferencesdialog.c | 12 ++++---- sflphone-client-gnome/src/dbus/dbus.c | 29 ------------------- sflphone-client-gnome/src/dbus/dbus.h | 3 -- sflphone-client-gnome/src/main.c | 8 ++--- sflphone-client-gnome/src/mainwindow.c | 2 +- sflphone-client-gnome/src/sflphone_const.h | 1 + sflphone-client-gnome/src/uimanager.c | 2 +- 7 files changed, 11 insertions(+), 46 deletions(-) diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index b4295eea0c..2302202db5 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -136,8 +136,8 @@ void showstatusicon_cb (GtkWidget *widget, gpointer data) { currentstatus ? show_status_icon () : hide_status_icon (); - // Update through D-Bus - dbus_enable_status_icon (currentstatus ? "true" : "false"); + // Update through D-Bus + eel_gconf_set_integer (SHOW_STATUSICON, currentstatus); } @@ -146,7 +146,7 @@ create_general_settings () { GtkWidget *ret, *notifAll, *trayItem, *frame, *checkBoxWidget, *label, *table; - gboolean statusicon = FALSE; + gboolean statusicon; // Load history configuration history_load_configuration (); @@ -172,10 +172,8 @@ create_general_settings () 1); gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); - if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0) - statusicon = TRUE; - else - statusicon = FALSE; + // Whether or not displaying an icon in the system tray + statusicon = eel_gconf_get_integer (SHOW_STATUSICON); showstatusicon = gtk_check_button_new_with_mnemonic ( _("Show SFLphone in the system tray")); diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index a14d089e5a..a953d06141 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -2615,32 +2615,3 @@ dbus_set_shortcuts(GHashTable * shortcuts) } } - -void dbus_enable_status_icon (const gchar *value) { - - GError *error = NULL; - - org_sflphone_SFLphone_ConfigurationManager_enable_status_icon (configurationManagerProxy, value, &error); - - if (error != NULL) { - ERROR ("Failed to call enable_status_icon on ConfigurationManager: %s", - error->message); - g_error_free (error); - } -} - -gchar* dbus_is_status_icon_enabled (void) { - - GError *error = NULL; - gchar *value = NULL; - - org_sflphone_SFLphone_ConfigurationManager_is_status_icon_enabled (configurationManagerProxy, &value, &error); - - if (error != NULL) { - ERROR ("Failed to call is_status_icon_enabled on ConfigurationManager: %s", - error->message); - g_error_free (error); - } - return value; -} - diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h index 2ebdceae5e..5c81b6a9b1 100644 --- a/sflphone-client-gnome/src/dbus/dbus.h +++ b/sflphone-client-gnome/src/dbus/dbus.h @@ -615,7 +615,4 @@ void dbus_set_window_position_y (const guint posy); GHashTable* dbus_get_shortcuts(void); void dbus_set_shortcuts(GHashTable * shortcuts); -void dbus_enable_status_icon (const gchar*); -gchar* dbus_is_status_icon_enabled (void); - #endif diff --git a/sflphone-client-gnome/src/main.c b/sflphone-client-gnome/src/main.c index 6ab9d8c832..f534eda00d 100644 --- a/sflphone-client-gnome/src/main.c +++ b/sflphone-client-gnome/src/main.c @@ -72,7 +72,6 @@ main (int argc, char *argv[]) { // Handle logging int i; - gboolean statusicon = FALSE; // Startup logging startup_logging (); @@ -117,13 +116,12 @@ main (int argc, char *argv[]) if (sflphone_init ()) { - if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0) - statusicon = TRUE; + if (eel_gconf_get_integer (SHOW_STATUSICON)) + show_status_icon (); - if (statusicon) show_status_icon (); create_main_window (); - if (statusicon && dbus_is_start_hidden ()) + if (eel_gconf_get_integer (SHOW_STATUSICON) && dbus_is_start_hidden ()) { gtk_widget_hide (GTK_WIDGET( get_main_window() )); set_minimized (TRUE); diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c index 147526c143..cf3ca81757 100644 --- a/sflphone-client-gnome/src/mainwindow.c +++ b/sflphone-client-gnome/src/mainwindow.c @@ -84,7 +84,7 @@ static gboolean window_configure_cb (GtkWidget *win, GdkEventConfigure *event) { on_delete (GtkWidget * widget UNUSED, gpointer data UNUSED) { - if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0) { + if (eel_gconf_get_integer (SHOW_STATUSICON)) { gtk_widget_hide (GTK_WIDGET( get_main_window() )); set_minimized (TRUE); } diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index c675713d2a..58fb9f7675 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -188,6 +188,7 @@ log4c_category_t* log4c_sfl_gtk_category; /** Show/Hide the dialpad */ #define CONF_SHOW_DIALPAD CONF_PREFIX "/state/dialpad" #define SHOW_VOLUME_CONTROLS CONF_PREFIX "/state/volume_controls" +#define SHOW_STATUSICON CONF_PREFIX "/state/statusicon" #define NOTIFY_ALL CONF_PREFIX "/state/notify_all" #endif diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c index d5ed013e54..1b185e2d80 100644 --- a/sflphone-client-gnome/src/uimanager.c +++ b/sflphone-client-gnome/src/uimanager.c @@ -430,7 +430,7 @@ static void call_minimize(void * foo UNUSED) { - if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0) { + if (eel_gconf_get_integer (SHOW_STATUSICON)) { gtk_widget_hide(GTK_WIDGET( get_main_window() )); set_minimized(TRUE); } -- GitLab From 1e38a20e55584f1386cf78fb7889502f21fc655b Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Fri, 2 Jul 2010 12:05:05 -0400 Subject: [PATCH 116/197] [#2833] gconf: popup mode (on incoming calls) --- .../src/config/preferencesdialog.c | 23 ++++---- sflphone-client-gnome/src/dbus/dbus.c | 52 ------------------- sflphone-client-gnome/src/dbus/dbus.h | 27 ---------- sflphone-client-gnome/src/main.c | 2 +- sflphone-client-gnome/src/sflphone_const.h | 4 +- sflphone-client-gnome/src/statusicon.c | 1 - 6 files changed, 18 insertions(+), 91 deletions(-) diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index 2302202db5..5ab5e71a5e 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -82,15 +82,17 @@ set_md5_hash_cb (GtkWidget *widget UNUSED, gpointer data UNUSED) static void start_hidden (void) { - dbus_start_hidden (); + gboolean currentstate = eel_gconf_get_integer (START_HIDDEN); + eel_gconf_set_integer (START_HIDDEN, !currentstate); } static void set_popup_mode (GtkWidget *widget, gpointer *userdata) { - if (dbus_popup_mode () || gtk_toggle_button_get_active ( - GTK_TOGGLE_BUTTON (widget))) - dbus_switch_popup_mode (); + gboolean currentstate = eel_gconf_get_integer (POPUP_ON_CALL); + if (currentstate || gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) { + eel_gconf_set_integer (POPUP_ON_CALL, !currentstate); + } } void @@ -193,16 +195,19 @@ create_general_settings () gtk_table_attach (GTK_TABLE(table), neverpopupwindow, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - // Toggle according to the user configuration - dbus_popup_mode () ? gtk_toggle_button_set_active ( - GTK_TOGGLE_BUTTON (popupwindow), TRUE) : gtk_toggle_button_set_active ( - GTK_TOGGLE_BUTTON (neverpopupwindow), TRUE); + // Toggle according to the user configuration + eel_gconf_get_integer (POPUP_ON_CALL) ? gtk_toggle_button_set_active ( + GTK_TOGGLE_BUTTON (popupwindow), + TRUE) : + gtk_toggle_button_set_active ( + GTK_TOGGLE_BUTTON (neverpopupwindow), + TRUE); starthidden = gtk_check_button_new_with_mnemonic ( _("Hide SFLphone window on _startup")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(starthidden), - dbus_is_start_hidden ()); + eel_gconf_get_integer (START_HIDDEN)); g_signal_connect(G_OBJECT (starthidden) , "clicked" , G_CALLBACK( start_hidden ) , NULL); gtk_table_attach (GTK_TABLE(table), starthidden, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index a953d06141..7871ab44dd 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -1914,58 +1914,6 @@ dbus_get_history_limit(void) return (guint) days; } -void -dbus_start_hidden(void) -{ - GError* error = NULL; - org_sflphone_SFLphone_ConfigurationManager_start_hidden( - configurationManagerProxy, &error); - if (error) - { - g_error_free(error); - } -} - -int -dbus_is_start_hidden(void) -{ - GError* error = NULL; - int state; - org_sflphone_SFLphone_ConfigurationManager_is_start_hidden( - configurationManagerProxy, &state, &error); - if (error) - { - g_error_free(error); - } - return state; -} - -int -dbus_popup_mode(void) -{ - GError* error = NULL; - int state; - org_sflphone_SFLphone_ConfigurationManager_popup_mode( - configurationManagerProxy, &state, &error); - if (error) - { - g_error_free(error); - } - return state; -} - -void -dbus_switch_popup_mode(void) -{ - GError* error = NULL; - org_sflphone_SFLphone_ConfigurationManager_switch_popup_mode( - configurationManagerProxy, &error); - if (error) - { - g_error_free(error); - } -} - void dbus_set_audio_manager(int api) { diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h index 5c81b6a9b1..04b9543542 100644 --- a/sflphone-client-gnome/src/dbus/dbus.h +++ b/sflphone-client-gnome/src/dbus/dbus.h @@ -414,12 +414,6 @@ void dbus_set_searchbar( ); */ int dbus_get_searchbar( void ); -/** - * ConfigurationManager - Configure the start-up option - * At startup, SFLphone can be displayed or start hidden in the system tray - */ -void dbus_start_hidden( void ); - /** * ConfigurationManager - Gives the maximum number of days the user wants to have in the history * @return double The maximum number of days @@ -435,27 +429,6 @@ void dbus_set_history_enabled (void); gchar* dbus_get_history_enabled (void); -/** - * ConfigurationManager - Configure the start-up option - * @return int 1 if SFLphone should start in the system tray - * 0 otherwise - */ -int dbus_is_start_hidden( void ); - -/** - * ConfigurationManager - Configure the popup behaviour - * When SFLphone is in the system tray, you can configure when it popups - * Never or only on incoming calls - */ -void dbus_switch_popup_mode( void ); - -/** - * ConfigurationManager - Configure the popup behaviour - * @return int 1 if it should popup on incoming calls - * 0 if it should never popups - */ -int dbus_popup_mode( void ); - /** * ConfigurationManager - Returns the selected audio manager * @return int 0 ALSA diff --git a/sflphone-client-gnome/src/main.c b/sflphone-client-gnome/src/main.c index f534eda00d..38cb5cd3f7 100644 --- a/sflphone-client-gnome/src/main.c +++ b/sflphone-client-gnome/src/main.c @@ -121,7 +121,7 @@ main (int argc, char *argv[]) create_main_window (); - if (eel_gconf_get_integer (SHOW_STATUSICON) && dbus_is_start_hidden ()) + if (eel_gconf_get_integer (SHOW_STATUSICON) && eel_gconf_get_integer (START_HIDDEN)) { gtk_widget_hide (GTK_WIDGET( get_main_window() )); set_minimized (TRUE); diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index 58fb9f7675..cd041400cd 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -136,7 +136,7 @@ log4c_category_t* log4c_sfl_gtk_category; /** Tells if the main window is reduced to the system tray or not */ #define MINIMIZED TRUE /** Behaviour of the main window on incoming calls */ -#define __POPUP_WINDOW ( dbus_popup_mode() ) +#define __POPUP_WINDOW (eel_gconf_get_integer (POPUP_ON_CALL)) /** Show/Hide the alsa configuration panel */ #define SHOW_ALSA_CONF ( dbus_get_audio_manager() == ALSA ) /** Show/Hide the volume controls */ @@ -190,5 +190,7 @@ log4c_category_t* log4c_sfl_gtk_category; #define SHOW_VOLUME_CONTROLS CONF_PREFIX "/state/volume_controls" #define SHOW_STATUSICON CONF_PREFIX "/state/statusicon" #define NOTIFY_ALL CONF_PREFIX "/state/notify_all" +#define START_HIDDEN CONF_PREFIX "/state/start_hidden" +#define POPUP_ON_CALL CONF_PREFIX "/state/popup" #endif diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c index 3d4e3a724f..72511091f0 100644 --- a/sflphone-client-gnome/src/statusicon.c +++ b/sflphone-client-gnome/src/statusicon.c @@ -204,7 +204,6 @@ statusicon_set_tooltip() g_free(tip); } - } void -- GitLab From 6a0501611846eaa104e897e7fd777a3c008a9397 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Fri, 2 Jul 2010 12:38:18 -0400 Subject: [PATCH 117/197] [#2833] gconf: history enabled --- .../src/config/preferencesdialog.c | 6 ++--- sflphone-client-gnome/src/contacts/calllist.c | 2 +- sflphone-client-gnome/src/contacts/calltree.c | 2 +- sflphone-client-gnome/src/dbus/dbus.c | 26 ------------------- sflphone-client-gnome/src/dbus/dbus.h | 4 --- sflphone-client-gnome/src/sflphone_const.h | 1 + sflphone-client-gnome/src/uimanager.c | 12 +++++++++ 7 files changed, 17 insertions(+), 36 deletions(-) diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index 5ab5e71a5e..ff68a31c7a 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -115,7 +115,7 @@ history_enabled_cb (GtkWidget *widget) gtk_widget_set_sensitive (GTK_WIDGET (history_value), history_enabled); // Toggle it through D-Bus - dbus_set_history_enabled (); + eel_gconf_set_integer (HISTORY_ENABLED, !eel_gconf_get_integer (HISTORY_ENABLED)); } void @@ -265,9 +265,7 @@ void history_load_configuration () { history_limit = dbus_get_history_limit (); - history_enabled = TRUE; - if (g_strcasecmp (dbus_get_history_enabled (), "false") == 0) - history_enabled = FALSE; + history_enabled = eel_gconf_get_integer (HISTORY_ENABLED); } /** diff --git a/sflphone-client-gnome/src/contacts/calllist.c b/sflphone-client-gnome/src/contacts/calllist.c index c5566261be..10744e58ff 100644 --- a/sflphone-client-gnome/src/contacts/calllist.c +++ b/sflphone-client-gnome/src/contacts/calllist.c @@ -91,7 +91,7 @@ calllist_reset (calltab_t* tab) void calllist_add_history_entry (callable_obj_t *obj) { - if ( g_strcasecmp (dbus_get_history_enabled (), "true") == 0) + if (eel_gconf_get_integer (HISTORY_ENABLED)) { g_queue_push_tail (history->callQueue, (gpointer *) obj); calltree_add_call (history, obj, NULL); diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index dde1cae4c5..6417d628fb 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -989,7 +989,7 @@ void calltree_add_history_entry (callable_obj_t * c) DEBUG("calltree_add_history_entry %s", c->_callID); - if ( g_strcasecmp (dbus_get_history_enabled (), "false") == 0) + if (!eel_gconf_get_integer (HISTORY_ENABLED)) return; GdkPixbuf *pixbuf=NULL; diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index 7871ab44dd..9a3cc87dea 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -1874,32 +1874,6 @@ dbus_set_history_limit(const guint days) } } -void -dbus_set_history_enabled() -{ - GError* error = NULL; - org_sflphone_SFLphone_ConfigurationManager_set_history_enabled( - configurationManagerProxy, &error); - if (error) - { - g_error_free(error); - } -} - -gchar* -dbus_get_history_enabled() -{ - gchar* state; - GError* error = NULL; - org_sflphone_SFLphone_ConfigurationManager_get_history_enabled( - configurationManagerProxy, &state, &error); - if (error) - { - g_error_free(error); - } - return state; -} - guint dbus_get_history_limit(void) { diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h index 04b9543542..d028b66ae4 100644 --- a/sflphone-client-gnome/src/dbus/dbus.h +++ b/sflphone-client-gnome/src/dbus/dbus.h @@ -425,10 +425,6 @@ guint dbus_get_history_limit( void ); */ void dbus_set_history_limit (const guint days); -void dbus_set_history_enabled (void); - -gchar* dbus_get_history_enabled (void); - /** * ConfigurationManager - Returns the selected audio manager * @return int 0 ALSA diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index cd041400cd..250a8c5673 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -192,5 +192,6 @@ log4c_category_t* log4c_sfl_gtk_category; #define NOTIFY_ALL CONF_PREFIX "/state/notify_all" #define START_HIDDEN CONF_PREFIX "/state/start_hidden" #define POPUP_ON_CALL CONF_PREFIX "/state/popup" +#define HISTORY_ENABLED CONF_PREFIX "/state/history" #endif diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c index 1b185e2d80..8f3a41ca1e 100644 --- a/sflphone-client-gnome/src/uimanager.c +++ b/sflphone-client-gnome/src/uimanager.c @@ -92,6 +92,7 @@ update_actions() g_object_ref(holdToolbar); g_object_ref(offHoldToolbar); g_object_ref(contactButton); + g_object_ref(historyButton); g_object_ref(transferToolbar); g_object_ref(voicemailToolbar); @@ -111,6 +112,11 @@ update_actions() GTK_WIDGET (transferToolbar)); } + if (is_inserted(GTK_WIDGET(historyButton), GTK_WIDGET (toolbar))) + { + gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (historyButton)); + } + if (is_inserted(GTK_WIDGET(contactButton), GTK_WIDGET (toolbar))) { gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (contactButton)); @@ -129,6 +135,7 @@ update_actions() gtk_widget_set_sensitive(GTK_WIDGET (recordWidget), FALSE); gtk_action_set_sensitive(GTK_ACTION (copyAction), FALSE); gtk_widget_set_sensitive(GTK_WIDGET(contactButton), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(historyButton), FALSE); gtk_widget_set_tooltip_text(GTK_WIDGET (contactButton), _("No address book selected")); @@ -143,6 +150,11 @@ update_actions() gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (pickUpWidget)); gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (newCallWidget), 0); + + if (eel_gconf_get_integer (HISTORY_ENABLED)) { + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (historyButton), -1); + gtk_widget_set_sensitive(GTK_WIDGET(historyButton), TRUE); + } // If addressbook support has been enabled and all addressbooks are loaded, display the icon if (addressbook_is_enabled() && addressbook_is_ready()) { -- GitLab From f2afbaff6a23346974e3a05c8ba3524087470614 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 2 Jul 2010 16:23:33 -0400 Subject: [PATCH 118/197] [#3648] Full composition engine --- sflphone-common/src/config/config.cpp | 5 +- sflphone-common/src/config/yamlengine.cpp | 42 ++++- sflphone-common/src/config/yamlengine.h | 7 +- sflphone-common/src/config/yamlnode.h | 16 +- sflphone-common/src/config/yamlparser.cpp | 194 +++++++++++++++++++-- sflphone-common/src/config/yamlparser.h | 23 ++- sflphone-common/test/configurationtest.cpp | 29 +-- 7 files changed, 270 insertions(+), 46 deletions(-) diff --git a/sflphone-common/src/config/config.cpp b/sflphone-common/src/config/config.cpp index 74169b7547..0c937b6f94 100755 --- a/sflphone-common/src/config/config.cpp +++ b/sflphone-common/src/config/config.cpp @@ -46,7 +46,7 @@ namespace Conf // ctor ConfigTree::ConfigTree() :_sections() { - + /* YamlParser *parser; try { parser = new YamlParser("sequence.yml"); @@ -61,8 +61,8 @@ ConfigTree::ConfigTree() :_sections() } catch(YamlParserException &e) { _error("ConfigTree: %s", e.what()); - } + } try { parser->composeEvents(); } @@ -77,6 +77,7 @@ ConfigTree::ConfigTree() :_sections() catch (YamlParserException &e) { _error("ConfigTree: %s", e.what()); } + */ } // dtor diff --git a/sflphone-common/src/config/yamlengine.cpp b/sflphone-common/src/config/yamlengine.cpp index 2a75afacfa..30a2545bfd 100755 --- a/sflphone-common/src/config/yamlengine.cpp +++ b/sflphone-common/src/config/yamlengine.cpp @@ -29,6 +29,8 @@ */ #include "yamlengine.h" +#include "../global.h" + namespace Conf { @@ -36,9 +38,45 @@ YamlEngine::YamlEngine() {} YamlEngine::~YamlEngine() {} -void YamlEngine::open() {} +void YamlEngine::openConfigFile() +{ + + Conf::YamlParser *parser; + + try { + parser = new Conf::YamlParser("sequence.yml"); + } + catch (Conf::YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } + + try { + parser->serializeEvents(); + } + catch(Conf::YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } -void YamlEngine::close() {} + try { + document = parser->composeEvents(); + } + catch(Conf::YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } + + try { + delete parser; + parser = NULL; + } + catch (Conf::YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } +} + +void YamlEngine::closeConfigFile() +{ + +} void YamlEngine::read() {} diff --git a/sflphone-common/src/config/yamlengine.h b/sflphone-common/src/config/yamlengine.h index 100fc8cc89..2997760bc2 100755 --- a/sflphone-common/src/config/yamlengine.h +++ b/sflphone-common/src/config/yamlengine.h @@ -32,6 +32,7 @@ #define __YAMLENGINE_H__ #include "engine.h" +#include "yamlnode.h" #include "yamlparser.h" #include "yamlemitter.h" #include <exception> @@ -53,9 +54,9 @@ class YamlEngine : public Engine { ~YamlEngine(); - virtual void open(); + virtual void openConfigFile(); - virtual void close(); + virtual void closeConfigFile(); virtual void write(); @@ -67,6 +68,8 @@ class YamlEngine : public Engine { YamlEmitter *emitter; + YamlDocument *document; + }; } diff --git a/sflphone-common/src/config/yamlnode.h b/sflphone-common/src/config/yamlnode.h index d6efa03c08..934b82faec 100755 --- a/sflphone-common/src/config/yamlnode.h +++ b/sflphone-common/src/config/yamlnode.h @@ -71,16 +71,20 @@ class YamlNode { public: - YamlNode(NodeType t) : type(t) {} + YamlNode(NodeType t, YamlNode *top=NULL) : type(t), topNode(top) {} ~YamlNode() {} NodeType getType() { return type; } + YamlNode *getTopNode() { return topNode; } + private: NodeType type; + YamlNode *topNode; + }; @@ -88,7 +92,7 @@ class YamlDocument : YamlNode { public: - YamlDocument() : YamlNode(DOCUMENT) {} + YamlDocument(YamlNode* top=NULL) : YamlNode(DOCUMENT, top) {} ~YamlDocument() {} @@ -106,7 +110,7 @@ class SequenceNode : public YamlNode { public: - SequenceNode() : YamlNode(SEQUENCE) {} + SequenceNode(YamlNode *top) : YamlNode(SEQUENCE, top) {} ~SequenceNode() {} @@ -125,13 +129,13 @@ class MappingNode : public YamlNode { public: - MappingNode() : YamlNode(MAPPING) {} + MappingNode(YamlNode *top) : YamlNode(MAPPING, top) {} ~MappingNode() {} Mapping *getMapping() { return ↦ } - void setKeyValue(Key key, YamlNode *value); + void setKeyValue(Key key, YamlNode *value); void removeKeyValue(Key key); @@ -148,7 +152,7 @@ class ScalarNode : public YamlNode { public: - ScalarNode(Value v="") : YamlNode(SCALAR), val(v) {} + ScalarNode(Value v="", YamlNode *top=NULL) : YamlNode(SCALAR, top), val(v) {} ~ScalarNode() {} diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index a603293708..7090bea7ae 100755 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -177,11 +177,14 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) } -void YamlParser::composeEvents() { +YamlDocument *YamlParser::composeEvents() { if(eventNumber == 0) throw YamlParserException("No event available"); + doc = NULL; + topNode = NULL; + for (int i = 0; i < eventNumber;) { switch(events[i].type) { @@ -191,44 +194,209 @@ void YamlParser::composeEvents() { case YAML_STREAM_END_EVENT: _debug("YAML_STREAM_END_EVENT"); break; - case YAML_DOCUMENT_START_EVENT: + case YAML_DOCUMENT_START_EVENT: { _debug("YAML_DOCUMENT_START_EVENT"); + // startDocument(); break; - case YAML_DOCUMENT_END_EVENT: + } + case YAML_DOCUMENT_END_EVENT: { _debug("YAML_DOCUMENT_END_EVENT"); + // topNode = NULL; break; + } case YAML_ALIAS_EVENT: _debug("YAML_ALIAS_EVENT"); break; - case YAML_SCALAR_EVENT: { + case YAML_SCALAR_EVENT: { _debug("YAML_SCALAR_EVENT: anchor %s, tag %s, value %s", events[i].data.scalar.anchor, events[i].data.scalar.tag, events[i].data.scalar.value); char buffer[1000]; snprintf(buffer, 1000, "%s", events[i].data.scalar.value); - _debug("----------------------------- THE BUFFER: %s", buffer); - ScalarNode *sclr = new ScalarNode(buffer); - _debug("----------------------------- THE VALUE: %s", (sclr->getValue()).c_str()); - // ScalarNode *sclr = new ScalarNode("ok"); - } + composeScalarEvent(topNode, buffer); break; - case YAML_SEQUENCE_START_EVENT: + } + case YAML_SEQUENCE_START_EVENT: { _debug("YAML_SEQUENCE_START_EVENT: anchor %s, tag %s", events[i].data.sequence_start.anchor, events[i].data.sequence_start.tag); + // startSequence(); break; - case YAML_SEQUENCE_END_EVENT: + } + case YAML_SEQUENCE_END_EVENT: { _debug("YAML_SEQUENCE_END_EVENT"); + // endSequence(); break; - case YAML_MAPPING_START_EVENT: + } + case YAML_MAPPING_START_EVENT: { _debug("YAML_MAPPING_START_EVENT: anchor %s, tag %s", events[i].data.mapping_start.anchor, events[i].data.sequence_start.tag); + + Key mapkey; + YamlNode *mapvalue; + + MappingNode *map = new MappingNode(topNode); + + if(events[i+1].type == YAML_SCALAR_EVENT) { + char buffer[1000]; + snprintf(buffer, 1000, "%s", events[i+1].data.scalar.value); + mapkey = Key(buffer); + i++; + } + else + throw YamlParserException("Mapping event not followed by scalar"); + + if(events[i+1].type == YAML_SCALAR_EVENT) { + char buffer[1000]; + snprintf(buffer, 1000, "%s", events[i+1].data.scalar.value); + ScalarNode *sclr = new ScalarNode(buffer, topNode); + mapvalue = (YamlNode *)sclr; + composeMappingEvent(map, mapkey, mapvalue); + } + else if(events[i+1].type == YAML_SEQUENCE_START_EVENT) { + SequenceNode *seq = new SequenceNode(topNode); + mapvalue = (YamlNode *)seq; + composeMappingEvent(map, mapkey, mapvalue); + topNode = (YamlNode *)seq; + } + else + throw YamlParserException("Not acceptable value for mapping"); + break; - case YAML_MAPPING_END_EVENT: + } + case YAML_MAPPING_END_EVENT: { _debug("YAML_MAPPING_END_EVENT"); + // endMapping(); break; + } default: throw YamlParserException("Unknown Event"); } i++; } + + return doc; +} + + +void YamlParser::startDocument() +{ + doc = new YamlDocument(); + + if(!doc) + throw YamlParserException("Not able to create new document"); + + topNode = (YamlNode *)(doc); +} + +void YamlParser::endDocument() +{ + if(!doc || !topNode) + throw YamlParserException("No document to end"); + + if(topNode->getType() != DOCUMENT) + throw YamlParserException("Top node is not a document"); + + topNode = NULL; +} + +void YamlParser::startSequence() +{ + if(!topNode) + throw YamlParserException("No container for sequence"); + + SequenceNode *seq = new SequenceNode(topNode); + + composeSequence(); + topNode = (YamlNode *)seq; +} + +void YamlParser::endSequence() +{ + if(!topNode) + throw YamlParserException("No sequence to stop"); + + if(topNode->getType() != SEQUENCE) + throw YamlParserException("Top node is not a sequence"); + + + topNode = topNode->getTopNode(); +} + +void YamlParser::endMapping() { + + if(!topNode) + throw YamlParserException("No mapping to stop"); + + if(topNode->getType() != MAPPING) + throw YamlParserException("Top node is not a mapping"); + + topNode = topNode->getTopNode(); + +} + +void YamlParser::composeScalarEvent(YamlNode *topNode, char *data) +{ + if(!topNode) + throw YamlParserException("No container for scalar"); + + ScalarNode *sclr = new ScalarNode(data, topNode); + + switch(topNode->getType()) { + case DOCUMENT: + ((YamlDocument *)(topNode))->addNode(sclr); + break; + case SEQUENCE: + ((SequenceNode *)(topNode))->addNode(sclr); + break; + case SCALAR: + case MAPPING: + default: + break; + } + +} + + +void YamlParser::composeMappingEvent(MappingNode *map, Key key, YamlNode *val) +{ + YamlNode *topNode = map->getTopNode(); + + if(!topNode) + throw YamlParserException("No container for mapping"); + + map->setKeyValue(key, val); + + switch(topNode->getType()) { + case DOCUMENT: + ((YamlDocument *)(topNode))->addNode(map); + break; + case SEQUENCE: + ((SequenceNode *)(topNode))->addNode(map); + break; + case SCALAR: + case MAPPING: + default: + break; + } + } +void YamlParser::composeSequenceEvent(YamlNode *topNode, YamlNode *node) +{ + + if(!topNode) + throw YamlParserException("No container for sequence"); + + switch(topNode->getType()) { + case DOCUMENT: + ((YamlDocument *)(topNode))->addNode(node); + break; + case SEQUENCE: + ((SequenceNode *)(topNode))->addNode(node); + break; + case SCALAR: + case MAPPING: + default: + break; + } + +} } diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h index 73cc66331a..35c18fb8db 100755 --- a/sflphone-common/src/config/yamlparser.h +++ b/sflphone-common/src/config/yamlparser.h @@ -31,6 +31,7 @@ #ifndef __YAMLPARSER_H__ #define __YAMLPARSER_H__ +#include "yamlnode.h" #include <yaml.h> #include <stdio.h> #include <exception> @@ -73,7 +74,7 @@ class YamlParser { void serializeEvents(); - void composeEvents(); + YamlDocument *composeEvents(); private: @@ -82,6 +83,22 @@ class YamlParser { */ int copyEvent(yaml_event_t *event_to, yaml_event_t *event_from); + void startDocument(void); + + void endDocument(void); + + void startSequence(void); + + void endSequence(void); + + void endMapping(void); + + void composeScalarEvent(YamlNode *topNode, char *data); + + void composeMappingEvent(MappingNode *map, Key key, YamlNode *node); + + void composeSequenceEvent(YamlNode *topNode, YamlNode *node); + std::string filename; FILE *fd; @@ -106,6 +123,10 @@ class YamlParser { */ int eventNumber; + YamlNode *topNode; + + YamlDocument *doc; + }; } diff --git a/sflphone-common/test/configurationtest.cpp b/sflphone-common/test/configurationtest.cpp index 488318271c..68c0356aed 100755 --- a/sflphone-common/test/configurationtest.cpp +++ b/sflphone-common/test/configurationtest.cpp @@ -157,30 +157,16 @@ void ConfigurationTest::testYamlParser() Conf::YamlParser *parser; try { - parser = new Conf::YamlParser("sequence.yml"); - } - catch (Conf::YamlParserException &e) { - _error("ConfigTree: %s", e.what()); - } - - try { + parser = new Conf::YamlParser("sequence.yml"); + parser->serializeEvents(); - } - catch(Conf::YamlParserException &e) { - _error("ConfigTree: %s", e.what()); - } - try { parser->composeEvents(); - } - catch(Conf::YamlParserException &e) { - _error("ConfigTree: %s", e.what()); - } - - try { + delete parser; parser = NULL; + } catch (Conf::YamlParserException &e) { _error("ConfigTree: %s", e.what()); @@ -192,7 +178,10 @@ void ConfigurationTest::testYamlParser() void ConfigurationTest::testYamlComposition() { - Conf::SequenceNode *seq = new Conf::SequenceNode(); + /* + Conf::YamlDocument *doc = new Conf::YamlDocument(); + + Conf::SequenceNode *seq = new Conf::SequenceNode(doc); Conf::MappingNode *map = new Conf::MappingNode(); Conf::ScalarNode *sclr = new Conf::ScalarNode(); @@ -217,7 +206,7 @@ void ConfigurationTest::testYamlComposition() delete seq; delete map; delete sclr; + */ - } -- GitLab From c8164af5bce8825b232e3b3be351fd4ec425fb60 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 2 Jul 2010 19:45:32 -0400 Subject: [PATCH 119/197] [#3648] cleanup yaml parser --- sflphone-common/src/config/yamlnode.cpp | 6 + sflphone-common/src/config/yamlnode.h | 6 + sflphone-common/src/config/yamlparser.cpp | 197 +++++++++++++-------- sflphone-common/src/config/yamlparser.h | 20 +-- sflphone-common/test/configurationtest.cpp | 2 +- sflphone-common/test/sequence.yml | 22 +++ sflphone-common/test/sequence2.yml | 117 ++++++++++++ 7 files changed, 279 insertions(+), 91 deletions(-) create mode 100755 sflphone-common/test/sequence.yml create mode 100644 sflphone-common/test/sequence2.yml diff --git a/sflphone-common/src/config/yamlnode.cpp b/sflphone-common/src/config/yamlnode.cpp index ebfb8f245c..51c4c97ee3 100755 --- a/sflphone-common/src/config/yamlnode.cpp +++ b/sflphone-common/src/config/yamlnode.cpp @@ -50,6 +50,12 @@ YamlNode *YamlDocument::popNode() return node; } +void MappingNode::addNode(YamlNode *node) +{ + Mapping::iterator it = map.end(); + map.insert(it, std::pair<Key, YamlNode *>(tmpKey, node)); +} + void MappingNode::setKeyValue(Key key, YamlNode *value) { Mapping::iterator it = map.end(); diff --git a/sflphone-common/src/config/yamlnode.h b/sflphone-common/src/config/yamlnode.h index 934b82faec..4b8ae443ac 100755 --- a/sflphone-common/src/config/yamlnode.h +++ b/sflphone-common/src/config/yamlnode.h @@ -135,6 +135,10 @@ class MappingNode : public YamlNode { Mapping *getMapping() { return ↦ } + void addNode(YamlNode *node); + + void setTmpKey(Key key) { tmpKey = key; } + void setKeyValue(Key key, YamlNode *value); void removeKeyValue(Key key); @@ -145,6 +149,8 @@ class MappingNode : public YamlNode { Mapping map; + Key tmpKey; + }; diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index 7090bea7ae..ba0f0d24bc 100755 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -182,24 +182,18 @@ YamlDocument *YamlParser::composeEvents() { if(eventNumber == 0) throw YamlParserException("No event available"); - doc = NULL; - topNode = NULL; + if(events[0].type != YAML_STREAM_START_EVENT) + throw YamlParserException("Parsing does not start with stream start"); + eventIndex = 0; + + processStream(); + + /* for (int i = 0; i < eventNumber;) { switch(events[i].type) { - case YAML_STREAM_START_EVENT: - _debug("YAML_STREAM_START_EVENT"); - break; - case YAML_STREAM_END_EVENT: - _debug("YAML_STREAM_END_EVENT"); - break; - case YAML_DOCUMENT_START_EVENT: { - _debug("YAML_DOCUMENT_START_EVENT"); - // startDocument(); - break; - } - case YAML_DOCUMENT_END_EVENT: { + _debug("YAML_DOCUMENT_END_EVENT"); // topNode = NULL; break; @@ -209,9 +203,11 @@ YamlDocument *YamlParser::composeEvents() { break; case YAML_SCALAR_EVENT: { _debug("YAML_SCALAR_EVENT: anchor %s, tag %s, value %s", events[i].data.scalar.anchor, events[i].data.scalar.tag, events[i].data.scalar.value); + char buffer[1000]; snprintf(buffer, 1000, "%s", events[i].data.scalar.value); composeScalarEvent(topNode, buffer); + break; } case YAML_SEQUENCE_START_EVENT: { @@ -226,7 +222,7 @@ YamlDocument *YamlParser::composeEvents() { } case YAML_MAPPING_START_EVENT: { _debug("YAML_MAPPING_START_EVENT: anchor %s, tag %s", events[i].data.mapping_start.anchor, events[i].data.sequence_start.tag); - + Key mapkey; YamlNode *mapvalue; @@ -256,7 +252,7 @@ YamlDocument *YamlParser::composeEvents() { } else throw YamlParserException("Not acceptable value for mapping"); - + break; } case YAML_MAPPING_END_EVENT: { @@ -270,73 +266,67 @@ YamlDocument *YamlParser::composeEvents() { i++; } - + */ return doc; } +void YamlParser::processStream () { -void YamlParser::startDocument() -{ - doc = new YamlDocument(); + while((eventIndex < eventNumber) && (events[eventIndex].type != YAML_STREAM_END_EVENT)) { - if(!doc) - throw YamlParserException("Not able to create new document"); - - topNode = (YamlNode *)(doc); -} - -void YamlParser::endDocument() -{ - if(!doc || !topNode) - throw YamlParserException("No document to end"); + if(events[eventIndex].type == YAML_DOCUMENT_START_EVENT) + processDocument(); - if(topNode->getType() != DOCUMENT) - throw YamlParserException("Top node is not a document"); + eventIndex++; + } - topNode = NULL; + if(events[eventIndex].type != YAML_STREAM_END_EVENT) + throw YamlParserException("Did not found end of stream"); } -void YamlParser::startSequence() -{ - if(!topNode) - throw YamlParserException("No container for sequence"); - SequenceNode *seq = new SequenceNode(topNode); - - composeSequence(); - topNode = (YamlNode *)seq; -} - -void YamlParser::endSequence() +void YamlParser::processDocument() { - if(!topNode) - throw YamlParserException("No sequence to stop"); - - if(topNode->getType() != SEQUENCE) - throw YamlParserException("Top node is not a sequence"); - - - topNode = topNode->getTopNode(); -} + doc = new YamlDocument(); -void YamlParser::endMapping() { + if(!doc) + throw YamlParserException("Not able to create new document"); - if(!topNode) - throw YamlParserException("No mapping to stop"); + while((eventIndex < eventNumber) && (events[eventIndex].type != YAML_DOCUMENT_END_EVENT)) { - if(topNode->getType() != MAPPING) - throw YamlParserException("Top node is not a mapping"); + switch(events[eventIndex].type){ + case YAML_SCALAR_EVENT: + processScalar((YamlNode *)doc); + break; + case YAML_SEQUENCE_START_EVENT: + processSequence((YamlNode *)doc); + break; + case YAML_MAPPING_START_EVENT: + processMapping((YamlNode *)doc); + break; + default: + break; + } - topNode = topNode->getTopNode(); + eventIndex++; + } + if(events[eventIndex].type != YAML_DOCUMENT_END_EVENT) + throw YamlParserException("Did not found end of document"); + } -void YamlParser::composeScalarEvent(YamlNode *topNode, char *data) + +void YamlParser::processScalar(YamlNode *topNode) { + if(!topNode) throw YamlParserException("No container for scalar"); - ScalarNode *sclr = new ScalarNode(data, topNode); + char buffer[1000]; + snprintf(buffer, 1000, "%s", events[eventIndex].data.scalar.value); + + ScalarNode *sclr = new ScalarNode(buffer, topNode); switch(topNode->getType()) { case DOCUMENT: @@ -345,58 +335,111 @@ void YamlParser::composeScalarEvent(YamlNode *topNode, char *data) case SEQUENCE: ((SequenceNode *)(topNode))->addNode(sclr); break; - case SCALAR: case MAPPING: + ((MappingNode *)(topNode))->addNode(sclr); + case SCALAR: default: break; } - } -void YamlParser::composeMappingEvent(MappingNode *map, Key key, YamlNode *val) +void YamlParser::processSequence(YamlNode *topNode) { - YamlNode *topNode = map->getTopNode(); - if(!topNode) - throw YamlParserException("No container for mapping"); + throw YamlParserException("No container for sequence"); - map->setKeyValue(key, val); + SequenceNode *seq = new SequenceNode(topNode); switch(topNode->getType()) { case DOCUMENT: - ((YamlDocument *)(topNode))->addNode(map); + ((YamlDocument *)(topNode))->addNode(seq); break; case SEQUENCE: - ((SequenceNode *)(topNode))->addNode(map); + ((SequenceNode *)(topNode))->addNode(seq); break; - case SCALAR: case MAPPING: + ((MappingNode *)(topNode))->addNode(seq); + case SCALAR: default: break; } + while((eventIndex < eventNumber) < (events[eventIndex].type != YAML_SEQUENCE_END_EVENT)) { + + switch(events[eventIndex].type){ + case YAML_SCALAR_EVENT: + processScalar(seq); + break; + case YAML_SEQUENCE_START_EVENT: + processSequence(seq); + break; + case YAML_MAPPING_START_EVENT: + processMapping(seq); + break; + default: + break; + } + + eventIndex++; + } + + if(events[eventIndex].type != YAML_SEQUENCE_END_EVENT) + throw YamlParserException("Did not found end of sequence"); } -void YamlParser::composeSequenceEvent(YamlNode *topNode, YamlNode *node) -{ +void YamlParser::processMapping(YamlNode *topNode) +{ if(!topNode) - throw YamlParserException("No container for sequence"); + throw YamlParserException("No container for mapping"); + + MappingNode *map = new MappingNode(topNode); switch(topNode->getType()) { case DOCUMENT: - ((YamlDocument *)(topNode))->addNode(node); + ((YamlDocument *)(topNode))->addNode(map); break; case SEQUENCE: - ((SequenceNode *)(topNode))->addNode(node); + ((SequenceNode *)(topNode))->addNode(map); break; - case SCALAR: case MAPPING: + ((MappingNode *)(topNode))->addNode(map); + case SCALAR: default: break; } + while((eventIndex < eventNumber) < (events[eventIndex].type != YAML_MAPPING_END_EVENT)) { + + if(events[eventIndex].type != YAML_SCALAR_EVENT) + throw YamlParserException("Mapping not followed by a key"); + + char buffer[1000]; + snprintf(buffer, 1000, "%s", events[eventIndex].data.scalar.value); + map->setTmpKey(Key(buffer)); + + eventIndex++; + + switch(events[eventIndex].type){ + case YAML_SCALAR_EVENT: + processScalar(map); + break; + case YAML_SEQUENCE_START_EVENT: + processSequence(map); + break; + case YAML_MAPPING_START_EVENT: + processMapping(map); + break; + default: + break; + } + + eventIndex++; + } + + if(events[eventIndex].type != YAML_MAPPING_END_EVENT) + throw YamlParserException("Did not found end of mapping"); } } diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h index 35c18fb8db..701dc46b47 100755 --- a/sflphone-common/src/config/yamlparser.h +++ b/sflphone-common/src/config/yamlparser.h @@ -83,21 +83,15 @@ class YamlParser { */ int copyEvent(yaml_event_t *event_to, yaml_event_t *event_from); - void startDocument(void); + void processStream(void); - void endDocument(void); + void processDocument(void); - void startSequence(void); + void processScalar(YamlNode *topNode); - void endSequence(void); + void processSequence(YamlNode *topNode); - void endMapping(void); - - void composeScalarEvent(YamlNode *topNode, char *data); - - void composeMappingEvent(MappingNode *map, Key key, YamlNode *node); - - void composeSequenceEvent(YamlNode *topNode, YamlNode *node); + void processMapping(YamlNode *topNode); std::string filename; @@ -123,10 +117,10 @@ class YamlParser { */ int eventNumber; - YamlNode *topNode; - YamlDocument *doc; + int eventIndex; + }; } diff --git a/sflphone-common/test/configurationtest.cpp b/sflphone-common/test/configurationtest.cpp index 68c0356aed..03ab6c2de3 100755 --- a/sflphone-common/test/configurationtest.cpp +++ b/sflphone-common/test/configurationtest.cpp @@ -158,7 +158,7 @@ void ConfigurationTest::testYamlParser() Conf::YamlParser *parser; try { - parser = new Conf::YamlParser("sequence.yml"); + parser = new Conf::YamlParser("sequence2.yml"); parser->serializeEvents(); diff --git a/sflphone-common/test/sequence.yml b/sflphone-common/test/sequence.yml new file mode 100755 index 0000000000..9cb54dd636 --- /dev/null +++ b/sflphone-common/test/sequence.yml @@ -0,0 +1,22 @@ +accounts: + - id: 1234 + alias: sfl-181 + username: 181 + password: sfl-181pw + hostname: sflphone.org + enable: true + type: sip + + - id: 2345 + alias: sfl-431 + username: 431 + password: alexandre + hostname: 192.168.50.3 + enable: true + type: sip + + + + + + diff --git a/sflphone-common/test/sequence2.yml b/sflphone-common/test/sequence2.yml new file mode 100644 index 0000000000..c63756336f --- /dev/null +++ b/sflphone-common/test/sequence2.yml @@ -0,0 +1,117 @@ +accounts: + - id: 1234 + alias: sfl-181 + username: 181 + password: sfl-181pw + hostname: sflphone.org + enable: true + type: sip + + - id: 2345 + alias: sfl-431 + username: 431 + password: alexandre + hostname: 192.168.50.3 + enable: true + type: sip + expire: 3600 + interface: lo + port: 5065 + mailbox: 97 + publishaddr: 127.0.0.1 + publishport: 5065 + sameaslocal: true + resolveonce: false + codecs: 0/9/110/111/112/ + credential: + count: 0 + srtp: + enable: true + keyexchange: sdes + rtpfallback: true + zrtp: + displaySas: true + displaySasOnce: false + helloHashEnabled: true + notSuppWarning: true + tls: + certificate: /home/msavard/Development/sflphone/sflphone-client-gnome/config.guess + calist: /home/msavard/Development/sflphone/sflphone-client-gnome/aclocal.m4 + ciphers: + enable: true + method: TLSv1 + timeout: 0 + password: + privatekey: /home/msavard/Development/sflphone/sflphone-client-gnome/config.log + requirecertif: true + server: + verifyclient: true + verifyserver: true + +addressbook: + photo: false + enabled: true + list: 1243608768.30329.0@emilou-desktop/1243456917.15690.23@emilou-desktop/ + max_results: 25 + business: true + home: false + mobile: false + +audio: + alsa: + cardin: 0 + cardout: 0 + cardout: 0 + framesize: 20 + plugin: default + smplrate: 44100 + pulse: + devicePlayback: + deviceRecord: + deviceRingtone: + recordpath: /home/msavard/Bureau + ringchoice: /usr/share/sflphone/ringtones/konga.ul + volumemic: 100 + volumespkr: 100 + +hooks: + iax2Enabled: false + numberAddPrefix: false + numberEnabled: false + sipEnabled: false + urlCommand: x-www-browser + urlSipField: X-sflphone-url + +preferences: + order: 1234/2345 + audioapi: 0 + dialpaddisplay: 0 + historyenabled: 1 + historylimit: 30 + historymaxCalls: 20 + notifyall: true + notifymails: false + zoneToneChoice: North America + registrationexpire: 180 + ringtonesenable: true + portnum: 5060 + searchbardisplay: true + starthidden: 0 + volumedisplay: 0 + windowheight: 332 + windowpopup: 0 + windowposition: 0 + windowposition: 24 + windowwidth: 240 + zeroconfenable: false + md5Hash: false + +voiplink: + playDtmf: true + playTones: true + pulseLength: 250 + sendDTMFas: 0 + stunenable: 0 + stunserver: stun.sflphone.org + symmetric: true + zidFile: sfl.zid \ No newline at end of file -- GitLab From 532b35b1430d0da6c4273f89974d58ba4a7049db Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 5 Jul 2010 12:54:17 -0400 Subject: [PATCH 120/197] [#3649] Implement unserialize method for accounts --- sflphone-common/src/account.h | 19 +- sflphone-common/src/config/config.cpp | 33 --- sflphone-common/src/config/serializable.h | 12 +- sflphone-common/src/config/yamlnode.h | 4 +- sflphone-common/src/config/yamlparser.cpp | 250 +++++++++++------- sflphone-common/src/config/yamlparser.h | 10 + sflphone-common/src/iax/iaxaccount.cpp | 10 + sflphone-common/src/iax/iaxaccount.h | 4 + sflphone-common/src/managerimpl.cpp | 66 +++++ sflphone-common/src/managerimpl.h | 4 + .../src/managerimpl_registration.cpp | 4 +- sflphone-common/src/sip/sipaccount.cpp | 112 +++++++- sflphone-common/src/sip/sipaccount.h | 88 +++++- sflphone-common/test/configurationtest.cpp | 2 + 14 files changed, 483 insertions(+), 135 deletions(-) mode change 100644 => 100755 sflphone-common/src/managerimpl.cpp mode change 100644 => 100755 sflphone-common/src/managerimpl.h diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h index 80bfbd36ba..cec37565b1 100644 --- a/sflphone-common/src/account.h +++ b/sflphone-common/src/account.h @@ -37,6 +37,7 @@ #include "config/config.h" #include "voiplink.h" +#include "config/serializable.h" class VoIPLink; @@ -131,7 +132,19 @@ typedef enum RegistrationState { #define REGISTRATION_STATE_DESCRIPTION "Registration.description" -class Account{ +// General configuration keys for accounts +const Conf::Key aliasKey("alias"); +const Conf::Key typeKey("type"); +const Conf::Key idKey("id"); +const Conf::Key usernameKey("username"); +const Conf::Key passwordKey("password"); +const Conf::Key hostnameKey("hostname"); +const Conf::Key accountEnableKey("enable"); +const Conf::Key mailboxKey("mailbox"); + +const Conf::Key codecsKey("codecs"); // 0/9/110/111/112/ + +class Account : public Serializable{ public: @@ -142,6 +155,10 @@ class Account{ */ virtual ~Account(); + virtual void serialize(Engine *engine) = 0; + + virtual void unserialize(Conf::MappingNode *map) = 0; + /** * Load the settings for this account. */ diff --git a/sflphone-common/src/config/config.cpp b/sflphone-common/src/config/config.cpp index 0c937b6f94..9f735964de 100755 --- a/sflphone-common/src/config/config.cpp +++ b/sflphone-common/src/config/config.cpp @@ -46,45 +46,12 @@ namespace Conf // ctor ConfigTree::ConfigTree() :_sections() { - /* - YamlParser *parser; - try { - parser = new YamlParser("sequence.yml"); - } - catch (YamlParserException &e) { - _error("ConfigTree: %s", e.what()); - } - - - try { - parser->serializeEvents(); - } - catch(YamlParserException &e) { - _error("ConfigTree: %s", e.what()); - - } - try { - parser->composeEvents(); - } - catch(YamlParserException &e) { - _error("ConfigTree: %s", e.what()); - } - - try { - delete parser; - parser = NULL; - } - catch (YamlParserException &e) { - _error("ConfigTree: %s", e.what()); - } - */ } // dtor ConfigTree::~ConfigTree() { - // erase every new ItemMap (by CreateSection) SectionMap::iterator iter = _sections.begin(); diff --git a/sflphone-common/src/config/serializable.h b/sflphone-common/src/config/serializable.h index 781b3a45be..7b7cf657a4 100755 --- a/sflphone-common/src/config/serializable.h +++ b/sflphone-common/src/config/serializable.h @@ -32,18 +32,22 @@ #define __SERIALIZABLE_H__ +#include "yamlparser.h" +#include "yamlnode.h" + class Engine; +// class MappingNode; class Serializable { public: - Serializable(); - - ~Serializable(); + virtual void serialize(Engine *engine) = 0; - virtual void Serialize(Engine *engine) = 0; + virtual void unserialize(Conf::MappingNode *map) = 0; private: }; + +#endif diff --git a/sflphone-common/src/config/yamlnode.h b/sflphone-common/src/config/yamlnode.h index 4b8ae443ac..e341b35503 100755 --- a/sflphone-common/src/config/yamlnode.h +++ b/sflphone-common/src/config/yamlnode.h @@ -98,7 +98,9 @@ class YamlDocument : YamlNode { void addNode(YamlNode *node); - YamlNode *popNode(); + YamlNode *popNode(void); + + Sequence *getSequence(void) { return &doc; } private: diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index ba0f0d24bc..d68c1febcf 100755 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -103,18 +103,18 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) switch (event_from->type) { case YAML_STREAM_START_EVENT: { - // _debug("YAML_STREAM_START_EVENT"); + _debug("YAML_STREAM_START_EVENT"); return yaml_stream_start_event_initialize(event_to, event_from->data.stream_start.encoding); } case YAML_STREAM_END_EVENT: { - // _debug("YAML_STREAM_END_EVENT"); + _debug("YAML_STREAM_END_EVENT"); return yaml_stream_end_event_initialize(event_to); } case YAML_DOCUMENT_START_EVENT: { - // _debug("YAML_DOCUMENT_START_EVENT"); + _debug("YAML_DOCUMENT_START_EVENT"); return yaml_document_start_event_initialize(event_to, event_from->data.document_start.version_directive, event_from->data.document_start.tag_directives.start, @@ -123,17 +123,17 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) } case YAML_DOCUMENT_END_EVENT: { - // _debug("YAML_DOCUMENT_END_EVENT"); + _debug("YAML_DOCUMENT_END_EVENT"); return yaml_document_end_event_initialize(event_to, event_from->data.document_end.implicit); } case YAML_ALIAS_EVENT:{ - // _debug("YAML_ALIAS_EVENT"); + _debug("YAML_ALIAS_EVENT"); return yaml_alias_event_initialize(event_to, event_from->data.alias.anchor); } case YAML_SCALAR_EVENT: { - // _debug("YAML_SCALAR_EVENT"); + _debug("YAML_SCALAR_EVENT"); return yaml_scalar_event_initialize(event_to, event_from->data.scalar.anchor, event_from->data.scalar.tag, @@ -144,7 +144,7 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) event_from->data.scalar.style); } case YAML_SEQUENCE_START_EVENT: { - // _debug("YAML_SEQUENCE_START_EVENT"); + _debug("YAML_SEQUENCE_START_EVENT"); return yaml_sequence_start_event_initialize(event_to, event_from->data.sequence_start.anchor, event_from->data.sequence_start.tag, @@ -152,11 +152,11 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) event_from->data.sequence_start.style); } case YAML_SEQUENCE_END_EVENT: { - // _debug("YAML_SEQUENCE_END_EVENT"); + _debug("YAML_SEQUENCE_END_EVENT"); return yaml_sequence_end_event_initialize(event_to); } case YAML_MAPPING_START_EVENT: { - // _debug("YAML_MAPPING_START_EVENT"); + _debug("YAML_MAPPING_START_EVENT"); return yaml_mapping_start_event_initialize(event_to, event_from->data.mapping_start.anchor, event_from->data.mapping_start.tag, @@ -164,7 +164,7 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) event_from->data.mapping_start.style); } case YAML_MAPPING_END_EVENT: { - // _debug("YAML_MAPPING_END_EVENT"); + _debug("YAML_MAPPING_END_EVENT"); return yaml_mapping_end_event_initialize(event_to); } @@ -179,6 +179,8 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) YamlDocument *YamlParser::composeEvents() { + _debug("Compose Events"); + if(eventNumber == 0) throw YamlParserException("No event available"); @@ -189,89 +191,13 @@ YamlDocument *YamlParser::composeEvents() { processStream(); - /* - for (int i = 0; i < eventNumber;) { - - switch(events[i].type) { - - _debug("YAML_DOCUMENT_END_EVENT"); - // topNode = NULL; - break; - } - case YAML_ALIAS_EVENT: - _debug("YAML_ALIAS_EVENT"); - break; - case YAML_SCALAR_EVENT: { - _debug("YAML_SCALAR_EVENT: anchor %s, tag %s, value %s", events[i].data.scalar.anchor, events[i].data.scalar.tag, events[i].data.scalar.value); - - char buffer[1000]; - snprintf(buffer, 1000, "%s", events[i].data.scalar.value); - composeScalarEvent(topNode, buffer); - - break; - } - case YAML_SEQUENCE_START_EVENT: { - _debug("YAML_SEQUENCE_START_EVENT: anchor %s, tag %s", events[i].data.sequence_start.anchor, events[i].data.sequence_start.tag); - // startSequence(); - break; - } - case YAML_SEQUENCE_END_EVENT: { - _debug("YAML_SEQUENCE_END_EVENT"); - // endSequence(); - break; - } - case YAML_MAPPING_START_EVENT: { - _debug("YAML_MAPPING_START_EVENT: anchor %s, tag %s", events[i].data.mapping_start.anchor, events[i].data.sequence_start.tag); - - Key mapkey; - YamlNode *mapvalue; - - MappingNode *map = new MappingNode(topNode); - - if(events[i+1].type == YAML_SCALAR_EVENT) { - char buffer[1000]; - snprintf(buffer, 1000, "%s", events[i+1].data.scalar.value); - mapkey = Key(buffer); - i++; - } - else - throw YamlParserException("Mapping event not followed by scalar"); - - if(events[i+1].type == YAML_SCALAR_EVENT) { - char buffer[1000]; - snprintf(buffer, 1000, "%s", events[i+1].data.scalar.value); - ScalarNode *sclr = new ScalarNode(buffer, topNode); - mapvalue = (YamlNode *)sclr; - composeMappingEvent(map, mapkey, mapvalue); - } - else if(events[i+1].type == YAML_SEQUENCE_START_EVENT) { - SequenceNode *seq = new SequenceNode(topNode); - mapvalue = (YamlNode *)seq; - composeMappingEvent(map, mapkey, mapvalue); - topNode = (YamlNode *)seq; - } - else - throw YamlParserException("Not acceptable value for mapping"); - - break; - } - case YAML_MAPPING_END_EVENT: { - _debug("YAML_MAPPING_END_EVENT"); - // endMapping(); - break; - } - default: - throw YamlParserException("Unknown Event"); - } - - i++; - } - */ return doc; } void YamlParser::processStream () { + _debug("ProcessStream"); + while((eventIndex < eventNumber) && (events[eventIndex].type != YAML_STREAM_END_EVENT)) { if(events[eventIndex].type == YAML_DOCUMENT_START_EVENT) @@ -287,6 +213,8 @@ void YamlParser::processStream () { void YamlParser::processDocument() { + _debug("ProcessDocument"); + doc = new YamlDocument(); if(!doc) @@ -320,6 +248,8 @@ void YamlParser::processDocument() void YamlParser::processScalar(YamlNode *topNode) { + _debug("ProcessScalar"); + if(!topNode) throw YamlParserException("No container for scalar"); @@ -346,6 +276,8 @@ void YamlParser::processScalar(YamlNode *topNode) void YamlParser::processSequence(YamlNode *topNode) { + _debug("ProcessSequence"); + if(!topNode) throw YamlParserException("No container for sequence"); @@ -365,7 +297,9 @@ void YamlParser::processSequence(YamlNode *topNode) break; } - while((eventIndex < eventNumber) < (events[eventIndex].type != YAML_SEQUENCE_END_EVENT)) { + eventIndex++; + + while((eventIndex < eventNumber) && (events[eventIndex].type != YAML_SEQUENCE_END_EVENT)) { switch(events[eventIndex].type){ case YAML_SCALAR_EVENT: @@ -391,6 +325,8 @@ void YamlParser::processSequence(YamlNode *topNode) void YamlParser::processMapping(YamlNode *topNode) { + _debug("ProcessMapping"); + if(!topNode) throw YamlParserException("No container for mapping"); @@ -410,11 +346,13 @@ void YamlParser::processMapping(YamlNode *topNode) break; } - while((eventIndex < eventNumber) < (events[eventIndex].type != YAML_MAPPING_END_EVENT)) { + eventIndex++; + + while((eventIndex < eventNumber) && (events[eventIndex].type != YAML_MAPPING_END_EVENT)) { if(events[eventIndex].type != YAML_SCALAR_EVENT) throw YamlParserException("Mapping not followed by a key"); - + char buffer[1000]; snprintf(buffer, 1000, "%s", events[eventIndex].data.scalar.value); map->setTmpKey(Key(buffer)); @@ -442,4 +380,134 @@ void YamlParser::processMapping(YamlNode *topNode) throw YamlParserException("Did not found end of mapping"); } +void YamlParser::constructNativeData() { + + Sequence *seq; + + seq = doc->getSequence(); + + Sequence::iterator iter = seq->begin(); + + while(iter != seq->end()) { + + switch((*iter)->getType()){ + case SCALAR: + _debug("construct scalar"); + throw YamlParserException("No scalar allowed at document level, expect a mapping"); + break; + case SEQUENCE: + _debug("construct sequence"); + throw YamlParserException("No sequence allowed at document level, expect a mapping"); + break; + case MAPPING: { + _debug("construct mapping"); + MappingNode *map = (MappingNode *)(*iter); + mainNativeDataMapping(map); + break; + } + default: + throw YamlParserException("Unknown type in configuration file, expect a mapping"); + break; + } + iter++; + + } + +} + + +void YamlParser::mainNativeDataMapping(MappingNode *map) { + + + Mapping::iterator iter = map->getMapping()->begin(); + + Key accounts("accounts"); + Key addressbook("addressbook"); + Key audio("audio"); + Key hooks("hooks"); + Key preferences("preferences"); + Key voiplink("voiplink"); + + while(iter != map->getMapping()->end()) { + + _debug("Iterating: %s", iter->first.c_str()); + if(accounts.compare(iter->first) == 0) { + // buildAccounts((SequenceNode *)(iter->second)); + accountSequence = (SequenceNode *)(iter->second); + } + else if(addressbook.compare(iter->first) == 0) + _debug("ok"); + else if(audio.compare(iter->first) == 0) + _debug("ok"); + else if(hooks.compare(iter->first) == 0) + _debug("ok"); + else if(preferences.compare(iter->first) == 0) + _debug("ok"); + else if(voiplink.compare(iter->first) == 0) + _debug("ok"); + else + throw YamlParserException("Unknow map key in configuration"); + + iter++; + } +} + + /* +void YamlParser::buildAccounts(SequenceNode *seq) { + + // Each element in sequence is a new account to create + Sequence::iterator iterSeq = seq->getSequence()->begin(); + + MappingNode *map; + + Key accTypeKey("type"); + while(iterSeq != seq->getSequence()->end()) { + + map = (MappingNode *)(*iterSeq); + + ScalarNode * val = (ScalarNode *)(map->getValue(accTypeKey)); + Value accountType = val->getValue(); + + iterSeq++; + + if (accountType == "sip") { + // tmpAccount = AccountCreator::createAccount(AccountCreator::SIP_ACCOUNT, *iter); + _debug("Account is SIP!!!"); + } + else if (accountType == "iax") { + // tmpAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT, *iter); + } + + /* + std::string accountType; + + accountType = getConfigString(*iter, CONFIG_ACCOUNT_TYPE); + + if (accountType == "SIP") { + tmpAccount = AccountCreator::createAccount( + AccountCreator::SIP_ACCOUNT, *iter); + } + + else if (accountType == "IAX") { + tmpAccount = AccountCreator::createAccount( + AccountCreator::IAX_ACCOUNT, *iter); + } + + else { + _error ("Unknown %s param in config file (%s)", CONFIG_ACCOUNT_TYPE, accountType.c_str()); + } + + if (tmpAccount != NULL) { + _debug ("Loading account %s ", iter->c_str()); + _accountMap[iter->c_str()] = tmpAccount; + // tmpAccount->setVoIPLink(SIPVoIPLink::instance ("")); + tmpAccount->setVoIPLink(); + nbAccount++; + } + + iter++; + */ +// } + +//} } diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h index 701dc46b47..fdc13f1c9a 100755 --- a/sflphone-common/src/config/yamlparser.h +++ b/sflphone-common/src/config/yamlparser.h @@ -76,6 +76,10 @@ class YamlParser { YamlDocument *composeEvents(); + void constructNativeData(); + + SequenceNode *getAccountSequence(void) { return accountSequence; }; + private: /** @@ -93,6 +97,10 @@ class YamlParser { void processMapping(YamlNode *topNode); + void mainNativeDataMapping(MappingNode *map); + + // void buildAccounts(SequenceNode *map); + std::string filename; FILE *fd; @@ -121,6 +129,8 @@ class YamlParser { int eventIndex; + SequenceNode *accountSequence; + }; } diff --git a/sflphone-common/src/iax/iaxaccount.cpp b/sflphone-common/src/iax/iaxaccount.cpp index 2c277cb082..b94ca59623 100644 --- a/sflphone-common/src/iax/iaxaccount.cpp +++ b/sflphone-common/src/iax/iaxaccount.cpp @@ -47,6 +47,16 @@ IAXAccount::~IAXAccount() _link = NULL; } +void IAXAccount::serialize(Engine *engine) +{ + +} + +void IAXAccount::unserialize(Conf::MappingNode *map) +{ + +} + void IAXAccount::setVoIPLink() { diff --git a/sflphone-common/src/iax/iaxaccount.h b/sflphone-common/src/iax/iaxaccount.h index 929f7af38a..f6fb6414e3 100644 --- a/sflphone-common/src/iax/iaxaccount.h +++ b/sflphone-common/src/iax/iaxaccount.h @@ -44,6 +44,10 @@ class IAXAccount : public Account ~IAXAccount(); + virtual void serialize(Engine *engine); + + virtual void unserialize(Conf::MappingNode *map); + void setVoIPLink (); /** diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp old mode 100644 new mode 100755 index da9bbcf51f..6dc7f3dfae --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3964,6 +3964,9 @@ short ManagerImpl::loadAccountMap () { _debug ("Loading account map"); + + buildAccounts(); + short nbAccount = 0; TokenList sections = _config.getSections(); std::string accountType; @@ -4043,6 +4046,69 @@ short ManagerImpl::loadAccountMap () { return nbAccount; } +void ManagerImpl::buildAccounts() { + + Conf::YamlParser *parser; + Account *tmpAccount = 0; + + try { + + parser = new Conf::YamlParser("sequence2.yml"); + + parser->serializeEvents(); + + parser->composeEvents(); + + parser->constructNativeData(); + + } + catch (Conf::YamlParserException &e) { + _error("ConfigTree: %s", e.what()); + } + + Conf::SequenceNode *seq = parser->getAccountSequence(); + + // Each element in sequence is a new account to create + Conf::Sequence::iterator iterSeq = seq->getSequence()->begin(); + + Conf::MappingNode *map; + + Conf::Key accTypeKey("type"); + Conf::Key accID("id"); + while(iterSeq != seq->getSequence()->end()) { + + map = (Conf::MappingNode *)(*iterSeq); + + Conf::ScalarNode * val = (Conf::ScalarNode *)(map->getValue(accTypeKey)); + Conf::Value accountType = val->getValue(); + + val = (Conf::ScalarNode *)(map->getValue(accID)); + Conf::Value accountid = val->getValue(); + + if (accountType == "sip") { + tmpAccount = AccountCreator::createAccount(AccountCreator::SIP_ACCOUNT, accountid); + _debug("Account is SIP!!!"); + } + else if (accountType == "iax") { + tmpAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT, accountid); + } + + tmpAccount->unserialize(map); + + iterSeq++; + } + + try { + delete parser; + } + catch (Conf::YamlParserException &e) { + _error("AccountCreator: %s", e.what()); + } + + parser = NULL; + +} + void ManagerImpl::unloadAccountMap () { AccountMap::iterator iter = _accountMap.begin(); diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h old mode 100644 new mode 100755 index fc457c767d..a5d03170e4 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -55,6 +55,7 @@ #include "audio/codecs/codecDescriptor.h" // CodecDescriptor class contained by value here #include "audio/mainbuffer.h" +#include "yamlparser.h" class AudioLayer; class GuiFramework; @@ -111,6 +112,9 @@ class ManagerImpl { ManagerImpl (void); ~ManagerImpl (void); + + void buildAccounts(); + /** * Initialisation of thread (sound) and map. * Init a new VoIPLink, audio codec and audio driver diff --git a/sflphone-common/src/managerimpl_registration.cpp b/sflphone-common/src/managerimpl_registration.cpp index 552b2eb456..e0605aa936 100644 --- a/sflphone-common/src/managerimpl_registration.cpp +++ b/sflphone-common/src/managerimpl_registration.cpp @@ -58,7 +58,7 @@ ManagerImpl::registerAccounts() bool flag = true; AccountMap::iterator iter; - _debugInit ("Initiate VoIP Links Registration"); + _debugInit ("Manager: Initiate VoIP Links Registration"); iter = _accountMap.begin(); /* Loop on the account map previously loaded */ @@ -98,7 +98,7 @@ ManagerImpl::initRegisterAccounts() bool flag = true; AccountMap::iterator iter; - _debugInit ("Initiate VoIP Links Registration"); + _debugInit ("Manager: Initiate VoIP Links Registration"); iter = _accountMap.begin(); /* Loop on the account map previously loaded */ diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 97318b4792..4c5fbb1ffc 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -35,6 +35,7 @@ #include "user_cfg.h" #include <pwd.h> + SIPAccount::SIPAccount (const AccountID& accountID) : Account (accountID, "sip") , _routeSet("") @@ -56,6 +57,7 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _tlsSetting (NULL) , _dtmfType(OVERRTP) , _displayName ("") + { // IP2IP settings must be loaded before singleton instanciation, cannot call it here... @@ -78,6 +80,112 @@ SIPAccount::~SIPAccount() free (_tlsSetting); } +void SIPAccount::serialize(Engine *engine) { + + +} + + +void SIPAccount::unserialize(Conf::MappingNode *map) +{ + Conf::ScalarNode *val; + Conf::MappingNode *srtpMap; + Conf::MappingNode *tlsMap; + Conf::MappingNode *zrtpMap; + + val = (Conf::ScalarNode *)(map->getValue(aliasKey)); + _alias = val->getValue(); + val = (Conf::ScalarNode *)(map->getValue(typeKey)); + _type = val->getValue(); + val = (Conf::ScalarNode *)(map->getValue(idKey)); + _accountID = val->getValue(); + val = (Conf::ScalarNode *)(map->getValue(usernameKey)); + _username = val->getValue(); + val = (Conf::ScalarNode *)(map->getValue(passwordKey)); + _password = val->getValue(); + val = (Conf::ScalarNode *)(map->getValue(hostnameKey)); + _hostname = val->getValue(); + val = (Conf::ScalarNode *)(map->getValue(accountEnableKey)); + _enabled = val->getValue().compare("true") ? true : false; + // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); + + val = (Conf::ScalarNode *)(map->getValue(codecsKey)); + // _codecOrder = val->getValue(); + + val = (Conf::ScalarNode *)(map->getValue(expireKey)); + _registrationExpire = val->getValue(); + val = (Conf::ScalarNode *)(map->getValue(interfaceKey)); + _interface = val->getValue(); + val = (Conf::ScalarNode *)(map->getValue(portKey)); + _localPort = atoi(val->getValue().data()); + // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); + val = (Conf::ScalarNode *)(map->getValue(publishAddrKey)); + _publishedIpAddress = val->getValue(); + val = (Conf::ScalarNode *)(map->getValue(publishPortKey)); + _publishedPort = atoi(val->getValue().data()); + val = (Conf::ScalarNode *)(map->getValue(sameasLocalKey)); + _publishedSameasLocal = val->getValue().compare("true") ? true : false; + val = (Conf::ScalarNode *)(map->getValue(resolveOnceKey)); + _resolveOnce = val->getValue().compare("true") ? true : false; + val = (Conf::ScalarNode *)(map->getValue(dtmfTypeKey)); + // _dtmfType = atoi(val->getValue(); + + // stun enabled + + // get srtp submap + srtpMap = (Conf::MappingNode *)(map->getValue(srtpKey)); + + val = (Conf::ScalarNode *)(srtpMap->getValue(srtpEnableKey)); + _srtpEnabled = val->getValue().compare("true") ? true : false; + val = (Conf::ScalarNode *)(srtpMap->getValue(keyExchangeKey)); + _srtpKeyExchange = val->getValue(); + val = (Conf::ScalarNode *)(srtpMap->getValue(rtpFallbackKey)); + _srtpFallback = val->getValue().compare("true") ? true : false; + + // get zrtp submap + zrtpMap = (Conf::MappingNode *)(map->getValue(zrtpKey)); + + val = (Conf::ScalarNode *)(zrtpMap->getValue(displaySasKey)); + _zrtpDisplaySas = val->getValue().compare("true") ? true : false; + val = (Conf::ScalarNode *)(zrtpMap->getValue(displaySasOnceKey)); + _zrtpDisplaySasOnce = val->getValue().compare("true") ? true : false; + val = (Conf::ScalarNode *)(zrtpMap->getValue(helloHashEnabledKey)); + _zrtpHelloHash = val->getValue().compare("true") ? true : false; + val = (Conf::ScalarNode *)(zrtpMap->getValue(notSuppWarningKey)); + _zrtpNotSuppWarning = val->getValue().compare("true") ? true : false; + + // get tls submap + tlsMap = (Conf::MappingNode *)(map->getValue(tlsKey)); + + val = (Conf::ScalarNode *)(tlsMap->getValue(tlsEnableKey)); + _tlsEnable = val->getValue(); + val = (Conf::ScalarNode *)(tlsMap->getValue(tlsPortKey)); + _tlsPortStr = val->getValue(); + val = (Conf::ScalarNode *)(tlsMap->getValue(certificateKey)); + _tlsCertificateFile = val->getValue(); + val = (Conf::ScalarNode *)(tlsMap->getValue(calistKey)); + _tlsCaListFile = val->getValue(); + val = (Conf::ScalarNode *)(tlsMap->getValue(ciphersKey)); + _tlsCiphers = val->getValue(); + val = (Conf::ScalarNode *)(tlsMap->getValue(methodKey)); + _tlsMethod = val->getValue(); + val = (Conf::ScalarNode *)(tlsMap->getValue(timeoutKey)); + _tlsNegotiationTimeoutSec = val->getValue(); + _tlsNegotiationTimeoutMsec = val->getValue(); + val = (Conf::ScalarNode *)(tlsMap->getValue(tlsPasswordKey)); + _tlsPassword = val->getValue(); + val = (Conf::ScalarNode *)(tlsMap->getValue(privateKeyKey)); + _tlsPrivateKeyFile = val->getValue(); + val = (Conf::ScalarNode *)(tlsMap->getValue(requireCertifKey)); + _tlsRequireClientCertificate = val->getValue().compare("true") ? true : false; + val = (Conf::ScalarNode *)(tlsMap->getValue(serverKey)); + _tlsServerName = val->getValue(); + val = (Conf::ScalarNode *)(tlsMap->getValue(verifyClientKey)); + _tlsVerifyServer = val->getValue().compare("true") ? true : false; + val = (Conf::ScalarNode *)(tlsMap->getValue(verifyServerKey)); + _tlsVerifyClient = val->getValue().compare("true") ? true : false; +} + // void SIPAccount::setVoIPLink(VoIPLink *link) { void SIPAccount::setVoIPLink() { @@ -184,10 +292,10 @@ int SIPAccount::initCredential (void) int SIPAccount::registerVoIPLink() { - _debug ("Register account %s", getAccountID().c_str()); + _debug ("Account: Register account %s", getAccountID().c_str()); // Init general settings - loadConfig(); + // loadConfig(); if (_hostname.length() >= PJ_MAX_HOSTNAME) { return !SUCCESS; diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 51fb6de0c4..2f923f3a9d 100644 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -41,12 +41,53 @@ #include "sipvoiplink.h" #include "pjsip/sip_transport_tls.h" #include "pjsip/sip_types.h" +#include "config/serializable.h" enum DtmfType { OVERRTP, SIPINFO}; #define OVERRTPSTR "overrtp" #define SIPINFOSTR "sipinfo" + +// SIP specific configuration keys +const Conf::Key expireKey("expire"); +const Conf::Key interfaceKey("interface"); +const Conf::Key portKey("port"); +const Conf::Key publishAddrKey("publishAddr"); +const Conf::Key publishPortKey("publishPort"); +const Conf::Key sameasLocalKey("sameasLocal"); +const Conf::Key resolveOnceKey("resolveOnce"); +const Conf::Key dtmfTypeKey("dtmfType"); + +// TODO: write an object to store credential which implement serializable +const Conf::Key srtpKey("srtp"); +const Conf::Key srtpEnableKey("enable"); +const Conf::Key keyExchangeKey("keyExchange"); +const Conf::Key rtpFallbackKey("rtpFallback"); + +// TODO: wirte an object to store zrtp params wich implement serializable +const Conf::Key zrtpKey("zrtp"); +const Conf::Key displaySasKey("displaySas"); +const Conf::Key displaySasOnceKey("displaySasOnce"); +const Conf::Key helloHashEnabledKey("helloHashEnabled"); +const Conf::Key notSuppWarningKey("notSuppWarning"); + +// TODO: write an object to store tls params which implement serializable +const Conf::Key tlsKey("tls"); +const Conf::Key tlsPortKey("tlsPort"); +const Conf::Key certificateKey("certificate"); +const Conf::Key calistKey("calist"); +const Conf::Key ciphersKey("ciphers"); +const Conf::Key tlsEnableKey("enable"); +const Conf::Key methodKey("method"); +const Conf::Key timeoutKey("timeout"); +const Conf::Key tlsPasswordKey("password"); +const Conf::Key privateKeyKey("privateKey"); +const Conf::Key requireCertifKey("requireCertif"); +const Conf::Key serverKey("server"); +const Conf::Key verifyClientKey("verifyClient"); +const Conf::Key verifyServerKey("verifyServer"); + class SIPVoIPLink; /** @@ -74,6 +115,10 @@ class SIPAccount : public Account */ virtual ~SIPAccount(); + virtual void serialize(Engine *engine); + + virtual void unserialize(Conf::MappingNode *map); + /** * Set route header to appears in sip messages for this account */ @@ -429,7 +474,48 @@ class SIPAccount : public Account DtmfType _dtmfType; // Display Name that can be used in SIP URI. - std::string _displayName; + std::string _displayName; + + std::string _tlsEnable; + std::string _tlsPortStr;// = Manager::instance().getConfigString(_accountID, TLS_LISTENER_PORT); + std::string _tlsCaListFile;// = Manager::instance().getConfigString (_accountID, TLS_CA_LIST_FILE); + std::string _tlsCertificateFile;// = Manager::instance().getConfigString (_accountID, TLS_CERTIFICATE_FILE); + std::string _tlsPrivateKeyFile;// = Manager::instance().getConfigString (_accountID, TLS_PRIVATE_KEY_FILE); + std::string _tlsPassword;// = Manager::instance().getConfigString (_accountID, TLS_PASSWORD); + std::string _tlsMethod;// = Manager::instance().getConfigString (_accountID, TLS_METHOD); + std::string _tlsCiphers;// = Manager::instance().getConfigString (_accountID, TLS_CIPHERS); + std::string _tlsServerName;// = Manager::instance().getConfigString (_accountID, TLS_SERVER_NAME); + bool _tlsVerifyServer;// = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_SERVER); + bool _tlsVerifyClient;// = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_CLIENT); + bool _tlsRequireClientCertificate;// = Manager::instance().getConfigBool (_accountID, TLS_REQUIRE_CLIENT_CERTIFICATE); + std::string _tlsNegotiationTimeoutSec;// = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_SEC); + std::string _tlsNegotiationTimeoutMsec;// = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_MSEC); + + std::string _stunServer; // = Manager::instance().getConfigString (_accountID, STUN_SERVER); + + bool _tlsEnabled; // = Manager::instance().getConfigBool (_accountID, TLS_ENABLE); + bool _stunEnabled; // = Manager::instance().getConfigBool (_accountID, STUN_ENABLE); + + std::string _routeset; + + // std::string _realm; + std::string _authenticationUsename; + + // std::string _tlsListenerPort; + // std::string _routeSet; + // std::string _dtmfType; + + + bool _srtpEnabled; + std::string _srtpKeyExchange; + bool _srtpFallback; + + bool _zrtpDisplaySas; + bool _zrtpDisplaySasOnce; + bool _zrtpHelloHash; + bool _zrtpNotSuppWarning; + + }; #endif diff --git a/sflphone-common/test/configurationtest.cpp b/sflphone-common/test/configurationtest.cpp index 03ab6c2de3..1c5805af03 100755 --- a/sflphone-common/test/configurationtest.cpp +++ b/sflphone-common/test/configurationtest.cpp @@ -163,6 +163,8 @@ void ConfigurationTest::testYamlParser() parser->serializeEvents(); parser->composeEvents(); + + parser->constructNativeData(); delete parser; parser = NULL; -- GitLab From 9a3f2c7052cec6dbe00212cef4d3362da03f4902 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 5 Jul 2010 13:03:55 -0400 Subject: [PATCH 121/197] [#3649] Add default value for accounts configuration --- sflphone-common/src/sip/sipaccount.cpp | 30 +++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 4c5fbb1ffc..c62b79107e 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -57,7 +57,35 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _tlsSetting (NULL) , _dtmfType(OVERRTP) , _displayName ("") - + , _tlsEnable(false) + , _tlsPortStr("") + , _tlsCaListFile("") + , _tlsCertificateFile("") + , _tlsPrivateKeyFile("") + , _tlsPassword("") + , _tlsMethod("") + , _tlsCiphers("") + , _tlsServerName("") + , _tlsVerifyServer(false) + , _tlsVerifyClient(false) + , _tlsRequireClientCertificate(false) + , _tlsNegotiationTimeoutSec("") + , _tlsNegotiationTimeoutMsec("") + , _stunServer("") + , _tlsEnabled(false) + , _stunEnabled(false) + , _routeset("") + // , _realm("") + , _authenticationUsename("") + , _tlsListenerPort("5061") + , _dtmfType("") + , _srtpEnabled(false) + , _srtpKeyExchange("") + , _srtpFallback(false) + , _zrtpDisplaySas(false) + , _zrtpDisplaySasOnce(false) + , _zrtpHelloHash(false) + , _zrtpNotSuppWarning(false) { // IP2IP settings must be loaded before singleton instanciation, cannot call it here... -- GitLab From f3efb5877c541f09890dfb6714a62d721b13c39e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 5 Jul 2010 17:16:43 -0400 Subject: [PATCH 122/197] [#3649] Update managerimpl::setaccountdetails --- sflphone-common/src/account.h | 2 + sflphone-common/src/managerimpl.cpp | 362 +++++++++++++------------ sflphone-common/src/sip/sipaccount.cpp | 29 +- sflphone-common/src/sip/sipaccount.h | 112 ++++++-- 4 files changed, 296 insertions(+), 209 deletions(-) diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h index cec37565b1..e2113f2cb2 100644 --- a/sflphone-common/src/account.h +++ b/sflphone-common/src/account.h @@ -197,6 +197,8 @@ class Account : public Serializable{ */ bool isEnabled() { return _enabled; } + void setEnabled(bool enabl) { _enabled = enabl; } + /** * Get the registration state of the specified link * @return RegistrationState The registration state of underlying VoIPLink diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 6dc7f3dfae..bb1325ba6b 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3334,136 +3334,101 @@ std::map<std::string, std::string> ManagerImpl::getAccountDetails ( (accountID == IP2IP_PROFILE) ? a.insert( std::pair<std::string, std::string>(CONFIG_ACCOUNT_ALIAS, DIRECT_IP_CALL)) : a.insert(std::pair<std::string, - std::string>(CONFIG_ACCOUNT_ALIAS, getConfigString(accountID, - CONFIG_ACCOUNT_ALIAS))); - - a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ENABLE, - getConfigString(accountID, CONFIG_ACCOUNT_ENABLE))); - a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_RESOLVE_ONCE, - getConfigString(accountID, CONFIG_ACCOUNT_RESOLVE_ONCE))); - a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_TYPE, - getConfigString(accountID, CONFIG_ACCOUNT_TYPE))); - a.insert(std::pair<std::string, std::string>(HOSTNAME, getConfigString( - accountID, HOSTNAME))); - a.insert(std::pair<std::string, std::string>(USERNAME, getConfigString( - accountID, USERNAME))); - a.insert(std::pair<std::string, std::string>(ROUTESET, getConfigString( - accountID, ROUTESET))); - a.insert(std::pair<std::string, std::string>(PASSWORD, getConfigString( - accountID, PASSWORD))); - a.insert(std::pair<std::string, std::string>(REALM, getConfigString( - accountID, REALM))); - a.insert(std::pair<std::string, std::string>(USERAGENT, getConfigString( - accountID, USERAGENT))); - a.insert(std::pair<std::string, std::string>(AUTHENTICATION_USERNAME, - getConfigString(accountID, AUTHENTICATION_USERNAME))); - a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_MAILBOX, - getConfigString(accountID, CONFIG_ACCOUNT_MAILBOX))); - a.insert(std::pair<std::string, std::string>( - CONFIG_ACCOUNT_REGISTRATION_EXPIRE, getConfigString(accountID, - CONFIG_ACCOUNT_REGISTRATION_EXPIRE))); - a.insert(std::pair<std::string, std::string>(LOCAL_INTERFACE, - getConfigString(accountID, LOCAL_INTERFACE))); - a.insert(std::pair<std::string, std::string>(PUBLISHED_SAMEAS_LOCAL, - getConfigString(accountID, PUBLISHED_SAMEAS_LOCAL))); - a.insert(std::pair<std::string, std::string>(PUBLISHED_ADDRESS, - getConfigString(accountID, PUBLISHED_ADDRESS))); - a.insert(std::pair<std::string, std::string>(LOCAL_PORT, getConfigString( - accountID, LOCAL_PORT))); - a.insert(std::pair<std::string, std::string>(PUBLISHED_PORT, - getConfigString(accountID, PUBLISHED_PORT))); - a.insert(std::pair<std::string, std::string>(DISPLAY_NAME, getConfigString( - accountID, DISPLAY_NAME))); - a.insert(std::pair<std::string, std::string>(STUN_ENABLE, getConfigString( - accountID, STUN_ENABLE))); - a.insert(std::pair<std::string, std::string>(STUN_SERVER, getConfigString( - accountID, STUN_SERVER))); - a.insert(std::pair<std::string, std::string>(ACCOUNT_DTMF_TYPE, getConfigString( - accountID, ACCOUNT_DTMF_TYPE))); - - RegistrationState state = Unregistered; - std::string registrationStateCode; - std::string registrationStateDescription; - - if (account != NULL) { - if (accountID == IP2IP_PROFILE) { - registrationStateCode = EMPTY_FIELD; - registrationStateDescription = "Direct IP call"; - } else { - state = account->getRegistrationState(); - int code = account->getRegistrationStateDetailed().first; - std::stringstream out; - out << code; - registrationStateCode = out.str(); - registrationStateDescription - = account->getRegistrationStateDetailed().second; - } - } + std::string>(CONFIG_ACCOUNT_ALIAS, account->getAlias())); - (accountID == IP2IP_PROFILE) ? a.insert( - std::pair<std::string, std::string>(REGISTRATION_STATUS, "READY")) - : a.insert(std::pair<std::string, std::string>(REGISTRATION_STATUS, - mapStateNumberToString(state))); - - a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_CODE, - registrationStateCode)); - a.insert(std::pair<std::string, std::string>( - REGISTRATION_STATE_DESCRIPTION, registrationStateDescription)); - a.insert(std::pair<std::string, std::string>(SRTP_KEY_EXCHANGE, - getConfigString(accountID, SRTP_KEY_EXCHANGE))); - a.insert(std::pair<std::string, std::string>(SRTP_ENABLE, getConfigString( - accountID, SRTP_ENABLE))); - a.insert(std::pair<std::string, std::string>(SRTP_RTP_FALLBACK, - getConfigString(accountID, SRTP_RTP_FALLBACK))); - a.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS, - getConfigString(accountID, ZRTP_DISPLAY_SAS))); - a.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS_ONCE, - getConfigString(accountID, ZRTP_DISPLAY_SAS_ONCE))); - a.insert(std::pair<std::string, std::string>(ZRTP_HELLO_HASH, - getConfigString(accountID, ZRTP_HELLO_HASH))); - a.insert(std::pair<std::string, std::string>(ZRTP_NOT_SUPP_WARNING, - getConfigString(accountID, ZRTP_NOT_SUPP_WARNING))); - - // TLS listener is unique and parameters are modified through IP2IP_PROFILE - a.insert(std::pair<std::string, std::string>(TLS_LISTENER_PORT, - Manager::instance().getConfigString(IP2IP_PROFILE, - TLS_LISTENER_PORT))); - a.insert(std::pair<std::string, std::string>(TLS_ENABLE, - Manager::instance().getConfigString(accountID, TLS_ENABLE))); - a.insert(std::pair<std::string, std::string>(TLS_CA_LIST_FILE, - Manager::instance().getConfigString(accountID, TLS_CA_LIST_FILE))); - a.insert( - std::pair<std::string, std::string>(TLS_CERTIFICATE_FILE, - Manager::instance().getConfigString(accountID, - TLS_CERTIFICATE_FILE))); - a.insert( - std::pair<std::string, std::string>(TLS_PRIVATE_KEY_FILE, - Manager::instance().getConfigString(accountID, - TLS_PRIVATE_KEY_FILE))); - a.insert(std::pair<std::string, std::string>(TLS_PASSWORD, - Manager::instance().getConfigString(accountID, TLS_PASSWORD))); - a.insert(std::pair<std::string, std::string>(TLS_METHOD, - Manager::instance().getConfigString(accountID, TLS_METHOD))); - a.insert(std::pair<std::string, std::string>(TLS_CIPHERS, - Manager::instance().getConfigString(accountID, TLS_CIPHERS))); - a.insert(std::pair<std::string, std::string>(TLS_SERVER_NAME, - Manager::instance().getConfigString(accountID, TLS_SERVER_NAME))); - a.insert(std::pair<std::string, std::string>(TLS_VERIFY_SERVER, - Manager::instance().getConfigString(accountID, TLS_VERIFY_SERVER))); - a.insert(std::pair<std::string, std::string>(TLS_VERIFY_CLIENT, - Manager::instance().getConfigString(accountID, TLS_VERIFY_CLIENT))); - a.insert(std::pair<std::string, std::string>( - TLS_REQUIRE_CLIENT_CERTIFICATE, - Manager::instance().getConfigString(accountID, - TLS_REQUIRE_CLIENT_CERTIFICATE))); - a.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_SEC, - Manager::instance().getConfigString(accountID, - TLS_NEGOTIATION_TIMEOUT_SEC))); - a.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_MSEC, - Manager::instance().getConfigString(accountID, - TLS_NEGOTIATION_TIMEOUT_MSEC))); - - return a; + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ENABLE, account->isEnabled() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_TYPE, account->getType())); + a.insert(std::pair<std::string, std::string>(HOSTNAME, account->getHostname())); + a.insert(std::pair<std::string, std::string>(USERNAME, account->getUsername())); + a.insert(std::pair<std::string, std::string>(PASSWORD, account->getPassword())); + + + // a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_MAILBOX, + // getConfigString(accountID, CONFIG_ACCOUNT_MAILBOX))); + // a.insert(std::pair<std::string, std::string>(DISPLAY_NAME, getConfigString( + // accountID, DISPLAY_NAME))); + + RegistrationState state = Unregistered; + std::string registrationStateCode; + std::string registrationStateDescription; + + if (account != NULL) { + if (accountID == IP2IP_PROFILE) { + registrationStateCode = EMPTY_FIELD; + registrationStateDescription = "Direct IP call"; + } else { + state = account->getRegistrationState(); + int code = account->getRegistrationStateDetailed().first; + std::stringstream out; + out << code; + registrationStateCode = out.str(); + registrationStateDescription = account->getRegistrationStateDetailed().second; + } + } + + (accountID == IP2IP_PROFILE) ? a.insert( + std::pair<std::string, std::string>(REGISTRATION_STATUS, "READY")) + : a.insert(std::pair<std::string, std::string>(REGISTRATION_STATUS, + mapStateNumberToString(state))); + + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_CODE, + registrationStateCode)); + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_DESCRIPTION, registrationStateDescription)); + + // Add sip specific details + if(account->getType().compare("SIP") == 0) { + + SIPAccount *sipaccount = (SIPAccount *)account; + + a.insert(std::pair<std::string, std::string>(ROUTESET, sipaccount->getRouteSet())); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_RESOLVE_ONCE, sipaccount->isResolveOnce() ? "true" : "false")); + // a.insert(std::pair<std::string, std::string>(REALM, account-> + a.insert(std::pair<std::string, std::string>(USERAGENT, sipaccount->getUseragent())); + // a.insert(std::pair<std::string, std::string>(AUTHENTICATION_USERNAME, getConfigString(accountID, AUTHENTICATION_USERNAME))); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_REGISTRATION_EXPIRE, sipaccount->getRegistrationExpire())); + a.insert(std::pair<std::string, std::string>(LOCAL_INTERFACE, sipaccount->getLocalInterface())); + a.insert(std::pair<std::string, std::string>(PUBLISHED_SAMEAS_LOCAL, sipaccount->getPublishedSameasLocal() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(PUBLISHED_ADDRESS, sipaccount->getPublishedAddress())); + std::stringstream localport; + localport << sipaccount->getLocalPort(); + a.insert(std::pair<std::string, std::string>(LOCAL_PORT, localport.str())); + std::stringstream publishedport; + publishedport << sipaccount->getPublishedPort(); + a.insert(std::pair<std::string, std::string>(PUBLISHED_PORT, publishedport.str())); + a.insert(std::pair<std::string, std::string>(STUN_ENABLE, sipaccount->isStunEnabled() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(STUN_SERVER, std::string(sipaccount->getStunServerName().ptr, sipaccount->getStunServerName().slen))); + a.insert(std::pair<std::string, std::string>(ACCOUNT_DTMF_TYPE, (sipaccount->getDtmfType() == 0) ? "0" : "1")); + + a.insert(std::pair<std::string, std::string>(SRTP_KEY_EXCHANGE, sipaccount->getSrtpKeyExchange())); + a.insert(std::pair<std::string, std::string>(SRTP_ENABLE, sipaccount->getSrtpEnable() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(SRTP_RTP_FALLBACK, sipaccount->getSrtpFallback() ? "true" : "false")); + + a.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS, sipaccount->getZrtpDisplaySas() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS_ONCE, sipaccount->getZrtpDiaplaySasOnce() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(ZRTP_HELLO_HASH, sipaccount->getZrtpHelloHash() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(ZRTP_NOT_SUPP_WARNING, sipaccount->getZrtpNotSuppWarning() ? "true" : "false")); + + // TLS listener is unique and parameters are modified through IP2IP_PROFILE + std::stringstream tlslistenerport; + tlslistenerport << sipaccount->getTlsListenerPort(); + a.insert(std::pair<std::string, std::string>(TLS_LISTENER_PORT, tlslistenerport.str())); + a.insert(std::pair<std::string, std::string>(TLS_ENABLE, sipaccount->getTlsEnable())); + a.insert(std::pair<std::string, std::string>(TLS_CA_LIST_FILE, sipaccount->getTlsCaListFile())); + a.insert(std::pair<std::string, std::string>(TLS_CERTIFICATE_FILE, sipaccount->getTlsCertificateFile())); + a.insert(std::pair<std::string, std::string>(TLS_PRIVATE_KEY_FILE, sipaccount->getTlsPrivateKeyFile())); + a.insert(std::pair<std::string, std::string>(TLS_PASSWORD, sipaccount->getTlsPassword())); + a.insert(std::pair<std::string, std::string>(TLS_METHOD, sipaccount->getTlsMethod())); + a.insert(std::pair<std::string, std::string>(TLS_CIPHERS, sipaccount->getTlsCiphers())); + a.insert(std::pair<std::string, std::string>(TLS_SERVER_NAME, sipaccount->getTlsServerName())); + a.insert(std::pair<std::string, std::string>(TLS_VERIFY_SERVER, sipaccount->getTlsVerifyServer() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(TLS_VERIFY_CLIENT, sipaccount->getTlsVerifyClient() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(TLS_REQUIRE_CLIENT_CERTIFICATE, sipaccount->getTlsRequireClientCertificate() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_SEC, sipaccount->getTlsNegotiationTimeoutSec())); + a.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_MSEC, sipaccount->getTlsNegotiationTimeoutMsec())); + + } + + return a; } /* Transform digest to string. @@ -3593,7 +3558,9 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, // Get the account type std::string accountType; find_in_map(CONFIG_ACCOUNT_TYPE, accountType) - + + Account* account = getAccount(accountID); + std::string alias; std::string type; std::string hostname; @@ -3602,7 +3569,6 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, std::string mailbox; std::string accountEnable; - // Account setting common to SIP and IAX find_in_map(CONFIG_ACCOUNT_ALIAS, alias) find_in_map(CONFIG_ACCOUNT_TYPE, type) @@ -3612,17 +3578,26 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, find_in_map(CONFIG_ACCOUNT_MAILBOX, mailbox); find_in_map(CONFIG_ACCOUNT_ENABLE, accountEnable); - setConfig(accountID, CONFIG_ACCOUNT_ALIAS, alias); - setConfig(accountID, CONFIG_ACCOUNT_TYPE, type); - setConfig(accountID, HOSTNAME, hostname); - setConfig(accountID, USERNAME, username); - setConfig(accountID, PASSWORD, password); - setConfig(accountID, CONFIG_ACCOUNT_MAILBOX, mailbox); - setConfig(accountID, CONFIG_ACCOUNT_ENABLE, accountEnable); + account->setAlias(alias); + account->setType(type); + account->setUsername(username); + account->setHostname(hostname); + account->setPassword(password); + account->setEnabled((accountEnable.compare("true") == 0) ? true : false); + + // setConfig(accountID, CONFIG_ACCOUNT_ALIAS, alias); + // setConfig(accountID, CONFIG_ACCOUNT_TYPE, type); + // setConfig(accountID, HOSTNAME, hostname); + // setConfig(accountID, USERNAME, username); + // setConfig(accountID, PASSWORD, password); + // setConfig(accountID, CONFIG_ACCOUNT_MAILBOX, mailbox); + // setConfig(accountID, CONFIG_ACCOUNT_ENABLE, accountEnable); // SIP specific account settings if(accountType == "SIP") { + SIPAccount *sipaccount = (SIPAccount *)account; + std::string ua_name; std::string realm; std::string routeset; @@ -3678,18 +3653,29 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, find_in_map(CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce) find_in_map(CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire) - setConfig(accountID, DISPLAY_NAME, displayName); - setConfig(accountID, ROUTESET, routeset); - setConfig(accountID, LOCAL_INTERFACE, localInterface); - setConfig(accountID, PUBLISHED_SAMEAS_LOCAL, publishedSameasLocal); - setConfig(accountID, PUBLISHED_ADDRESS, publishedAddress); - setConfig(accountID, LOCAL_PORT, localPort); - setConfig(accountID, PUBLISHED_PORT, publishedPort); + sipaccount->setDisplayName(displayName); + sipaccount->setRouteSet(routeset); + sipaccount->setLocalInterface(localInterface); + sipaccount->setPublishedSameasLocal((publishedSameasLocal.compare("true") == 0) ? true : false); + sipaccount->setPublishedAddress(publishedAddress); + sipaccount->setLocalPort(atoi(localPort.data())); + sipaccount->setPublishedPort(atoi(publishedPort.data())); + // sipaccount->setStunServerName + sipaccount->setResolveOnce((resolveOnce.compare("true")==0) ? true : false); + sipaccount->setRegistrationExpire(registrationExpire); + + // setConfig(accountID, DISPLAY_NAME, displayName); + // setConfig(accountID, ROUTESET, routeset); + // setConfig(accountID, LOCAL_INTERFACE, localInterface); + // setConfig(accountID, PUBLISHED_SAMEAS_LOCAL, publishedSameasLocal); + // setConfig(accountID, PUBLISHED_ADDRESS, publishedAddress); + // setConfig(accountID, LOCAL_PORT, localPort); + // setConfig(accountID, PUBLISHED_PORT, publishedPort); setConfig(accountID, STUN_ENABLE, stunEnable); setConfig(accountID, STUN_SERVER, stunServer); - setConfig(accountID, ACCOUNT_DTMF_TYPE, dtmfType); - setConfig(accountID, CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce); - setConfig(accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire); + // setConfig(accountID, ACCOUNT_DTMF_TYPE, dtmfType); + // setConfig(accountID, CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce); + // setConfig(accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire); // sip credential find_in_map(REALM, realm) @@ -3697,9 +3683,11 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, find_in_map(USERAGENT, ua_name) setConfig(accountID, REALM, realm); - setConfig(accountID, USERAGENT, ua_name); + // setConfig(accountID, USERAGENT, ua_name); setConfig(accountID, AUTHENTICATION_USERNAME, authenticationName); + sipaccount->setUseragent(ua_name); + // srtp settings find_in_map(SRTP_ENABLE, srtpEnable) find_in_map(SRTP_RTP_FALLBACK, srtpRtpFallback) @@ -3709,13 +3697,23 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, find_in_map(ZRTP_HELLO_HASH, zrtpHelloHash) find_in_map(SRTP_KEY_EXCHANGE, srtpKeyExchange) - setConfig(accountID, SRTP_ENABLE, srtpEnable); - setConfig(accountID, SRTP_RTP_FALLBACK, srtpRtpFallback); - setConfig(accountID, ZRTP_DISPLAY_SAS, zrtpDisplaySas); - setConfig(accountID, ZRTP_DISPLAY_SAS_ONCE, zrtpDisplaySasOnce); - setConfig(accountID, ZRTP_NOT_SUPP_WARNING, zrtpNotSuppWarning); - setConfig(accountID, ZRTP_HELLO_HASH, zrtpHelloHash); - setConfig(accountID, SRTP_KEY_EXCHANGE, srtpKeyExchange); + sipaccount->setSrtpEnable((srtpEnable.compare("true") == 0) ? true : false); + sipaccount->setSrtpFallback((srtpRtpFallback.compare("true") == 0) ? true : false); + sipaccount->setZrtpDisplaySas((zrtpDisplaySas.compare("true") == 0) ? true : false); + sipaccount->setZrtpDiaplaySasOnce((zrtpDisplaySasOnce.compare("true") == 0) ? true : false); + sipaccount->setZrtpNotSuppWarning((zrtpNotSuppWarning.compare("true") == 0) ? true : false); + sipaccount->setZrtpHelloHash((zrtpHelloHash.compare("true") == 0) ? true : false); + // sipaccount->setSrtpKeyExchange((srtpKeyExchange.compare("true") == 0) ? true : false); + sipaccount->setSrtpKeyExchange(srtpKeyExchange); + + // setConfig(accountID, SRTP_ENABLE, srtpEnable); + // setConfig(accountID, SRTP_RTP_FALLBACK, srtpRtpFallback); + // setConfig(accountID, ZRTP_DISPLAY_SAS, zrtpDisplaySas); + // setConfig(accountID, ZRTP_DISPLAY_SAS_ONCE, zrtpDisplaySasOnce); + // setConfig(accountID, ZRTP_NOT_SUPP_WARNING, zrtpNotSuppWarning); + // setConfig(accountID, ZRTP_HELLO_HASH, zrtpHelloHash); + // setConfig(accountID, SRTP_KEY_EXCHANGE, srtpKeyExchange); + // TLS settings // The TLS listener is unique and globally defined through IP2IP_PROFILE @@ -3737,23 +3735,43 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, find_in_map(TLS_NEGOTIATION_TIMEOUT_MSEC, tlsNegotiationTimeoutMsec) - // The TLS listener is unique and globally defined through IP2IP_PROFILE + if (accountID == IP2IP_PROFILE){ - setConfig(accountID, TLS_LISTENER_PORT, tlsListenerPort); - } - setConfig(accountID, TLS_ENABLE, tlsEnable); - setConfig(accountID, TLS_CA_LIST_FILE, tlsCaListFile); - setConfig(accountID, TLS_CERTIFICATE_FILE, tlsCertificateFile); - setConfig(accountID, TLS_PRIVATE_KEY_FILE, tlsPrivateKeyFile); - setConfig(accountID, TLS_PASSWORD, tlsPassword); - setConfig(accountID, TLS_METHOD, tlsMethod); - setConfig(accountID, TLS_CIPHERS, tlsCiphers); - setConfig(accountID, TLS_SERVER_NAME, tlsServerName); - setConfig(accountID, TLS_VERIFY_SERVER, tlsVerifyServer); - setConfig(accountID, TLS_VERIFY_CLIENT, tlsVerifyClient); - setConfig(accountID, TLS_REQUIRE_CLIENT_CERTIFICATE, tlsRequireClientCertificate); - setConfig(accountID, TLS_NEGOTIATION_TIMEOUT_SEC, tlsNegotiationTimeoutSec); - setConfig(accountID, TLS_NEGOTIATION_TIMEOUT_MSEC,tlsNegotiationTimeoutMsec); + sipaccount->setTlsListenerPort(atoi(tlsListenerPort.data())); + } + sipaccount->setTlsEnable(tlsEnable); + sipaccount->setTlsCaListFile(tlsCaListFile); + sipaccount->setTlsCertificateFile(tlsCertificateFile); + sipaccount->setTlsPrivateKeyFile(tlsPrivateKeyFile); + sipaccount->setTlsPassword(tlsPassword); + sipaccount->setTlsMethod(tlsMethod); + sipaccount->setTlsCiphers(tlsCiphers); + sipaccount->setTlsServerName(tlsServerName); + sipaccount->setTlsVerifyServer(tlsVerifyServer.compare("true") ? true : false); + sipaccount->setTlsVerifyClient(tlsVerifyServer.compare("true") ? true : false); + sipaccount->setTlsRequireClientCertificate(tlsRequireClientCertificate.compare("true") ? true : false); + sipaccount->setTlsNegotiationTimeoutSec(tlsNegotiationTimeoutSec); + sipaccount->setTlsNegotiationTimeoutMsec(tlsNegotiationTimeoutMsec); + + + + // The TLS listener is unique and globally defined through IP2IP_PROFILE + // if (accountID == IP2IP_PROFILE){ + // setConfig(accountID, TLS_LISTENER_PORT, tlsListenerPort); + // } + // setConfig(accountID, TLS_ENABLE, tlsEnable); + // setConfig(accountID, TLS_CA_LIST_FILE, tlsCaListFile); + // setConfig(accountID, TLS_CERTIFICATE_FILE, tlsCertificateFile); + // setConfig(accountID, TLS_PRIVATE_KEY_FILE, tlsPrivateKeyFile); + // setConfig(accountID, TLS_PASSWORD, tlsPassword); + // setConfig(accountID, TLS_METHOD, tlsMethod); + // setConfig(accountID, TLS_CIPHERS, tlsCiphers); + // setConfig(accountID, TLS_SERVER_NAME, tlsServerName); + // setConfig(accountID, TLS_VERIFY_SERVER, tlsVerifyServer); + // setConfig(accountID, TLS_VERIFY_CLIENT, tlsVerifyClient); + // setConfig(accountID, TLS_REQUIRE_CLIENT_CERTIFICATE, tlsRequireClientCertificate); + // setConfig(accountID, TLS_NEGOTIATION_TIMEOUT_SEC, tlsNegotiationTimeoutSec); + // setConfig(accountID, TLS_NEGOTIATION_TIMEOUT_MSEC,tlsNegotiationTimeoutMsec); if (!getMd5CredentialHashing()) { setConfig(accountID, PASSWORD, password); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index c62b79107e..343c014bad 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -74,11 +74,10 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _stunServer("") , _tlsEnabled(false) , _stunEnabled(false) - , _routeset("") + // , _routeSet("") // , _realm("") , _authenticationUsename("") - , _tlsListenerPort("5061") - , _dtmfType("") + // , _tlsListenerPort("5061") , _srtpEnabled(false) , _srtpKeyExchange("") , _srtpFallback(false) @@ -134,7 +133,7 @@ void SIPAccount::unserialize(Conf::MappingNode *map) val = (Conf::ScalarNode *)(map->getValue(hostnameKey)); _hostname = val->getValue(); val = (Conf::ScalarNode *)(map->getValue(accountEnableKey)); - _enabled = val->getValue().compare("true") ? true : false; + _enabled = (val->getValue().compare("true") == 0) ? true : false; // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); val = (Conf::ScalarNode *)(map->getValue(codecsKey)); @@ -152,9 +151,9 @@ void SIPAccount::unserialize(Conf::MappingNode *map) val = (Conf::ScalarNode *)(map->getValue(publishPortKey)); _publishedPort = atoi(val->getValue().data()); val = (Conf::ScalarNode *)(map->getValue(sameasLocalKey)); - _publishedSameasLocal = val->getValue().compare("true") ? true : false; + _publishedSameasLocal = (val->getValue().compare("true") == 0) ? true : false; val = (Conf::ScalarNode *)(map->getValue(resolveOnceKey)); - _resolveOnce = val->getValue().compare("true") ? true : false; + _resolveOnce = (val->getValue().compare("true") == 0) ? true : false; val = (Conf::ScalarNode *)(map->getValue(dtmfTypeKey)); // _dtmfType = atoi(val->getValue(); @@ -164,23 +163,23 @@ void SIPAccount::unserialize(Conf::MappingNode *map) srtpMap = (Conf::MappingNode *)(map->getValue(srtpKey)); val = (Conf::ScalarNode *)(srtpMap->getValue(srtpEnableKey)); - _srtpEnabled = val->getValue().compare("true") ? true : false; + _srtpEnabled = (val->getValue().compare("true") == 0) ? true : false; val = (Conf::ScalarNode *)(srtpMap->getValue(keyExchangeKey)); _srtpKeyExchange = val->getValue(); val = (Conf::ScalarNode *)(srtpMap->getValue(rtpFallbackKey)); - _srtpFallback = val->getValue().compare("true") ? true : false; + _srtpFallback = (val->getValue().compare("true") == 0) ? true : false; // get zrtp submap zrtpMap = (Conf::MappingNode *)(map->getValue(zrtpKey)); val = (Conf::ScalarNode *)(zrtpMap->getValue(displaySasKey)); - _zrtpDisplaySas = val->getValue().compare("true") ? true : false; + _zrtpDisplaySas = (val->getValue().compare("true") == 0) ? true : false; val = (Conf::ScalarNode *)(zrtpMap->getValue(displaySasOnceKey)); - _zrtpDisplaySasOnce = val->getValue().compare("true") ? true : false; + _zrtpDisplaySasOnce = (val->getValue().compare("true") == 0) ? true : false; val = (Conf::ScalarNode *)(zrtpMap->getValue(helloHashEnabledKey)); - _zrtpHelloHash = val->getValue().compare("true") ? true : false; + _zrtpHelloHash = (val->getValue().compare("true") == 0) ? true : false; val = (Conf::ScalarNode *)(zrtpMap->getValue(notSuppWarningKey)); - _zrtpNotSuppWarning = val->getValue().compare("true") ? true : false; + _zrtpNotSuppWarning = (val->getValue().compare("true") == 0) ? true : false; // get tls submap tlsMap = (Conf::MappingNode *)(map->getValue(tlsKey)); @@ -205,13 +204,13 @@ void SIPAccount::unserialize(Conf::MappingNode *map) val = (Conf::ScalarNode *)(tlsMap->getValue(privateKeyKey)); _tlsPrivateKeyFile = val->getValue(); val = (Conf::ScalarNode *)(tlsMap->getValue(requireCertifKey)); - _tlsRequireClientCertificate = val->getValue().compare("true") ? true : false; + _tlsRequireClientCertificate = (val->getValue().compare("true") == 0) ? true : false; val = (Conf::ScalarNode *)(tlsMap->getValue(serverKey)); _tlsServerName = val->getValue(); val = (Conf::ScalarNode *)(tlsMap->getValue(verifyClientKey)); - _tlsVerifyServer = val->getValue().compare("true") ? true : false; + _tlsVerifyServer = (val->getValue().compare("true") == 0) ? true : false; val = (Conf::ScalarNode *)(tlsMap->getValue(verifyServerKey)); - _tlsVerifyClient = val->getValue().compare("true") ? true : false; + _tlsVerifyClient = (val->getValue().compare("true") == 0) ? true : false; } diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 2f923f3a9d..60f0718393 100644 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -157,6 +157,7 @@ class SIPAccount : public Account inline void setAuthenticationUsername(const std::string& username) { _authenticationUsername = username; } inline bool isResolveOnce(void) { return _resolveOnce; } + void setResolveOnce(bool reslv) { _resolveOnce = reslv; } /** @@ -242,7 +243,6 @@ class SIPAccount : public Account * account is set to OTHER. */ inline bool isStunEnabled(void) { return (_transportType == PJSIP_TRANSPORT_START_OTHER) ? true: false; } - /* * @return pj_str_t "From" uri based on account information. @@ -375,9 +375,75 @@ class SIPAccount : public Account std::string getTransportMapKey(void); DtmfType getDtmfType(void) { return _dtmfType; } - void setDtmfType(DtmfType type) { _dtmfType = type; } + std::string getDisplayName(void) { return _displayName; } + void setDisplayName(std::string name) { _displayName = name ;} + + bool getSrtpEnable(void) { return _srtpEnabled; } + void setSrtpEnable(bool enabl) { _srtpEnabled = enabl; } + + std::string getSrtpKeyExchange(void) { return _srtpKeyExchange; } + void setSrtpKeyExchange(std::string key) { _srtpKeyExchange = key; } + + bool getSrtpFallback(void) { return _srtpFallback; } + void setSrtpFallback(bool fallback) { _srtpFallback = fallback; } + + bool getZrtpDisplaySas(void) { return _zrtpDisplaySas; } + void setZrtpDisplaySas(bool sas) { _zrtpDisplaySas = sas; } + + bool getZrtpDiaplaySasOnce(void) { return _zrtpDisplaySasOnce; } + void setZrtpDiaplaySasOnce(bool sasonce) { _zrtpDisplaySasOnce = sasonce; } + + bool getZrtpNotSuppWarning(void) { return _zrtpDisplaySasOnce; } + void setZrtpNotSuppWarning(bool warning) { _zrtpDisplaySasOnce = _zrtpNotSuppWarning; } + + bool getZrtpHelloHash(void) { return _zrtpHelloHash; } + void setZrtpHelloHash(bool hellohash) { _zrtpHelloHash = hellohash; } + // void setSrtpKeyExchange + + std::string getTlsEnable(void) {return _tlsEnable; } + void setTlsEnable(std::string enabl) { _tlsEnable = enabl; } + + std::string getTlsCaListFile(void) { return _tlsCaListFile; } + void setTlsCaListFile(std::string calist) { _tlsCaListFile = calist; } + + std::string getTlsCertificateFile(void) { return _tlsCertificateFile; } + void setTlsCertificateFile(std::string cert) { _tlsCertificateFile = cert; } + + std::string getTlsPrivateKeyFile(void) { return _tlsPrivateKeyFile; } + void setTlsPrivateKeyFile(std::string priv) { _tlsPrivateKeyFile = priv; } + + std::string getTlsPassword(void) { return _tlsPassword; } + void setTlsPassword(std::string pass) { _tlsPassword = pass; } + + std::string getTlsMethod(void) { return _tlsMethod; } + void setTlsMethod(std::string meth) { _tlsMethod = meth; } + + std::string getTlsCiphers(void) { return _tlsCiphers; } + void setTlsCiphers(std::string cipher) { _tlsCiphers = cipher; } + + std::string getTlsServerName(void) { return _tlsServerName; } + void setTlsServerName(std::string name) { _tlsServerName = name; } + + bool getTlsVerifyServer(void) { return _tlsVerifyServer; } + void setTlsVerifyServer(bool verif) { _tlsVerifyServer = verif; } + + bool getTlsVerifyClient(void) { return _tlsVerifyClient; } + void setTlsVerifyClient(bool verif) { _tlsVerifyClient = verif; } + + bool getTlsRequireClientCertificate(void) { return _tlsRequireClientCertificate; } + void setTlsRequireClientCertificate(bool require) { _tlsRequireClientCertificate = require; } + + std::string getTlsNegotiationTimeoutSec(void) { return _tlsNegotiationTimeoutSec; } + void setTlsNegotiationTimeoutSec(std::string timeout) { _tlsNegotiationTimeoutSec = timeout; } + + std::string getTlsNegotiationTimeoutMsec(void) { return _tlsNegotiationTimeoutMsec; } + void setTlsNegotiationTimeoutMsec(std::string timeout) { _tlsNegotiationTimeoutMsec = timeout; } + + std::string getUseragent(void) { return _useragent; } + void setUseragent(std::string ua) { _useragent = ua; } + private: /* Maps a string description of the SSL method @@ -477,26 +543,26 @@ class SIPAccount : public Account std::string _displayName; std::string _tlsEnable; - std::string _tlsPortStr;// = Manager::instance().getConfigString(_accountID, TLS_LISTENER_PORT); - std::string _tlsCaListFile;// = Manager::instance().getConfigString (_accountID, TLS_CA_LIST_FILE); - std::string _tlsCertificateFile;// = Manager::instance().getConfigString (_accountID, TLS_CERTIFICATE_FILE); - std::string _tlsPrivateKeyFile;// = Manager::instance().getConfigString (_accountID, TLS_PRIVATE_KEY_FILE); - std::string _tlsPassword;// = Manager::instance().getConfigString (_accountID, TLS_PASSWORD); - std::string _tlsMethod;// = Manager::instance().getConfigString (_accountID, TLS_METHOD); - std::string _tlsCiphers;// = Manager::instance().getConfigString (_accountID, TLS_CIPHERS); - std::string _tlsServerName;// = Manager::instance().getConfigString (_accountID, TLS_SERVER_NAME); - bool _tlsVerifyServer;// = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_SERVER); - bool _tlsVerifyClient;// = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_CLIENT); - bool _tlsRequireClientCertificate;// = Manager::instance().getConfigBool (_accountID, TLS_REQUIRE_CLIENT_CERTIFICATE); - std::string _tlsNegotiationTimeoutSec;// = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_SEC); - std::string _tlsNegotiationTimeoutMsec;// = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_MSEC); - - std::string _stunServer; // = Manager::instance().getConfigString (_accountID, STUN_SERVER); - - bool _tlsEnabled; // = Manager::instance().getConfigBool (_accountID, TLS_ENABLE); - bool _stunEnabled; // = Manager::instance().getConfigBool (_accountID, STUN_ENABLE); - - std::string _routeset; + std::string _tlsPortStr; + std::string _tlsCaListFile; + std::string _tlsCertificateFile; + std::string _tlsPrivateKeyFile; + std::string _tlsPassword; + std::string _tlsMethod; + std::string _tlsCiphers; + std::string _tlsServerName; + bool _tlsVerifyServer; + bool _tlsVerifyClient; + bool _tlsRequireClientCertificate; + std::string _tlsNegotiationTimeoutSec; + std::string _tlsNegotiationTimeoutMsec; + + std::string _stunServer; + + bool _tlsEnabled; + bool _stunEnabled; + + // std::string _routeset; // std::string _realm; std::string _authenticationUsename; @@ -515,6 +581,8 @@ class SIPAccount : public Account bool _zrtpHelloHash; bool _zrtpNotSuppWarning; + std::string _useragent; + }; -- GitLab From 793c6970d842c021c6dd3c453d3c927a95da25c7 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 5 Jul 2010 18:58:09 -0400 Subject: [PATCH 123/197] [#3648] Load IP2IP account --- sflphone-common/src/accountcreator.cpp | 16 ++-- sflphone-common/src/config/yamlparser.cpp | 62 +++++++------- .../src/dbus/configurationmanager.cpp | 3 + sflphone-common/src/managerimpl.cpp | 81 ++++++++++++++++--- sflphone-common/src/managerimpl.h | 2 +- sflphone-common/src/sip/sipaccount.cpp | 7 +- sflphone-common/src/sip/sipvoiplink.cpp | 2 + 7 files changed, 125 insertions(+), 48 deletions(-) diff --git a/sflphone-common/src/accountcreator.cpp b/sflphone-common/src/accountcreator.cpp index c0b2abc383..91adfdb390 100644 --- a/sflphone-common/src/accountcreator.cpp +++ b/sflphone-common/src/accountcreator.cpp @@ -50,13 +50,17 @@ AccountCreator::createAccount (AccountType type, AccountID accountID) { switch (type) { - case SIP_ACCOUNT: - return new SIPAccount (accountID); - break; + case SIP_ACCOUNT: { + _debug("createaccount accountID %s", accountID.c_str()); + return new SIPAccount (accountID); + } + break; - case SIP_DIRECT_IP_ACCOUNT: - return new SIPAccount (IP2IP_PROFILE); - break; + case SIP_DIRECT_IP_ACCOUNT: { + _debug("createaccount accountID IP2IP_PROFILE"); + return new SIPAccount (IP2IP_PROFILE); + break; + } #ifdef USE_IAX case IAX_ACCOUNT: diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index d68c1febcf..a1c4a9dbd7 100755 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -103,18 +103,18 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) switch (event_from->type) { case YAML_STREAM_START_EVENT: { - _debug("YAML_STREAM_START_EVENT"); + // _debug("YAML_STREAM_START_EVENT"); return yaml_stream_start_event_initialize(event_to, event_from->data.stream_start.encoding); } case YAML_STREAM_END_EVENT: { - _debug("YAML_STREAM_END_EVENT"); + //_debug("YAML_STREAM_END_EVENT"); return yaml_stream_end_event_initialize(event_to); } case YAML_DOCUMENT_START_EVENT: { - _debug("YAML_DOCUMENT_START_EVENT"); + // _debug("YAML_DOCUMENT_START_EVENT"); return yaml_document_start_event_initialize(event_to, event_from->data.document_start.version_directive, event_from->data.document_start.tag_directives.start, @@ -123,17 +123,17 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) } case YAML_DOCUMENT_END_EVENT: { - _debug("YAML_DOCUMENT_END_EVENT"); + // _debug("YAML_DOCUMENT_END_EVENT"); return yaml_document_end_event_initialize(event_to, event_from->data.document_end.implicit); } case YAML_ALIAS_EVENT:{ - _debug("YAML_ALIAS_EVENT"); + // _debug("YAML_ALIAS_EVENT"); return yaml_alias_event_initialize(event_to, event_from->data.alias.anchor); } case YAML_SCALAR_EVENT: { - _debug("YAML_SCALAR_EVENT"); + // _debug("YAML_SCALAR_EVENT"); return yaml_scalar_event_initialize(event_to, event_from->data.scalar.anchor, event_from->data.scalar.tag, @@ -144,7 +144,7 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) event_from->data.scalar.style); } case YAML_SEQUENCE_START_EVENT: { - _debug("YAML_SEQUENCE_START_EVENT"); + // _debug("YAML_SEQUENCE_START_EVENT"); return yaml_sequence_start_event_initialize(event_to, event_from->data.sequence_start.anchor, event_from->data.sequence_start.tag, @@ -152,11 +152,11 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) event_from->data.sequence_start.style); } case YAML_SEQUENCE_END_EVENT: { - _debug("YAML_SEQUENCE_END_EVENT"); + // _debug("YAML_SEQUENCE_END_EVENT"); return yaml_sequence_end_event_initialize(event_to); } case YAML_MAPPING_START_EVENT: { - _debug("YAML_MAPPING_START_EVENT"); + // _debug("YAML_MAPPING_START_EVENT"); return yaml_mapping_start_event_initialize(event_to, event_from->data.mapping_start.anchor, event_from->data.mapping_start.tag, @@ -164,7 +164,7 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) event_from->data.mapping_start.style); } case YAML_MAPPING_END_EVENT: { - _debug("YAML_MAPPING_END_EVENT"); + // _debug("YAML_MAPPING_END_EVENT"); return yaml_mapping_end_event_initialize(event_to); } @@ -179,7 +179,7 @@ int YamlParser::copyEvent(yaml_event_t *event_to, yaml_event_t *event_from) YamlDocument *YamlParser::composeEvents() { - _debug("Compose Events"); + // _debug("YamlParser: Compose Events"); if(eventNumber == 0) throw YamlParserException("No event available"); @@ -196,7 +196,7 @@ YamlDocument *YamlParser::composeEvents() { void YamlParser::processStream () { - _debug("ProcessStream"); + // _debug("YamlParser: process stream"); while((eventIndex < eventNumber) && (events[eventIndex].type != YAML_STREAM_END_EVENT)) { @@ -213,7 +213,7 @@ void YamlParser::processStream () { void YamlParser::processDocument() { - _debug("ProcessDocument"); + // _debug("YamlParser: process document"); doc = new YamlDocument(); @@ -248,7 +248,7 @@ void YamlParser::processDocument() void YamlParser::processScalar(YamlNode *topNode) { - _debug("ProcessScalar"); + // _debug("YamlParser: process scalar"); if(!topNode) throw YamlParserException("No container for scalar"); @@ -276,7 +276,7 @@ void YamlParser::processScalar(YamlNode *topNode) void YamlParser::processSequence(YamlNode *topNode) { - _debug("ProcessSequence"); + // _debug("YamlParser: process sequence"); if(!topNode) throw YamlParserException("No container for sequence"); @@ -325,7 +325,7 @@ void YamlParser::processSequence(YamlNode *topNode) void YamlParser::processMapping(YamlNode *topNode) { - _debug("ProcessMapping"); + // _debug("YamlParser: process mapping"); if(!topNode) throw YamlParserException("No container for mapping"); @@ -392,15 +392,15 @@ void YamlParser::constructNativeData() { switch((*iter)->getType()){ case SCALAR: - _debug("construct scalar"); + // _debug("construct scalar"); throw YamlParserException("No scalar allowed at document level, expect a mapping"); break; case SEQUENCE: - _debug("construct sequence"); + // _debug("construct sequence"); throw YamlParserException("No sequence allowed at document level, expect a mapping"); break; case MAPPING: { - _debug("construct mapping"); + // _debug("construct mapping"); MappingNode *map = (MappingNode *)(*iter); mainNativeDataMapping(map); break; @@ -430,21 +430,21 @@ void YamlParser::mainNativeDataMapping(MappingNode *map) { while(iter != map->getMapping()->end()) { - _debug("Iterating: %s", iter->first.c_str()); + // _debug("Iterating: %s", iter->first.c_str()); if(accounts.compare(iter->first) == 0) { // buildAccounts((SequenceNode *)(iter->second)); accountSequence = (SequenceNode *)(iter->second); } - else if(addressbook.compare(iter->first) == 0) - _debug("ok"); - else if(audio.compare(iter->first) == 0) - _debug("ok"); - else if(hooks.compare(iter->first) == 0) - _debug("ok"); - else if(preferences.compare(iter->first) == 0) - _debug("ok"); - else if(voiplink.compare(iter->first) == 0) - _debug("ok"); + else if(addressbook.compare(iter->first) == 0); + // _debug("ok"); + else if(audio.compare(iter->first) == 0); + // _debug("ok"); + else if(hooks.compare(iter->first) == 0); + // _debug("ok"); + else if(preferences.compare(iter->first) == 0); + // _debug("ok"); + else if(voiplink.compare(iter->first) == 0); + // _debug("ok"); else throw YamlParserException("Unknow map key in configuration"); @@ -478,7 +478,7 @@ void YamlParser::buildAccounts(SequenceNode *seq) { // tmpAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT, *iter); } - /* + std::string accountType; accountType = getConfigString(*iter, CONFIG_ACCOUNT_TYPE); diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index b6b08c5617..043ec32b73 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -209,8 +209,11 @@ void ConfigurationManager::setIp2IpDetails(const std::map<std::string, std::map<std::string, std::string> ConfigurationManager::getTlsSettings( const std::string& section) { + std::map<std::string, std::string> tlsSettings; + // SIPAccount *sipaccount + tlsSettings.insert(std::pair<std::string, std::string>(TLS_LISTENER_PORT, Manager::instance().getConfigString(section, TLS_LISTENER_PORT))); tlsSettings.insert(std::pair<std::string, std::string>(TLS_ENABLE, diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index bb1325ba6b..31bc5da544 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -113,9 +113,13 @@ ManagerImpl::~ManagerImpl (void) { void ManagerImpl::init () { + _debug("Manager: Init"); + // Load accounts, init map loadAccountMap(); + _debug("Manager: account map loaded"); + initVolume(); if (_exist == 0) { @@ -1773,6 +1777,9 @@ void ManagerImpl::startVoiceMessageNotification (const AccountID& accountId, } void ManagerImpl::connectionStatusNotification () { + + _debug("Manager: connectionStatusNotification"); + if (_dbus != NULL) { _dbus->getConfigurationManager()->accountsChanged(); } @@ -3980,11 +3987,12 @@ std::vector<std::string> ManagerImpl::loadAccountOrder (void) { short ManagerImpl::loadAccountMap () { - _debug ("Loading account map"); + _debug ("Manager: Loading account map"); - buildAccounts(); + int nbAccount = buildAccounts(); + /* short nbAccount = 0; TokenList sections = _config.getSections(); std::string accountType; @@ -4060,14 +4068,17 @@ short ManagerImpl::loadAccountMap () { } _debug ("nb account loaded %i \n", nbAccount); - + */ return nbAccount; } -void ManagerImpl::buildAccounts() { +short ManagerImpl::buildAccounts() { + + _debug("Manager: Build Accounts"); Conf::YamlParser *parser; - Account *tmpAccount = 0; + Account *tmpAccount = NULL; + int nbAccount = 0; try { @@ -4084,15 +4095,56 @@ void ManagerImpl::buildAccounts() { _error("ConfigTree: %s", e.what()); } - Conf::SequenceNode *seq = parser->getAccountSequence(); + Conf::SequenceNode *seq = parser->getAccountSequence(); // Each element in sequence is a new account to create Conf::Sequence::iterator iterSeq = seq->getSequence()->begin(); + Conf::Sequence::iterator iterIP2IP = seq->getSequence()->begin(); Conf::MappingNode *map; Conf::Key accTypeKey("type"); Conf::Key accID("id"); + + // Build IP2IP first + Conf::Key iptoipID("IP2IP"); + + while(iterIP2IP != seq->getSequence()->end()) { + + map = (Conf::MappingNode *)(*iterSeq); + + Conf::ScalarNode * val = (Conf::ScalarNode *)(map->getValue(accID)); + Conf::Value accountid = val->getValue(); + + if(accountid == "IP2IP") { + + _directIpAccount = AccountCreator::createAccount(AccountCreator::SIP_DIRECT_IP_ACCOUNT, ""); + + _debug ("Manager: Create default \"account\" (used as default UDP transport)"); + if (_directIpAccount == NULL) { + _debug ("Manager: Failed to create default \"account\""); + } else { + + _accountMap[IP2IP_PROFILE] = _directIpAccount; + + // Force IP2IP settings to be loaded to be loaded + // No registration in the sense of the REGISTER method is performed. + _directIpAccount->registerVoIPLink(); + + // SIPVoIPlink is used as a singleton, it is the first call to instance here + // The SIP library initialization is done in the SIPVoIPLink constructor + // We need the IP2IP settings to be loaded at this time as they are used + // for default sip transport + + // _directIpAccount->setVoIPLink(SIPVoIPLink::instance ("")); + _directIpAccount->setVoIPLink(); + + break; + } + } + + iterIP2IP++; + } while(iterSeq != seq->getSequence()->end()) { map = (Conf::MappingNode *)(*iterSeq); @@ -4103,16 +4155,25 @@ void ManagerImpl::buildAccounts() { val = (Conf::ScalarNode *)(map->getValue(accID)); Conf::Value accountid = val->getValue(); - if (accountType == "sip") { - tmpAccount = AccountCreator::createAccount(AccountCreator::SIP_ACCOUNT, accountid); + _debug("accountid: %s", accountid.c_str()); + if (accountType == "SIP" && accountid != "IP2IP") { _debug("Account is SIP!!!"); + tmpAccount = AccountCreator::createAccount(AccountCreator::SIP_ACCOUNT, accountid); } - else if (accountType == "iax") { + else if (accountType == "IAX" && accountid != "IP2IP") { tmpAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT, accountid); } tmpAccount->unserialize(map); + if (tmpAccount != NULL) { + _debug ("Manager: Loading account %s ", accountid.c_str()); + _accountMap[accountid] = tmpAccount; + // tmpAccount->setVoIPLink(SIPVoIPLink::instance ("")); + tmpAccount->setVoIPLink(); + nbAccount++; + } + iterSeq++; } @@ -4125,6 +4186,8 @@ void ManagerImpl::buildAccounts() { parser = NULL; + return nbAccount; + } void ManagerImpl::unloadAccountMap () { diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index a5d03170e4..4bc17af4e8 100755 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -113,7 +113,7 @@ class ManagerImpl { ~ManagerImpl (void); - void buildAccounts(); + short buildAccounts(); /** * Initialisation of thread (sound) and map. diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 343c014bad..518e5bee58 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -57,7 +57,7 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _tlsSetting (NULL) , _dtmfType(OVERRTP) , _displayName ("") - , _tlsEnable(false) + , _tlsEnable("") , _tlsPortStr("") , _tlsCaListFile("") , _tlsCertificateFile("") @@ -85,8 +85,11 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _zrtpDisplaySasOnce(false) , _zrtpHelloHash(false) , _zrtpNotSuppWarning(false) + , _useragent("SFLphone") { + _debug("Sip account constructor called"); + // IP2IP settings must be loaded before singleton instanciation, cannot call it here... // _link = SIPVoIPLink::instance (""); @@ -120,6 +123,8 @@ void SIPAccount::unserialize(Conf::MappingNode *map) Conf::MappingNode *tlsMap; Conf::MappingNode *zrtpMap; + _debug("SipAccount: Unserialize"); + val = (Conf::ScalarNode *)(map->getValue(aliasKey)); _alias = val->getValue(); val = (Conf::ScalarNode *)(map->getValue(typeKey)); diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index a005ab4440..384597df43 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -266,6 +266,8 @@ SIPVoIPLink::SIPVoIPLink (const AccountID& accountID) , _regPort (atoi (DEFAULT_SIP_PORT)) , _clients (0) { + + _debug("SIPVOIPLINK"); // to get random number for RANDOM_PORT srand (time (NULL)); -- GitLab From 064d0bfaa223ab3ce0d4227903222a48551055d3 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 5 Jul 2010 18:59:02 -0400 Subject: [PATCH 124/197] [#3648] Add test sequence for configuration --- sflphone-common/sequence2.yml | 158 ++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 sflphone-common/sequence2.yml diff --git a/sflphone-common/sequence2.yml b/sflphone-common/sequence2.yml new file mode 100644 index 0000000000..ba15f07f74 --- /dev/null +++ b/sflphone-common/sequence2.yml @@ -0,0 +1,158 @@ +accounts: + - id: IP2IP + alias: + username: + password: + hostname: + enable: true + type: SIP + expire: 3600 + interface: default + port: 5060 + mailbox: + publishAddr: 127.0.0.1 + publishPort: 5060 + sameasLocal: true + resolveOnce: false + codecs: 0/9/110/111/112/ + credential: + count: 0 + srtp: + enable: false + keyExchange: sdes + rtpFallback: false + zrtp: + displaySas: false + displaySasOnce: false + helloHashEnabled: false + notSuppWarning: false + tls: + certificate: + calist: + ciphers: + enable: false + method: TLSv1 + timeout: 0 + password: + privateKey: + requireCertif: false + server: + verifyClient: false + verifyServer: false + + - id: 1234 + alias: sfl-181 + username: 181 + password: sfl-181pw + hostname: sflphone.org + enable: true + type: SIP + + - id: 2345 + alias: sfl-431 + username: 431 + password: alexandre + hostname: 192.168.50.3 + enable: true + type: SIP + expire: 3600 + interface: lo + port: 5065 + mailbox: 97 + publishAddr: 127.0.0.1 + publishPort: 5065 + sameasLocal: true + resolveOnce: false + codecs: 0/9/110/111/112/ + credential: + count: 0 + srtp: + enable: true + keyExchange: sdes + rtpFallback: true + zrtp: + displaySas: true + displaySasOnce: false + helloHashEnabled: true + notSuppWarning: true + tls: + certificate: /home/msavard/Development/sflphone/sflphone-client-gnome/config.guess + calist: /home/msavard/Development/sflphone/sflphone-client-gnome/aclocal.m4 + ciphers: + enable: true + method: TLSv1 + timeout: 0 + password: + privateKey: /home/msavard/Development/sflphone/sflphone-client-gnome/config.log + requireCertif: true + server: + verifyClient: true + verifyServer: true + +addressbook: + photo: false + enabled: true + list: 1243608768.30329.0@emilou-desktop/1243456917.15690.23@emilou-desktop/ + max_results: 25 + business: true + home: false + mobile: false + +audio: + alsa: + cardin: 0 + cardout: 0 + cardout: 0 + framesize: 20 + plugin: default + smplrate: 44100 + pulse: + devicePlayback: + deviceRecord: + deviceRingtone: + recordpath: /home/msavard/Bureau + ringchoice: /usr/share/sflphone/ringtones/konga.ul + volumemic: 100 + volumespkr: 100 + +hooks: + iax2Enabled: false + numberAddPrefix: false + numberEnabled: false + sipEnabled: false + urlCommand: x-www-browser + urlSipField: X-sflphone-url + +preferences: + order: 1234/2345 + audioapi: 0 + dialpaddisplay: 0 + historyenabled: 1 + historylimit: 30 + historymaxCalls: 20 + notifyall: true + notifymails: false + zoneToneChoice: North America + registrationexpire: 180 + ringtonesenable: true + portnum: 5060 + searchbardisplay: true + starthidden: 0 + volumedisplay: 0 + windowheight: 332 + windowpopup: 0 + windowposition: 0 + windowposition: 24 + windowwidth: 240 + zeroconfenable: false + md5Hash: false + +voiplink: + playDtmf: true + playTones: true + pulseLength: 250 + sendDTMFas: 0 + stunenable: 0 + stunserver: stun.sflphone.org + symmetric: true + zidFile: sfl.zid \ No newline at end of file -- GitLab From fd8e77db681b368d94003adb03be8ad3d3c37e14 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 6 Jul 2010 11:24:01 -0400 Subject: [PATCH 125/197] [#3650] Add configuration preferences --- sflphone-client-gnome/src/actions.c | 16 ++- sflphone-client-gnome/src/dbus/dbus.c | 2 + sflphone-common/sequence2.yml | 103 ++++++++++++------ sflphone-common/src/Makefile.am | 2 + sflphone-common/src/config/yamlparser.cpp | 26 +++-- sflphone-common/src/config/yamlparser.h | 20 ++++ .../src/dbus/configurationmanager.cpp | 4 +- sflphone-common/src/managerimpl.cpp | 56 +++++++--- sflphone-common/src/managerimpl.h | 7 +- sflphone-common/src/sip/sipaccount.cpp | 93 +++++++++------- sflphone-common/src/sip/sipaccount.h | 20 ++++ sflphone-common/src/sip/sipvoiplink.cpp | 1 + 12 files changed, 244 insertions(+), 106 deletions(-) mode change 100644 => 100755 sflphone-common/sequence2.yml mode change 100644 => 100755 sflphone-common/src/sip/sipaccount.cpp mode change 100644 => 100755 sflphone-common/src/sip/sipaccount.h diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index 2f57ee5679..3f900f9b8d 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -203,22 +203,28 @@ void sflphone_fill_account_list (void) { gchar** array; gchar** accountID; unsigned int i; - int count; - GQueue *codeclist; - - DEBUG("SFLphone: Fill account list"); + int count; + GQueue *codeclist; - count = current_account_get_message_number (); + DEBUG("SFLphone: Fill account list"); + + count = current_account_get_message_number (); account_list_clear (); array = (gchar **)dbus_account_list(); if(array) { + /* + if(!(*accountID)) + DEBUG("hhhhhhhhhmmmmmmmmmmmm"); + */ + for (accountID = array; *accountID; accountID++) { account_t * a = g_new0(account_t,1); a->accountID = g_strdup(*accountID); + DEBUG("------------------- Account ID %s", a->accountID); a->credential_information = NULL; // TODO Clean codec list QUEUE account_list_add(a); diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index a5273a2ee0..24cb2d6f06 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -893,6 +893,8 @@ dbus_account_details(gchar * accountID) GError *error = NULL; GHashTable * details; + DEBUG("Dbus: Get account detail accountid %s", accountID); + if (!org_sflphone_SFLphone_ConfigurationManager_get_account_details( configurationManagerProxy, accountID, &details, &error)) { diff --git a/sflphone-common/sequence2.yml b/sflphone-common/sequence2.yml old mode 100644 new mode 100755 index ba15f07f74..d8d04011dc --- a/sflphone-common/sequence2.yml +++ b/sflphone-common/sequence2.yml @@ -1,6 +1,6 @@ accounts: - id: IP2IP - alias: + alias: ip2ip username: password: hostname: @@ -27,6 +27,7 @@ accounts: helloHashEnabled: false notSuppWarning: false tls: + tlsPort: 5061 certificate: calist: ciphers: @@ -40,27 +41,61 @@ accounts: verifyClient: false verifyServer: false - - id: 1234 + - id: Account:1278342101 alias: sfl-181 username: 181 password: sfl-181pw - hostname: sflphone.org + hostname: 192.168.50.3 enable: true type: SIP + expire: 3600 + interface: default + port: 5060 + mailbox: 97 + publishAddr: 192.168.50.182 + publishPort: 5060 + sameasLocal: true + resolveOnce: false + codecs: 0/9/110/111/112/ + credential: + count: 0 + srtp: + enable: true + keyExchange: sdes + rtpFallback: true + zrtp: + displaySas: false + displaySasOnce: false + helloHashEnabled: false + notSuppWarning: false + tls: + tlsPort: 5061 + certificate: /home/msavard/Development/sflphone/sflphone-client-gnome/config.guess + calist: /home/msavard/Development/sflphone/sflphone-client-gnome/aclocal.m4 + ciphers: + enable: true + method: TLSv1 + timeout: 0 + password: + privateKey: /home/msavard/Development/sflphone/sflphone-client-gnome/config.log + requireCertif: true + server: + verifyClient: true + verifyServer: true - - id: 2345 + - id: Account:1278343345 alias: sfl-431 username: 431 password: alexandre hostname: 192.168.50.3 - enable: true + enable: false type: SIP expire: 3600 interface: lo - port: 5065 + port: 5060 mailbox: 97 - publishAddr: 127.0.0.1 - publishPort: 5065 + publishAddr: 192.168.50.182 + publishPort: 5060 sameasLocal: true resolveOnce: false codecs: 0/9/110/111/112/ @@ -71,23 +106,24 @@ accounts: keyExchange: sdes rtpFallback: true zrtp: - displaySas: true + displaySas: false displaySasOnce: false - helloHashEnabled: true - notSuppWarning: true + helloHashEnabled: false + notSuppWarning: false tls: + tlsPort: 5061 certificate: /home/msavard/Development/sflphone/sflphone-client-gnome/config.guess calist: /home/msavard/Development/sflphone/sflphone-client-gnome/aclocal.m4 ciphers: - enable: true + enable: false method: TLSv1 timeout: 0 password: privateKey: /home/msavard/Development/sflphone/sflphone-client-gnome/config.log requireCertif: true server: - verifyClient: true - verifyServer: true + verifyClient: false + verifyServer: false addressbook: photo: false @@ -124,27 +160,26 @@ hooks: urlSipField: X-sflphone-url preferences: - order: 1234/2345 - audioapi: 0 - dialpaddisplay: 0 - historyenabled: 1 - historylimit: 30 - historymaxCalls: 20 - notifyall: true - notifymails: false + order: 1234/2345/ + audioApi: 0 + dialpadDisplay: 0 + historyEnabled: 1 + historyLimit: 30 + historyMaxCalls: 20 + notifyAll: true + notifyMails: false zoneToneChoice: North America - registrationexpire: 180 - ringtonesenable: true - portnum: 5060 - searchbardisplay: true - starthidden: 0 - volumedisplay: 0 - windowheight: 332 - windowpopup: 0 - windowposition: 0 - windowposition: 24 - windowwidth: 240 - zeroconfenable: false + registrationExpire: 180 + ringtoneEnabled: true + portNum: 5060 + searchBarDisplay: true + startHidden: 0 + volumeDisplay: 0 + windowHeight: 332 + windowPopup: 0 + windowPosition: 0 + windowWidth: 240 + zeroConfenable: false md5Hash: false voiplink: diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index 606f981112..d97477c85f 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -10,6 +10,7 @@ sflphoned_SOURCES = \ conference.cpp \ voiplink.cpp \ main.cpp \ + preferences.cpp \ managerimpl.cpp \ managerimpl_registration.cpp \ observer.cpp \ @@ -47,6 +48,7 @@ noinst_LTLIBRARIES = libsflphone.la noinst_HEADERS = \ conference.h \ voiplink.h \ + preferences.h \ managerimpl.h \ manager.h \ global.h \ diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index a1c4a9dbd7..7410eb8e12 100755 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -432,19 +432,23 @@ void YamlParser::mainNativeDataMapping(MappingNode *map) { // _debug("Iterating: %s", iter->first.c_str()); if(accounts.compare(iter->first) == 0) { - // buildAccounts((SequenceNode *)(iter->second)); accountSequence = (SequenceNode *)(iter->second); } - else if(addressbook.compare(iter->first) == 0); - // _debug("ok"); - else if(audio.compare(iter->first) == 0); - // _debug("ok"); - else if(hooks.compare(iter->first) == 0); - // _debug("ok"); - else if(preferences.compare(iter->first) == 0); - // _debug("ok"); - else if(voiplink.compare(iter->first) == 0); - // _debug("ok"); + else if(addressbook.compare(iter->first) == 0) { + addressbookSequence = (SequenceNode *)(iter->second); + } + else if(audio.compare(iter->first) == 0) { + audioSequence = (SequenceNode *)(iter->second); + } + else if(hooks.compare(iter->first) == 0) { + hooksSequence = (SequenceNode *)(iter->second); + } + else if(preferences.compare(iter->first) == 0) { + preferenceSequence = (SequenceNode *)(iter->second); + } + else if(voiplink.compare(iter->first) == 0) { + voiplinkSequence = (SequenceNode *)(iter->second); + } else throw YamlParserException("Unknow map key in configuration"); diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h index fdc13f1c9a..c1305bff6f 100755 --- a/sflphone-common/src/config/yamlparser.h +++ b/sflphone-common/src/config/yamlparser.h @@ -80,6 +80,16 @@ class YamlParser { SequenceNode *getAccountSequence(void) { return accountSequence; }; + SequenceNode *getPreferenceSequence(void) { return preferenceSequence; } + + SequenceNode *getAddressbookSequence(void) { return preferenceSequence; } + + SequenceNode *getAudioSequence(void) { return preferenceSequence; } + + SequenceNode *getHooksSequence(void) { return preferenceSequence; } + + SequenceNode *getVoiplinkSequence(void) { return preferenceSequence; } + private: /** @@ -131,6 +141,16 @@ class YamlParser { SequenceNode *accountSequence; + SequenceNode *preferenceSequence; + + SequenceNode *addressbookSequence; + + SequenceNode *audioSequence; + + SequenceNode *hooksSequence; + + SequenceNode *voiplinkSequence; + }; } diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index 043ec32b73..608d91622a 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -50,7 +50,9 @@ ConfigurationManager::ConfigurationManager(DBus::Connection& connection) : std::map<std::string, std::string> ConfigurationManager::getAccountDetails( const std::string& accountID) { - return Manager::instance().getAccountDetails(accountID); + + _debug("ConfigurationManager: get account details %s", accountID.c_str()); + return Manager::instance().getAccountDetails(accountID); } std::map<std::string, std::string> ConfigurationManager::getTlsSettingsDefault( diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 31bc5da544..f3a5e6ed63 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3281,25 +3281,35 @@ std::vector<std::string> ManagerImpl::getAccountList () { std::vector<std::string> account_order; unsigned int i; + _debug("Manager: Get account list"); + account_order = loadAccountOrder(); AccountMap::iterator iter; // The IP2IP profile is always available, and first in the list iter = _accountMap.find(IP2IP_PROFILE); - if (iter->second != NULL) - v.push_back(iter->first.data()); + if (iter->second != NULL) { + _debug("PUSHING BACK %s", iter->first.c_str()); + // v.push_back(iter->first.data()); + v.push_back(iter->second->getAccountID()); + } + else { + _error("Manager: could not find IP2IP profile in getAccount list"); + } // If no order has been set, load the default one // ie according to the creation date. if (account_order.size() == 0) { + _debug("Manager: account order is empty"); iter = _accountMap.begin(); while (iter != _accountMap.end()) { if (iter->second != NULL && iter->first != IP2IP_PROFILE) { - //_debug("PUSHING BACK %s\n", iter->first.c_str()); - v.push_back(iter->first.data()); + _debug("PUSHING BACK %s", iter->first.c_str()); + // v.push_back(iter->first.data()); + v.push_back(iter->second->getAccountID()); } iter++; @@ -3309,14 +3319,16 @@ std::vector<std::string> ManagerImpl::getAccountList () { // Otherelse, load the custom one // ie according to the saved order else { - + _debug("Manager: Load account list according to preferences"); for (i = 0; i < account_order.size(); i++) { // This account has not been loaded, so we ignore it if ((iter = _accountMap.find(account_order[i])) != _accountMap.end()) { // If the account is valid if (iter->second != NULL && iter->first != IP2IP_PROFILE) { - v.push_back(iter->first.data()); + _debug("PUSHING BACK %s\n", iter->first.c_str()); + // v.push_back(iter->first.data()); + v.push_back(iter->second->getAccountID()); } } } @@ -3329,10 +3341,12 @@ std::map<std::string, std::string> ManagerImpl::getAccountDetails ( const AccountID& accountID) { std::map<std::string, std::string> a; + _debug("getAccountDetails %s", accountID.c_str()); + Account * account = _accountMap[accountID]; if (account == NULL) { - _debug ("Cannot getAccountDetails on a non-existing accountID %s. Defaults will be used.", accountID.c_str()); + _debug ("Cannot getAccountDetails on a non-existing accountID %s. Defaults will be used.", accountID.c_str()); } a.insert(std::pair<std::string, std::string>(ACCOUNT_ID, accountID)); @@ -3981,7 +3995,11 @@ std::vector<std::string> ManagerImpl::loadAccountOrder (void) { std::string account_list; std::vector<std::string> account_vect; - account_list = getConfigString(PREFERENCES, CONFIG_ACCOUNTS_ORDER); + Conf::Key accountOrder("order"); + + // account_list = getConfigString(PREFERENCES, CONFIG_ACCOUNTS_ORDER); + account_list = preferences.getAccountOrder(); + return unserialize(account_list); } @@ -3989,8 +4007,7 @@ short ManagerImpl::loadAccountMap () { _debug ("Manager: Loading account map"); - - int nbAccount = buildAccounts(); + int nbAccount = buildConfiguration(); /* short nbAccount = 0; @@ -4072,11 +4089,11 @@ short ManagerImpl::loadAccountMap () { return nbAccount; } -short ManagerImpl::buildAccounts() { +short ManagerImpl::buildConfiguration() { _debug("Manager: Build Accounts"); - Conf::YamlParser *parser; + // Conf::YamlParser *parser; Account *tmpAccount = NULL; int nbAccount = 0; @@ -4092,9 +4109,12 @@ short ManagerImpl::buildAccounts() { } catch (Conf::YamlParserException &e) { - _error("ConfigTree: %s", e.what()); + _error("Manager: %s", e.what()); } + // build preferences + preferences.unserialize((Conf::MappingNode *)(parser->getAccountSequence())); + Conf::SequenceNode *seq = parser->getAccountSequence(); // Each element in sequence is a new account to create @@ -4164,9 +4184,17 @@ short ManagerImpl::buildAccounts() { tmpAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT, accountid); } - tmpAccount->unserialize(map); + _debug("ok"); if (tmpAccount != NULL) { + + try { + tmpAccount->unserialize(map); + } + catch(SipAccountException &e) { + _error("Manager: %s", e.what()); + } + _debug ("Manager: Loading account %s ", accountid.c_str()); _accountMap[accountid] = tmpAccount; // tmpAccount->setVoIPLink(SIPVoIPLink::instance ("")); diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index 4bc17af4e8..a3a521e754 100755 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -56,6 +56,7 @@ #include "audio/mainbuffer.h" #include "yamlparser.h" +#include "preferences.h" class AudioLayer; class GuiFramework; @@ -113,7 +114,7 @@ class ManagerImpl { ~ManagerImpl (void); - short buildAccounts(); + short buildConfiguration(); /** * Initialisation of thread (sound) and map. @@ -1344,6 +1345,10 @@ private: */ void check_call_configuration (const CallID& id, const std::string& to, Call::CallConfiguration *callConfig); + Conf::YamlParser *parser; + + Preferences preferences; + #ifdef TEST bool testCallAccountMap(); bool testAccountMap(); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp old mode 100644 new mode 100755 index 518e5bee58..42ae1e306f --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -126,96 +126,107 @@ void SIPAccount::unserialize(Conf::MappingNode *map) _debug("SipAccount: Unserialize"); val = (Conf::ScalarNode *)(map->getValue(aliasKey)); - _alias = val->getValue(); + if(val) { _alias = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(typeKey)); - _type = val->getValue(); + if(val) { _type = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(idKey)); - _accountID = val->getValue(); + if(val) { _accountID = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(usernameKey)); - _username = val->getValue(); + if(val) { _username = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(passwordKey)); - _password = val->getValue(); + if(val) { _password = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(hostnameKey)); - _hostname = val->getValue(); + _debug("------------------------------------- hostname from config: %s, %s", _accountID.c_str(), val->getValue().c_str()); + if(val) { _hostname = val->getValue(); val = NULL; } + _debug("------------------------------------- hostname from config: %s, %s", _accountID.c_str(), _hostname.c_str()); val = (Conf::ScalarNode *)(map->getValue(accountEnableKey)); - _enabled = (val->getValue().compare("true") == 0) ? true : false; + if(val) { _enabled = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); - + val = (Conf::ScalarNode *)(map->getValue(codecsKey)); + if(val) { val = NULL; } // _codecOrder = val->getValue(); - + val = (Conf::ScalarNode *)(map->getValue(expireKey)); - _registrationExpire = val->getValue(); + if(val) { _registrationExpire = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(interfaceKey)); - _interface = val->getValue(); + if(val) { _interface = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(portKey)); - _localPort = atoi(val->getValue().data()); + if(val) { _localPort = atoi(val->getValue().data()); val = NULL; } // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); val = (Conf::ScalarNode *)(map->getValue(publishAddrKey)); - _publishedIpAddress = val->getValue(); + if(val) { _publishedIpAddress = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(publishPortKey)); - _publishedPort = atoi(val->getValue().data()); + if(val) { _publishedPort = atoi(val->getValue().data()); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(sameasLocalKey)); - _publishedSameasLocal = (val->getValue().compare("true") == 0) ? true : false; + if(val) { _publishedSameasLocal = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } val = (Conf::ScalarNode *)(map->getValue(resolveOnceKey)); - _resolveOnce = (val->getValue().compare("true") == 0) ? true : false; + if(val) { _resolveOnce = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } val = (Conf::ScalarNode *)(map->getValue(dtmfTypeKey)); + if(val) { val = NULL; } // _dtmfType = atoi(val->getValue(); // stun enabled // get srtp submap srtpMap = (Conf::MappingNode *)(map->getValue(srtpKey)); + if(!srtpMap) + throw SipAccountException(" did not found srtp map"); val = (Conf::ScalarNode *)(srtpMap->getValue(srtpEnableKey)); - _srtpEnabled = (val->getValue().compare("true") == 0) ? true : false; + if(val) { _srtpEnabled = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } val = (Conf::ScalarNode *)(srtpMap->getValue(keyExchangeKey)); - _srtpKeyExchange = val->getValue(); + if(val) { _srtpKeyExchange = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(srtpMap->getValue(rtpFallbackKey)); - _srtpFallback = (val->getValue().compare("true") == 0) ? true : false; - + if(val) { _srtpFallback = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + // get zrtp submap zrtpMap = (Conf::MappingNode *)(map->getValue(zrtpKey)); + if(!zrtpMap) + throw SipAccountException(" did not found zrtp map"); val = (Conf::ScalarNode *)(zrtpMap->getValue(displaySasKey)); - _zrtpDisplaySas = (val->getValue().compare("true") == 0) ? true : false; + if(val) { _zrtpDisplaySas = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } val = (Conf::ScalarNode *)(zrtpMap->getValue(displaySasOnceKey)); - _zrtpDisplaySasOnce = (val->getValue().compare("true") == 0) ? true : false; + if(val) { _zrtpDisplaySasOnce = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } val = (Conf::ScalarNode *)(zrtpMap->getValue(helloHashEnabledKey)); - _zrtpHelloHash = (val->getValue().compare("true") == 0) ? true : false; + if(val) { _zrtpHelloHash = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } val = (Conf::ScalarNode *)(zrtpMap->getValue(notSuppWarningKey)); - _zrtpNotSuppWarning = (val->getValue().compare("true") == 0) ? true : false; + if(val) { _zrtpNotSuppWarning = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } // get tls submap tlsMap = (Conf::MappingNode *)(map->getValue(tlsKey)); + if(!tlsMap) + throw SipAccountException(" did not found tls map"); val = (Conf::ScalarNode *)(tlsMap->getValue(tlsEnableKey)); - _tlsEnable = val->getValue(); + if(val) { _tlsEnable = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(tlsPortKey)); - _tlsPortStr = val->getValue(); + if(val) { _tlsPortStr = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(certificateKey)); - _tlsCertificateFile = val->getValue(); + if(val) { _tlsCertificateFile = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(calistKey)); - _tlsCaListFile = val->getValue(); + if(val) { _tlsCaListFile = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(ciphersKey)); - _tlsCiphers = val->getValue(); + if(val) { _tlsCiphers = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(methodKey)); - _tlsMethod = val->getValue(); + if(val) { _tlsMethod = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(timeoutKey)); - _tlsNegotiationTimeoutSec = val->getValue(); - _tlsNegotiationTimeoutMsec = val->getValue(); + if(val) _tlsNegotiationTimeoutSec = val->getValue(); + if(val) { _tlsNegotiationTimeoutMsec = val->getValue(); val=NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(tlsPasswordKey)); - _tlsPassword = val->getValue(); + if(val) { _tlsPassword = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(privateKeyKey)); - _tlsPrivateKeyFile = val->getValue(); + if(val) { _tlsPrivateKeyFile = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(requireCertifKey)); - _tlsRequireClientCertificate = (val->getValue().compare("true") == 0) ? true : false; + if(val) { _tlsRequireClientCertificate = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(serverKey)); - _tlsServerName = val->getValue(); + if(val) { _tlsServerName = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(verifyClientKey)); - _tlsVerifyServer = (val->getValue().compare("true") == 0) ? true : false; + if(val) { _tlsVerifyServer = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } val = (Conf::ScalarNode *)(tlsMap->getValue(verifyServerKey)); - _tlsVerifyClient = (val->getValue().compare("true") == 0) ? true : false; + if(val) { _tlsVerifyClient = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + } @@ -337,7 +348,7 @@ int SIPAccount::registerVoIPLink() initCredential(); // Init TLS settings if the user wants to use TLS - bool tlsEnabled = Manager::instance().getConfigBool (_accountID, TLS_ENABLE); + bool tlsEnabled = false;// Manager::instance().getConfigBool (_accountID, TLS_ENABLE); if (tlsEnabled) { _transportType = PJSIP_TRANSPORT_TLS; @@ -345,7 +356,7 @@ int SIPAccount::registerVoIPLink() } // Init STUN settings for this account if the user selected it - bool stunEnabled = Manager::instance().getConfigBool (_accountID, STUN_ENABLE); + bool stunEnabled = _stunEnabled; // Manager::instance().getConfigBool (_accountID, STUN_ENABLE); if (stunEnabled) { _transportType = PJSIP_TRANSPORT_START_OTHER; @@ -680,6 +691,8 @@ std::string SIPAccount::getServerUri (void) // UDP does not require the transport specification + _debug("---------------------------- _hostname %s", _hostname.c_str()); + if (_transportType == PJSIP_TRANSPORT_TLS) { scheme = "sips:"; transport = ";transport=" + std::string (pjsip_transport_get_type_name (_transportType)); diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h old mode 100644 new mode 100755 index 60f0718393..0b16480e9d --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -42,6 +42,7 @@ #include "pjsip/sip_transport_tls.h" #include "pjsip/sip_types.h" #include "config/serializable.h" +#include <exception> enum DtmfType { OVERRTP, SIPINFO}; @@ -95,6 +96,25 @@ class SIPVoIPLink; * @brief A SIP Account specify SIP specific functions and object (SIPCall/SIPVoIPLink) */ +class SipAccountException : public std::exception +{ + public: + SipAccountException(const std::string& str="") throw() : errstr(str) {} + + virtual ~SipAccountException() throw() {} + + virtual const char *what() const throw() { + std::string expt("SipAccountException occured: "); + expt.append(errstr); + + return expt.c_str(); + } + private: + std::string errstr; + +}; + + class SIPAccount : public Account { public: diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 384597df43..0930a023a7 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -577,6 +577,7 @@ int SIPVoIPLink::sendRegister (AccountID id) std::string fromUri = account->getFromUri(); std::string srvUri = account->getServerUri(); + _debug("----------------------------------------------- srvUri %s, %s", account->getAccountID().c_str(), srvUri.c_str()); std::string address = findLocalAddressFromUri (srvUri, account->getAccountTransport ()); int port = findLocalPortFromUri (srvUri, account->getAccountTransport ()); -- GitLab From 37ba1dcab85d682be8cba6462a4c26e4c9c3b674 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 6 Jul 2010 12:00:25 -0400 Subject: [PATCH 126/197] [#3648] Implement credential serialization --- sflphone-common/src/managerimpl.h | 3 +-- sflphone-common/src/sip/sipaccount.cpp | 29 ++++++++++++++++++++++-- sflphone-common/src/sip/sipaccount.h | 31 ++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index a3a521e754..608f369524 100755 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -113,6 +113,7 @@ class ManagerImpl { ManagerImpl (void); ~ManagerImpl (void); + Preferences preferences; short buildConfiguration(); @@ -1347,8 +1348,6 @@ private: Conf::YamlParser *parser; - Preferences preferences; - #ifdef TEST bool testCallAccountMap(); bool testAccountMap(); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 42ae1e306f..10b33c10e3 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -36,6 +36,28 @@ #include <pwd.h> +Credentials::Credentials() : credentialCount(0) {} + +Credentials::~Credentials() {} + +void Credentials::serialize(Engine *engine) +{ + +} + +void Credentials::unserialize(Conf::MappingNode *map) +{ + + Conf::ScalarNode *val = NULL; + + _debug("SipAccount: Unserialize"); + + val = (Conf::ScalarNode *)(map->getValue(credentialCountKey)); + if(val) { credentialCount = atoi(val->getValue().data()); val = NULL; } +} + + + SIPAccount::SIPAccount (const AccountID& accountID) : Account (accountID, "sip") , _routeSet("") @@ -122,6 +144,7 @@ void SIPAccount::unserialize(Conf::MappingNode *map) Conf::MappingNode *srtpMap; Conf::MappingNode *tlsMap; Conf::MappingNode *zrtpMap; + Conf::MappingNode *credMap; _debug("SipAccount: Unserialize"); @@ -167,6 +190,8 @@ void SIPAccount::unserialize(Conf::MappingNode *map) // _dtmfType = atoi(val->getValue(); // stun enabled + credMap = (Conf::MappingNode *)(map->getValue(credKey)); + credentials.unserialize(credMap); // get srtp submap srtpMap = (Conf::MappingNode *)(map->getValue(srtpKey)); @@ -242,12 +267,12 @@ void SIPAccount::setVoIPLink() { int SIPAccount::initCredential (void) { int credentialCount = 0; - credentialCount = Manager::instance().getConfigInt (_accountID, CONFIG_CREDENTIAL_NUMBER); + credentialCount = credentials.getCredentialCount();// Manager::instance().getConfigInt (_accountID, CONFIG_CREDENTIAL_NUMBER); credentialCount += 1; bool md5HashingEnabled = false; int dataType = 0; - md5HashingEnabled = Manager::instance().getConfigBool (PREFERENCES, CONFIG_MD5HASH); + md5HashingEnabled = Manager::instance().preferences.getMd5Hash(); // Manager::instance().getConfigBool (PREFERENCES, CONFIG_MD5HASH); std::string digest; // Create the credential array diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 0b16480e9d..1db6cebfa9 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -43,6 +43,7 @@ #include "pjsip/sip_types.h" #include "config/serializable.h" #include <exception> +#include <map> enum DtmfType { OVERRTP, SIPINFO}; @@ -89,6 +90,9 @@ const Conf::Key serverKey("server"); const Conf::Key verifyClientKey("verifyClient"); const Conf::Key verifyServerKey("verifyServer"); +const Conf::Key credKey("credential"); +const Conf::Key credentialCountKey("count"); + class SIPVoIPLink; /** @@ -115,6 +119,32 @@ class SipAccountException : public std::exception }; +class Credentials : public Serializable +{ + public: + + typedef std::map<std::string, std::string> CredentialMap; + + Credentials(); + + ~Credentials(); + + virtual void serialize(Engine *engine); + + virtual void unserialize(Conf::MappingNode *map); + + int getCredentialCount(void) { return credentialCount; } + void setCredentialCount(int count) { credentialCount = count; } + + private: + + int credentialCount; + + CredentialMap credentialMap; + +}; + + class SIPAccount : public Account { public: @@ -546,6 +576,7 @@ class SIPAccount : public Account pjsip_cred_info *_cred; std::string _realm; std::string _authenticationUsername; + Credentials credentials; // The TLS settings, if tls is chosen as // a sip transport. -- GitLab From 3ec5795af8db19e953660b8b84278fd8dccd784b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 6 Jul 2010 12:53:19 -0400 Subject: [PATCH 127/197] [#3648] Fix stun initialization --- sflphone-common/sequence2.yml | 30 +++++++++++++++----------- sflphone-common/src/managerimpl.cpp | 3 ++- sflphone-common/src/sip/sipaccount.cpp | 8 ++++++- sflphone-common/src/sip/sipaccount.h | 4 ++++ 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/sflphone-common/sequence2.yml b/sflphone-common/sequence2.yml index d8d04011dc..d60851089d 100755 --- a/sflphone-common/sequence2.yml +++ b/sflphone-common/sequence2.yml @@ -1,6 +1,6 @@ accounts: - id: IP2IP - alias: ip2ip + alias: username: password: hostname: @@ -10,11 +10,13 @@ accounts: interface: default port: 5060 mailbox: - publishAddr: 127.0.0.1 + publishAddr: 0.0.0.0 publishPort: 5060 sameasLocal: true resolveOnce: false codecs: 0/9/110/111/112/ + stunServer: stun.sflphone.org + stunEnabled: false credential: count: 0 srtp: @@ -41,7 +43,7 @@ accounts: verifyClient: false verifyServer: false - - id: Account:1278342101 + - id: Account:1278432417 alias: sfl-181 username: 181 password: sfl-181pw @@ -57,12 +59,14 @@ accounts: sameasLocal: true resolveOnce: false codecs: 0/9/110/111/112/ + stunServer: stun.sflphone.org + stunEnabled: false credential: count: 0 srtp: - enable: true + enable: false keyExchange: sdes - rtpFallback: true + rtpFallback: false zrtp: displaySas: false displaySasOnce: false @@ -73,7 +77,7 @@ accounts: certificate: /home/msavard/Development/sflphone/sflphone-client-gnome/config.guess calist: /home/msavard/Development/sflphone/sflphone-client-gnome/aclocal.m4 ciphers: - enable: true + enable: false method: TLSv1 timeout: 0 password: @@ -83,28 +87,30 @@ accounts: verifyClient: true verifyServer: true - - id: Account:1278343345 + - id: Account:1278432440 alias: sfl-431 username: 431 password: alexandre hostname: 192.168.50.3 - enable: false + enable: true type: SIP expire: 3600 - interface: lo + interface: default port: 5060 mailbox: 97 - publishAddr: 192.168.50.182 + publishAddr: 0.0.0.0 publishPort: 5060 sameasLocal: true resolveOnce: false codecs: 0/9/110/111/112/ + stunServer: stun.sflphone.org + stunEnabled: false credential: count: 0 srtp: - enable: true + enable: false keyExchange: sdes - rtpFallback: true + rtpFallback: false zrtp: displaySas: false displaySasOnce: false diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index f3a5e6ed63..a138658c99 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3410,6 +3410,7 @@ std::map<std::string, std::string> ManagerImpl::getAccountDetails ( a.insert(std::pair<std::string, std::string>(LOCAL_INTERFACE, sipaccount->getLocalInterface())); a.insert(std::pair<std::string, std::string>(PUBLISHED_SAMEAS_LOCAL, sipaccount->getPublishedSameasLocal() ? "true" : "false")); a.insert(std::pair<std::string, std::string>(PUBLISHED_ADDRESS, sipaccount->getPublishedAddress())); + std::stringstream localport; localport << sipaccount->getLocalPort(); a.insert(std::pair<std::string, std::string>(LOCAL_PORT, localport.str())); @@ -3428,7 +3429,7 @@ std::map<std::string, std::string> ManagerImpl::getAccountDetails ( a.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS_ONCE, sipaccount->getZrtpDiaplaySasOnce() ? "true" : "false")); a.insert(std::pair<std::string, std::string>(ZRTP_HELLO_HASH, sipaccount->getZrtpHelloHash() ? "true" : "false")); a.insert(std::pair<std::string, std::string>(ZRTP_NOT_SUPP_WARNING, sipaccount->getZrtpNotSuppWarning() ? "true" : "false")); - + // TLS listener is unique and parameters are modified through IP2IP_PROFILE std::stringstream tlslistenerport; tlslistenerport << sipaccount->getTlsListenerPort(); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 10b33c10e3..e0e0a9d604 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -190,6 +190,12 @@ void SIPAccount::unserialize(Conf::MappingNode *map) // _dtmfType = atoi(val->getValue(); // stun enabled + val = (Conf::ScalarNode *)(map->getValue(stunEnabledKey)); + if(val) { _stunEnabled = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(stunServerKey)); + if(val) { _stunServer = val->getValue(); val = NULL; } + _stunServerName = pj_str ( (char*) _stunServer.data()); + credMap = (Conf::MappingNode *)(map->getValue(credKey)); credentials.unserialize(credMap); @@ -495,7 +501,7 @@ void SIPAccount::initStunConfiguration (void) size_t pos; std::string stunServer, serverName, serverPort; - stunServer = Manager::instance().getConfigString (_accountID, STUN_SERVER); + stunServer = _stunServer; // Manager::instance().getConfigString (_accountID, STUN_SERVER); // Init STUN socket pos = stunServer.find (':'); diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 1db6cebfa9..0e61719e5a 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -90,6 +90,9 @@ const Conf::Key serverKey("server"); const Conf::Key verifyClientKey("verifyClient"); const Conf::Key verifyServerKey("verifyServer"); +const Conf::Key stunEnabledKey("stunEnabled"); +const Conf::Key stunServerKey("stunServer"); + const Conf::Key credKey("credential"); const Conf::Key credentialCountKey("count"); @@ -293,6 +296,7 @@ class SIPAccount : public Account * account is set to OTHER. */ inline bool isStunEnabled(void) { return (_transportType == PJSIP_TRANSPORT_START_OTHER) ? true: false; } + inline void setStunEnabled(bool enabl) { _stunEnabled = enabl; } /* * @return pj_str_t "From" uri based on account information. -- GitLab From e2a285e7d57e0b4ae3c2b9022b8407b596e450f3 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 6 Jul 2010 13:55:48 -0400 Subject: [PATCH 128/197] [#3648] Fix display name in configuration unserialization --- sflphone-common/sequence2.yml | 3 ++ sflphone-common/src/sip/sipaccount.cpp | 64 ++++++++++++++------------ sflphone-common/src/sip/sipaccount.h | 2 + 3 files changed, 39 insertions(+), 30 deletions(-) diff --git a/sflphone-common/sequence2.yml b/sflphone-common/sequence2.yml index d60851089d..98abe4fa53 100755 --- a/sflphone-common/sequence2.yml +++ b/sflphone-common/sequence2.yml @@ -17,6 +17,7 @@ accounts: codecs: 0/9/110/111/112/ stunServer: stun.sflphone.org stunEnabled: false + displayName: Alexandre Savard credential: count: 0 srtp: @@ -61,6 +62,7 @@ accounts: codecs: 0/9/110/111/112/ stunServer: stun.sflphone.org stunEnabled: false + displayName: Alexandre Savard credential: count: 0 srtp: @@ -105,6 +107,7 @@ accounts: codecs: 0/9/110/111/112/ stunServer: stun.sflphone.org stunEnabled: false + displayName: Alexandre Savard credential: count: 0 srtp: diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index e0e0a9d604..495aec57d0 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -199,6 +199,9 @@ void SIPAccount::unserialize(Conf::MappingNode *map) credMap = (Conf::MappingNode *)(map->getValue(credKey)); credentials.unserialize(credMap); + val = (Conf::ScalarNode *)(map->getValue(displayNameKey)); + if(val) { _displayName = val->getValue(); val = NULL; } + // get srtp submap srtpMap = (Conf::MappingNode *)(map->getValue(srtpKey)); if(!srtpMap) @@ -457,8 +460,9 @@ void SIPAccount::initTlsConfiguration (void) } // TLS listener is unique and should be only modified through IP2IP_PROFILE - std::string tlsPortStr = Manager::instance().getConfigString(_accountID, TLS_LISTENER_PORT); - setTlsListenerPort(atoi(tlsPortStr.c_str())); + // std::string tlsPortStr = Manager::instance().getConfigString(_accountID, TLS_LISTENER_PORT); + // setTlsListenerPort(atoi(tlsPortStr.c_str())); + setTlsListenerPort(atoi(_tlsPortStr.c_str())); _tlsSetting = (pjsip_tls_setting *) malloc (sizeof (pjsip_tls_setting)); @@ -466,33 +470,33 @@ void SIPAccount::initTlsConfiguration (void) pjsip_tls_setting_default (_tlsSetting); - std::string tlsCaListFile = Manager::instance().getConfigString (_accountID, TLS_CA_LIST_FILE); - std::string tlsCertificateFile = Manager::instance().getConfigString (_accountID, TLS_CERTIFICATE_FILE); - std::string tlsPrivateKeyFile = Manager::instance().getConfigString (_accountID, TLS_PRIVATE_KEY_FILE); - std::string tlsPassword = Manager::instance().getConfigString (_accountID, TLS_PASSWORD); - std::string tlsMethod = Manager::instance().getConfigString (_accountID, TLS_METHOD); - std::string tlsCiphers = Manager::instance().getConfigString (_accountID, TLS_CIPHERS); - std::string tlsServerName = Manager::instance().getConfigString (_accountID, TLS_SERVER_NAME); - bool tlsVerifyServer = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_SERVER); - bool tlsVerifyClient = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_CLIENT); - bool tlsRequireClientCertificate = Manager::instance().getConfigBool (_accountID, TLS_REQUIRE_CLIENT_CERTIFICATE); - std::string tlsNegotiationTimeoutSec = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_SEC); - std::string tlsNegotiationTimeoutMsec = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_MSEC); - - pj_cstr (&_tlsSetting->ca_list_file, tlsCaListFile.c_str()); - pj_cstr (&_tlsSetting->cert_file, tlsCertificateFile.c_str()); - pj_cstr (&_tlsSetting->privkey_file, tlsPrivateKeyFile.c_str()); - pj_cstr (&_tlsSetting->password, tlsPassword.c_str()); - _tlsSetting->method = sslMethodStringToPjEnum (tlsMethod); - pj_cstr (&_tlsSetting->ciphers, tlsCiphers.c_str()); - pj_cstr (&_tlsSetting->server_name, tlsServerName.c_str()); - - _tlsSetting->verify_server = (tlsVerifyServer == true) ? PJ_TRUE: PJ_FALSE; - _tlsSetting->verify_client = (tlsVerifyClient == true) ? PJ_TRUE: PJ_FALSE; - _tlsSetting->require_client_cert = (tlsRequireClientCertificate == true) ? PJ_TRUE: PJ_FALSE; - - _tlsSetting->timeout.sec = atol (tlsNegotiationTimeoutSec.c_str()); - _tlsSetting->timeout.msec = atol (tlsNegotiationTimeoutMsec.c_str()); + // std::string tlsCaListFile = Manager::instance().getConfigString (_accountID, TLS_CA_LIST_FILE); + // std::string tlsCertificateFile = Manager::instance().getConfigString (_accountID, TLS_CERTIFICATE_FILE); + // std::string tlsPrivateKeyFile = Manager::instance().getConfigString (_accountID, TLS_PRIVATE_KEY_FILE); + // std::string tlsPassword = Manager::instance().getConfigString (_accountID, TLS_PASSWORD); + // std::string tlsMethod = Manager::instance().getConfigString (_accountID, TLS_METHOD); + // std::string tlsCiphers = Manager::instance().getConfigString (_accountID, TLS_CIPHERS); + // std::string tlsServerName = Manager::instance().getConfigString (_accountID, TLS_SERVER_NAME); + // bool tlsVerifyServer = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_SERVER); + // bool tlsVerifyClient = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_CLIENT); + // bool tlsRequireClientCertificate = Manager::instance().getConfigBool (_accountID, TLS_REQUIRE_CLIENT_CERTIFICATE); + // std::string tlsNegotiationTimeoutSec = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_SEC); + // std::string tlsNegotiationTimeoutMsec = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_MSEC); + + pj_cstr (&_tlsSetting->ca_list_file, _tlsCaListFile.c_str()); + pj_cstr (&_tlsSetting->cert_file, _tlsCertificateFile.c_str()); + pj_cstr (&_tlsSetting->privkey_file, _tlsPrivateKeyFile.c_str()); + pj_cstr (&_tlsSetting->password, _tlsPassword.c_str()); + _tlsSetting->method = sslMethodStringToPjEnum (_tlsMethod); + pj_cstr (&_tlsSetting->ciphers, _tlsCiphers.c_str()); + pj_cstr (&_tlsSetting->server_name, _tlsServerName.c_str()); + + _tlsSetting->verify_server = (_tlsVerifyServer == true) ? PJ_TRUE: PJ_FALSE; + _tlsSetting->verify_client = (_tlsVerifyClient == true) ? PJ_TRUE: PJ_FALSE; + _tlsSetting->require_client_cert = (_tlsRequireClientCertificate == true) ? PJ_TRUE: PJ_FALSE; + + _tlsSetting->timeout.sec = atol (_tlsNegotiationTimeoutSec.c_str()); + _tlsSetting->timeout.msec = atol (_tlsNegotiationTimeoutMsec.c_str()); } @@ -762,7 +766,7 @@ std::string SIPAccount::getContactHeader (const std::string& address, const std: transport = ""; } - _displayName = Manager::instance().getConfigString (_accountID, DISPLAY_NAME); + // _displayName = Manager::instance().getConfigString (_accountID, DISPLAY_NAME); _debug ("Display Name: %s", _displayName.c_str()); diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 0e61719e5a..24e62a697f 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -96,6 +96,8 @@ const Conf::Key stunServerKey("stunServer"); const Conf::Key credKey("credential"); const Conf::Key credentialCountKey("count"); +const Conf::Key displayNameKey("displayName"); + class SIPVoIPLink; /** -- GitLab From 862b455e157c44afc1f79f6f49a2e7ba72b39954 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 6 Jul 2010 15:17:34 -0400 Subject: [PATCH 129/197] [#3648] Add unit test for yaml emitter --- sflphone-common/src/config/yamlemitter.cpp | 41 +++++++++++++++++-- sflphone-common/src/config/yamlemitter.h | 47 ++++++++++++++++++++-- sflphone-common/src/managerimpl.cpp | 4 +- sflphone-common/src/sip/sipaccount.cpp | 4 +- sflphone-common/test/Makefile.am | 2 +- sflphone-common/test/configurationtest.cpp | 40 +++++------------- sflphone-common/test/configurationtest.h | 7 +++- 7 files changed, 99 insertions(+), 46 deletions(-) diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp index 1e0f1b481f..89ddaa79a8 100755 --- a/sflphone-common/src/config/yamlemitter.cpp +++ b/sflphone-common/src/config/yamlemitter.cpp @@ -32,13 +32,46 @@ namespace Conf { -YamlEmitter::YamlEmitter() {} +YamlEmitter::YamlEmitter() +{ + open(); +} + +YamlEmitter::~YamlEmitter() +{ + close(); +} + +void YamlEmitter::open() +{ + fd = fopen(filename.c_str(), "wb"); + + if(!fd) + throw YamlEmitterException("Could not open file descriptor"); + + if(!yaml_emitter_initialize(&emitter)) + throw YamlEmitterException("Could not open file descriptor"); -YamlEmitter::~YamlEmitter() {} + // Use unicode format + yaml_emitter_set_unicode(&emitter, 1); -void YamlEmitter::open() {} + yaml_emitter_set_output_file(&emitter, fd); -void YamlEmitter::close() {} + yaml_document_initialize(&document, NULL, NULL, NULL, 0, 0); +} + +void YamlEmitter::close() +{ + yaml_emitter_delete(&emitter); + + if(!fd) + throw YamlEmitterException("File descriptor not valid"); + + if(!fclose(fd)) + throw YamlEmitterException("Error closing file descriptor"); + + yaml_document_delete(&document); +} void YamlEmitter::read() {} diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h index 3e55d102b1..6219f6788c 100755 --- a/sflphone-common/src/config/yamlemitter.h +++ b/sflphone-common/src/config/yamlemitter.h @@ -31,15 +31,31 @@ #ifndef __YAMLEMITTER_H__ #define __YAMLEMITTER_H__ +#include <yaml.h> #include <exception> +#include <string> namespace Conf { -class YamlEmitterException : public std::exception { +#define EMITTER_BUFFERSIZE 65536 +#define EMITTER_MAXEVENT 1024 + +class YamlEmitterException : public std::exception +{ + public: + YamlEmitterException(const std::string& str="") throw() : errstr(str) {} + + virtual ~YamlEmitterException() throw() {} + + virtual const char *what() const throw() { + std::string expt("YamlParserException occured: "); + expt.append(errstr); + + return expt.c_str(); + } + private: + std::string errstr; - virtual const char *what() const throw() { - return "YamlEmitterException occured"; - } }; class YamlEmitter { @@ -61,6 +77,29 @@ class YamlEmitter { private: + std::string filename; + + FILE *fd; + + /** + * The parser structure. + */ + yaml_emitter_t emitter; + + /** + * The event structure array. + */ + yaml_event_t events[EMITTER_MAXEVENT]; + + /** + * + */ + unsigned char buffer[EMITTER_BUFFERSIZE]; + + yaml_document_t document; + + + }; } diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index a138658c99..5d0b79c92f 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3824,7 +3824,9 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, acc = getAccount(accountID); if (acc != NULL) { - acc->loadConfig(); + + + // acc->loadConfig(); if (acc->isEnabled()) { acc->registerVoIPLink(); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 495aec57d0..5c6513cda6 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -134,7 +134,7 @@ SIPAccount::~SIPAccount() void SIPAccount::serialize(Engine *engine) { - + } @@ -159,9 +159,7 @@ void SIPAccount::unserialize(Conf::MappingNode *map) val = (Conf::ScalarNode *)(map->getValue(passwordKey)); if(val) { _password = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(hostnameKey)); - _debug("------------------------------------- hostname from config: %s, %s", _accountID.c_str(), val->getValue().c_str()); if(val) { _hostname = val->getValue(); val = NULL; } - _debug("------------------------------------- hostname from config: %s, %s", _accountID.c_str(), _hostname.c_str()); val = (Conf::ScalarNode *)(map->getValue(accountEnableKey)); if(val) { _enabled = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); diff --git a/sflphone-common/test/Makefile.am b/sflphone-common/test/Makefile.am index ed3baa511e..9da8e2f603 100644 --- a/sflphone-common/test/Makefile.am +++ b/sflphone-common/test/Makefile.am @@ -40,5 +40,5 @@ LLIBS=$(CPPUNIT_LIBS) \ ../src/sflphoned-numbercleaner.o \ ../src/sflphoned-observer.o \ ../src/sflphoned-voiplink.o \ + ../src/sflphoned-preferences.o \ ../src/libsflphone.la - diff --git a/sflphone-common/test/configurationtest.cpp b/sflphone-common/test/configurationtest.cpp index 1c5805af03..bf92974cab 100755 --- a/sflphone-common/test/configurationtest.cpp +++ b/sflphone-common/test/configurationtest.cpp @@ -176,39 +176,17 @@ void ConfigurationTest::testYamlParser() } - -void ConfigurationTest::testYamlComposition() +void ConfigurationTest::testYamlEmitter() { + Conf::YamlParser *emitter; - /* - Conf::YamlDocument *doc = new Conf::YamlDocument(); - - Conf::SequenceNode *seq = new Conf::SequenceNode(doc); - Conf::MappingNode *map = new Conf::MappingNode(); - Conf::ScalarNode *sclr = new Conf::ScalarNode(); - - CPPUNIT_ASSERT(seq->getType() == Conf::SEQUENCE); - CPPUNIT_ASSERT(map->getType() == Conf::MAPPING); - CPPUNIT_ASSERT(sclr->getType() == Conf::SCALAR); - - seq->addNode(map); - seq->addNode(sclr); - - Conf::Key key("username"); - Conf::ScalarNode *val = new Conf::ScalarNode("alexandre"); - - map->setKeyValue(key, val); - - Conf::YamlNode *node = map->getValue(key); - - CPPUNIT_ASSERT(node->getType() == Conf::SCALAR); - - delete val; - - delete seq; - delete map; - delete sclr; - */ + try{ + emitter = new Conf::YamlParser("sequenceEmiter.yml"); + delete emitter; + } + catch (Conf::YamlEmitterException &e) { + _error("ConfigTree: %s", e.what()); + } } diff --git a/sflphone-common/test/configurationtest.h b/sflphone-common/test/configurationtest.h index 8c9ff82fea..00ee45e7ea 100755 --- a/sflphone-common/test/configurationtest.h +++ b/sflphone-common/test/configurationtest.h @@ -51,6 +51,7 @@ #include "global.h" #include "user_cfg.h" #include "config/yamlparser.h" +#include "config/yamlemitter.h" #include "config/yamlnode.h" class ConfigurationTest: public CppUnit::TestFixture { @@ -65,7 +66,7 @@ CPPUNIT_TEST_SUITE( ConfigurationTest ); // CPPUNIT_TEST( testDefaultValueSignalisation ); // CPPUNIT_TEST( testInitAudioDriver ); CPPUNIT_TEST( testYamlParser ); - CPPUNIT_TEST( testYamlComposition ); + CPPUNIT_TEST( testYamlEmitter ); CPPUNIT_TEST_SUITE_END(); public: @@ -98,7 +99,9 @@ public: void testYamlParser(); - void testYamlComposition(); + void testYamlEmitter(); + + }; /* Register our test module */ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ConfigurationTest, "ConfigurationTest"); -- GitLab From cbaefa248b45a27da8ab62a40bb11b0b54cdf683 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 6 Jul 2010 17:39:58 -0400 Subject: [PATCH 130/197] [#3648] --- sflphone-common/src/config/yamlemitter.cpp | 81 ++++++++++++++++++++-- sflphone-common/src/config/yamlemitter.h | 7 +- sflphone-common/src/config/yamlparser.cpp | 6 +- sflphone-common/test/configurationtest.cpp | 7 +- sflphone-common/test/configurationtest.h | 6 +- 5 files changed, 92 insertions(+), 15 deletions(-) diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp index 89ddaa79a8..aed8f1be09 100755 --- a/sflphone-common/src/config/yamlemitter.cpp +++ b/sflphone-common/src/config/yamlemitter.cpp @@ -29,10 +29,12 @@ */ #include "yamlemitter.h" +#include <stdio.h> +#include "../global.h" namespace Conf { -YamlEmitter::YamlEmitter() +YamlEmitter::YamlEmitter(const char *file) : filename(file) { open(); } @@ -50,7 +52,7 @@ void YamlEmitter::open() throw YamlEmitterException("Could not open file descriptor"); if(!yaml_emitter_initialize(&emitter)) - throw YamlEmitterException("Could not open file descriptor"); + throw YamlEmitterException("Could not initialize emitter"); // Use unicode format yaml_emitter_set_unicode(&emitter, 1); @@ -62,19 +64,88 @@ void YamlEmitter::open() void YamlEmitter::close() { - yaml_emitter_delete(&emitter); + // yaml_emitter_delete(&emitter); if(!fd) throw YamlEmitterException("File descriptor not valid"); - + + fclose(fd); + /* if(!fclose(fd)) throw YamlEmitterException("Error closing file descriptor"); + */ yaml_document_delete(&document); } void YamlEmitter::read() {} -void YamlEmitter::write() {} +void YamlEmitter::write() +{ + serializeData(); + + for(int i = 0; i < eventNumber; i++) { + if(!yaml_emitter_emit(&emitter, &(events[i]))) + throw YamlEmitterException("Falied to emit event"); + + yaml_emitter_flush(&emitter); + } + +} + +void YamlEmitter::serializeData() +{ + + unsigned char sclr[20]; + snprintf((char *)sclr, 20, "%s", "value"); + yaml_char_t *value = (yaml_char_t *)sclr; + + + // yaml_document_add_scalar(&document, NULL, value, -1, YAML_PLAIN_SCALAR_STYLE); + // yaml_emitter_dump(&emitter, &document); + eventNumber = 0; + + yaml_event_t event; + + yaml_stream_start_event_initialize(&event, YAML_UTF8_ENCODING); + events[eventNumber++] = event; + + yaml_document_start_event_initialize(&event, NULL, NULL, NULL, 0); + events[eventNumber++] = event; + + + yaml_document_end_event_initialize(&event, 0); + events[eventNumber++] = event; + + // yaml_scalar_event_initialize(event, yaml_char_t *anchor, yaml_char_t *tag, yaml_char_t *value, int length, int plain_implicit, int quoted_implicit, yaml_scalar_style_t style) + yaml_scalar_event_initialize(&event, NULL, NULL, value, 5, 0, 0, YAML_PLAIN_SCALAR_STYLE); + events[eventNumber++] = event; + + // yaml_sequence_start_event_initialize + + // yaml_sequence_end_event_initialize + + // yaml_mapping_start_event_initialize + + // yaml_mapping_end_event_initialize + + // yaml_event_delete + + yaml_stream_end_event_initialize(&event); + events[eventNumber++] = event; + +} + + +void YamlEmitter::writeDocument() +{ + unsigned char sclr[20]; + snprintf((char *)sclr, 20, "%s", "value"); + yaml_char_t *value = (yaml_char_t *)sclr; + + yaml_document_add_scalar(&document, NULL, value, -1, YAML_PLAIN_SCALAR_STYLE); + yaml_emitter_dump(&emitter, &document); + +} } diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h index 6219f6788c..2ad9dd8d2e 100755 --- a/sflphone-common/src/config/yamlemitter.h +++ b/sflphone-common/src/config/yamlemitter.h @@ -62,7 +62,7 @@ class YamlEmitter { public: - YamlEmitter(); + YamlEmitter(const char *file); ~YamlEmitter(); @@ -74,9 +74,12 @@ class YamlEmitter { void write(); + void writeDocument(); private: + void serializeData(); + std::string filename; FILE *fd; @@ -98,7 +101,7 @@ class YamlEmitter { yaml_document_t document; - + int eventNumber; }; diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index 7410eb8e12..ee1ccd6c94 100755 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -71,8 +71,10 @@ void YamlParser::close() if(!fd) throw YamlParserException("File descriptor not valid"); - if(!fclose(fd)) - throw YamlParserException("Error closing file descriptor"); + fclose(fd); + // if(!fclose(fd)) + // throw YamlParserException("Error closing file descriptor"); + } diff --git a/sflphone-common/test/configurationtest.cpp b/sflphone-common/test/configurationtest.cpp index bf92974cab..062a2faca5 100755 --- a/sflphone-common/test/configurationtest.cpp +++ b/sflphone-common/test/configurationtest.cpp @@ -178,10 +178,13 @@ void ConfigurationTest::testYamlParser() void ConfigurationTest::testYamlEmitter() { - Conf::YamlParser *emitter; + Conf::YamlEmitter *emitter; + try{ - emitter = new Conf::YamlParser("sequenceEmiter.yml"); + emitter = new Conf::YamlEmitter("/tmp/sequenceEmiter.txt"); + + emitter->writeDocument(); delete emitter; } diff --git a/sflphone-common/test/configurationtest.h b/sflphone-common/test/configurationtest.h index 00ee45e7ea..092da3112a 100755 --- a/sflphone-common/test/configurationtest.h +++ b/sflphone-common/test/configurationtest.h @@ -65,7 +65,7 @@ CPPUNIT_TEST_SUITE( ConfigurationTest ); // CPPUNIT_TEST( testDefaultValuePreferences ); // CPPUNIT_TEST( testDefaultValueSignalisation ); // CPPUNIT_TEST( testInitAudioDriver ); - CPPUNIT_TEST( testYamlParser ); +// CPPUNIT_TEST( testYamlParser ); CPPUNIT_TEST( testYamlEmitter ); CPPUNIT_TEST_SUITE_END(); @@ -99,9 +99,7 @@ public: void testYamlParser(); - void testYamlEmitter(); - - + void testYamlEmitter(); }; /* Register our test module */ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ConfigurationTest, "ConfigurationTest"); -- GitLab From 18e75e89ed4eb929e9edfa24695b12c45a3c0612 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 7 Jul 2010 11:05:41 -0400 Subject: [PATCH 131/197] [#3667] Fix memset in mainbuffer --- sflphone-common/src/audio/mainbuffer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 2ccc1f8d6e..0e34493410 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -397,7 +397,7 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID return 0; } else { - memset(buffer, 0, nbSmplToCopy*sizeof(SFLDataFormat*)); + memset(buffer, 0, nbSmplToCopy*sizeof(SFLDataFormat)); int size = 0; -- GitLab From 12cfa3feec20fddd9516f1bdfd637c1750ac3b8e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 7 Jul 2010 15:46:18 -0400 Subject: [PATCH 132/197] [#3649] Implement yaml account emiter object --- sflphone-common/src/config/yamlemitter.cpp | 93 ++++++++++--------- sflphone-common/src/config/yamlemitter.h | 38 +++++++- sflphone-common/test/configurationtest.cpp | 103 ++++++++++++++++++++- sflphone-common/test/configurationtest.h | 2 + 4 files changed, 187 insertions(+), 49 deletions(-) diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp index aed8f1be09..3998e69670 100755 --- a/sflphone-common/src/config/yamlemitter.cpp +++ b/sflphone-common/src/config/yamlemitter.cpp @@ -34,7 +34,7 @@ namespace Conf { -YamlEmitter::YamlEmitter(const char *file) : filename(file) +YamlEmitter::YamlEmitter(const char *file) : filename(file), isFirstAccount(true) { open(); } @@ -60,6 +60,9 @@ void YamlEmitter::open() yaml_emitter_set_output_file(&emitter, fd); yaml_document_initialize(&document, NULL, NULL, NULL, 0, 0); + + // Init the main configuration mapping + topLevelMapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE); } void YamlEmitter::close() @@ -82,70 +85,70 @@ void YamlEmitter::read() {} void YamlEmitter::write() { - serializeData(); - - for(int i = 0; i < eventNumber; i++) { - if(!yaml_emitter_emit(&emitter, &(events[i]))) - throw YamlEmitterException("Falied to emit event"); - - yaml_emitter_flush(&emitter); - } } void YamlEmitter::serializeData() { + yaml_emitter_dump(&emitter, &document); +} - unsigned char sclr[20]; - snprintf((char *)sclr, 20, "%s", "value"); - yaml_char_t *value = (yaml_char_t *)sclr; - - - // yaml_document_add_scalar(&document, NULL, value, -1, YAML_PLAIN_SCALAR_STYLE); - // yaml_emitter_dump(&emitter, &document); - eventNumber = 0; - - yaml_event_t event; - - yaml_stream_start_event_initialize(&event, YAML_UTF8_ENCODING); - events[eventNumber++] = event; - yaml_document_start_event_initialize(&event, NULL, NULL, NULL, 0); - events[eventNumber++] = event; +void YamlEmitter::writeAccount(MappingNode *map) +{ - - yaml_document_end_event_initialize(&event, 0); - events[eventNumber++] = event; + std::string accountstr("accounts"); + + if(isFirstAccount) { + // accountSequence need to be static outside this scope since reused each time an account is written + accountSequence = yaml_document_add_sequence (&document, NULL, YAML_BLOCK_SEQUENCE_STYLE); + int accountid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)accountstr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE); + yaml_document_append_mapping_pair (&document, topLevelMapping, accountid, accountSequence); + isFirstAccount = false; + } - // yaml_scalar_event_initialize(event, yaml_char_t *anchor, yaml_char_t *tag, yaml_char_t *value, int length, int plain_implicit, int quoted_implicit, yaml_scalar_style_t style) - yaml_scalar_event_initialize(&event, NULL, NULL, value, 5, 0, 0, YAML_PLAIN_SCALAR_STYLE); - events[eventNumber++] = event; + int accountmapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE); + yaml_document_append_sequence_item (&document, accountSequence, accountmapping); - // yaml_sequence_start_event_initialize + Mapping *internalmap = map->getMapping(); + Mapping::iterator iter = internalmap->begin(); - // yaml_sequence_end_event_initialize + while(iter != internalmap->end()) { + addMappingItem(accountmapping, iter->first, iter->second); + iter++; + } - // yaml_mapping_start_event_initialize +} - // yaml_mapping_end_event_initialize - // yaml_event_delete + void YamlEmitter::addMappingItem(int mappingid, Key key, YamlNode *node) +{ - yaml_stream_end_event_initialize(&event); - events[eventNumber++] = event; + if(node->getType() == SCALAR) { -} + ScalarNode *sclr = (ScalarNode *)node; + int temp1 = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)key.c_str(), -1, YAML_PLAIN_SCALAR_STYLE); + int temp2 = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)sclr->getValue().c_str(), -1, YAML_PLAIN_SCALAR_STYLE); + yaml_document_append_mapping_pair (&document, mappingid, temp1, temp2); -void YamlEmitter::writeDocument() -{ - unsigned char sclr[20]; - snprintf((char *)sclr, 20, "%s", "value"); - yaml_char_t *value = (yaml_char_t *)sclr; + } + else if(node->getType() == MAPPING){ - yaml_document_add_scalar(&document, NULL, value, -1, YAML_PLAIN_SCALAR_STYLE); - yaml_emitter_dump(&emitter, &document); + int temp1 = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)key.c_str(), -1, YAML_PLAIN_SCALAR_STYLE); + int temp2 = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE); + yaml_document_append_mapping_pair (&document, mappingid, temp1, temp2); + MappingNode *map = (MappingNode *)node; + Mapping *internalmap = map->getMapping(); + Mapping::iterator iter = internalmap->begin(); + + while(iter != internalmap->end()) { + addMappingItem(temp2, iter->first, iter->second); + iter++; + } + } } + } diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h index 2ad9dd8d2e..2bd0c24d0c 100755 --- a/sflphone-common/src/config/yamlemitter.h +++ b/sflphone-common/src/config/yamlemitter.h @@ -34,6 +34,7 @@ #include <yaml.h> #include <exception> #include <string> +#include "yamlnode.h" namespace Conf { @@ -74,12 +75,24 @@ class YamlEmitter { void write(); - void writeDocument(); + void writeAccount(MappingNode *map); - private: + void writePreference(); + + void writeAddressbook(); + + void writeAudio(); + + void writeHooks(); + + void writeVoiplink(); void serializeData(); + private: + + void addMappingItem(int mappingid, Key key, YamlNode *node); + std::string filename; FILE *fd; @@ -99,9 +112,28 @@ class YamlEmitter { */ unsigned char buffer[EMITTER_BUFFERSIZE]; + + /** + * Main document for this serialization + */ yaml_document_t document; - int eventNumber; + /** + * Reference id to the top levell mapping when creating + */ + int topLevelMapping; + + /** + * We need to add the account sequence if this is the first account to be + */ + bool isFirstAccount; + + /** + * Reference to the account sequence + */ + int accountSequence; + + friend class ConfigurationTest; }; diff --git a/sflphone-common/test/configurationtest.cpp b/sflphone-common/test/configurationtest.cpp index 062a2faca5..62fa5743d9 100755 --- a/sflphone-common/test/configurationtest.cpp +++ b/sflphone-common/test/configurationtest.cpp @@ -180,11 +180,112 @@ void ConfigurationTest::testYamlEmitter() { Conf::YamlEmitter *emitter; + Conf::MappingNode accountmap(NULL); + Conf::MappingNode credentialmap(NULL); + Conf::MappingNode srtpmap(NULL); + Conf::MappingNode zrtpmap(NULL); + Conf::MappingNode tlsmap(NULL); + + + Conf::ScalarNode id("Account:1278432417"); + Conf::ScalarNode username("181"); + Conf::ScalarNode password("pass181"); + Conf::ScalarNode alias("sfl-181"); + Conf::ScalarNode hostname("192.168.50.3"); + Conf::ScalarNode enable("true"); + Conf::ScalarNode type("SIP"); + Conf::ScalarNode expire("3600"); + Conf::ScalarNode interface("default"); + Conf::ScalarNode port("5060"); + Conf::ScalarNode mailbox("97"); + Conf::ScalarNode publishAddr("192.168.50.182"); + Conf::ScalarNode publishPort("5060"); + Conf::ScalarNode sameasLocal("true"); + Conf::ScalarNode resolveOnce("false"); + Conf::ScalarNode codecs("0/9/110/111/112/"); + Conf::ScalarNode stunServer("stun.sflphone.org"); + Conf::ScalarNode stunEnabled("false"); + Conf::ScalarNode displayName("Alexandre Savard"); + Conf::ScalarNode dtmfType("sipinfo"); + + Conf::ScalarNode count("0"); + Conf::ScalarNode srtpenabled("false"); + Conf::ScalarNode keyExchange("sdes"); + Conf::ScalarNode rtpFallback("false"); + + Conf::ScalarNode displaySas("false"); + Conf::ScalarNode displaySasOnce("false"); + Conf::ScalarNode helloHashEnabled("false"); + Conf::ScalarNode notSuppWarning("false"); + + Conf::ScalarNode tlsport(""); + Conf::ScalarNode certificate(""); + Conf::ScalarNode calist(""); + Conf::ScalarNode ciphers(""); + Conf::ScalarNode tlsenabled("false"); + Conf::ScalarNode tlsmethod("TLSV1"); + Conf::ScalarNode timeout("0"); + Conf::ScalarNode tlspassword(""); + Conf::ScalarNode privatekey(""); + Conf::ScalarNode requirecertif("true"); + Conf::ScalarNode server(""); + Conf::ScalarNode verifyclient("true"); + Conf::ScalarNode verifyserver("true"); + + accountmap.setKeyValue(aliasKey, &alias); + accountmap.setKeyValue(typeKey, &type); + accountmap.setKeyValue(idKey, &id); + accountmap.setKeyValue(usernameKey, &username); + accountmap.setKeyValue(passwordKey, &password); + accountmap.setKeyValue(hostnameKey, &hostname); + accountmap.setKeyValue(accountEnableKey, &enable); + accountmap.setKeyValue(mailboxKey, &mailbox); + accountmap.setKeyValue(expireKey, &expire); + accountmap.setKeyValue(interfaceKey, &interface); + accountmap.setKeyValue(portKey, &port); + accountmap.setKeyValue(publishAddrKey, &publishAddr); + accountmap.setKeyValue(publishPortKey, &publishPort); + accountmap.setKeyValue(sameasLocalKey, &sameasLocal); + accountmap.setKeyValue(resolveOnceKey, &resolveOnce); + accountmap.setKeyValue(dtmfTypeKey, &dtmfType); + accountmap.setKeyValue(displayNameKey, &displayName); + + accountmap.setKeyValue(srtpKey, &srtpmap); + srtpmap.setKeyValue(srtpEnableKey, &srtpenabled); + srtpmap.setKeyValue(keyExchangeKey, &keyExchange); + srtpmap.setKeyValue(rtpFallbackKey, &rtpFallback); + + accountmap.setKeyValue(zrtpKey, &zrtpmap); + zrtpmap.setKeyValue(displaySasKey, &displaySas); + zrtpmap.setKeyValue(displaySasOnceKey, &displaySasOnce); + zrtpmap.setKeyValue(helloHashEnabledKey, &helloHashEnabled); + zrtpmap.setKeyValue(notSuppWarningKey, ¬SuppWarning); + + accountmap.setKeyValue(credKey, &credentialmap); + credentialmap.setKeyValue(credentialCountKey, &count); + + accountmap.setKeyValue(tlsKey, &tlsmap); + tlsmap.setKeyValue(tlsPortKey, &tlsport); + tlsmap.setKeyValue(certificateKey, &certificate); + tlsmap.setKeyValue(calistKey, &calist); + tlsmap.setKeyValue(ciphersKey, &ciphers); + tlsmap.setKeyValue(tlsEnableKey, &tlsenabled); + tlsmap.setKeyValue(methodKey, &tlsmethod); + tlsmap.setKeyValue(timeoutKey, &timeout); + tlsmap.setKeyValue(tlsPasswordKey, &tlspassword); + tlsmap.setKeyValue(privateKeyKey, &privatekey); + tlsmap.setKeyValue(requireCertifKey, &requirecertif); + tlsmap.setKeyValue(serverKey, &server); + tlsmap.setKeyValue(verifyClientKey, &verifyclient); + tlsmap.setKeyValue(verifyServerKey, &verifyserver); + try{ emitter = new Conf::YamlEmitter("/tmp/sequenceEmiter.txt"); - emitter->writeDocument(); + emitter->writeAccount(&accountmap); + emitter->writeAccount(&accountmap); + emitter->serializeData(); delete emitter; } diff --git a/sflphone-common/test/configurationtest.h b/sflphone-common/test/configurationtest.h index 092da3112a..84d840674f 100755 --- a/sflphone-common/test/configurationtest.h +++ b/sflphone-common/test/configurationtest.h @@ -53,6 +53,8 @@ #include "config/yamlparser.h" #include "config/yamlemitter.h" #include "config/yamlnode.h" +#include "sip/sipaccount.h" +#include "account.h" class ConfigurationTest: public CppUnit::TestFixture { -- GitLab From b06b10d62aaf229138ce892f75d8d3368bc210d3 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 7 Jul 2010 16:55:27 -0400 Subject: [PATCH 133/197] [#3649] Implement serialization method for accounts --- sflphone-common/src/sip/sipaccount.cpp | 104 ++++++++++++++++++++++++- sflphone-common/src/sip/sipaccount.h | 4 +- 2 files changed, 105 insertions(+), 3 deletions(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 5c6513cda6..e112421be2 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -34,7 +34,7 @@ #include "manager.h" #include "user_cfg.h" #include <pwd.h> - +#include <sstream> Credentials::Credentials() : credentialCount(0) {} @@ -134,7 +134,109 @@ SIPAccount::~SIPAccount() void SIPAccount::serialize(Engine *engine) { + + Conf::MappingNode accountmap(NULL); + Conf::MappingNode credentialmap(NULL); + Conf::MappingNode srtpmap(NULL); + Conf::MappingNode zrtpmap(NULL); + Conf::MappingNode tlsmap(NULL); + + Conf::ScalarNode id(Account::_accountID); + Conf::ScalarNode username(Account::_username); + Conf::ScalarNode password(Account::_password); + Conf::ScalarNode alias(Account::_alias); + Conf::ScalarNode hostname(Account::_hostname); + Conf::ScalarNode enable(_enabled ? "true" : "false"); + Conf::ScalarNode type(Account::_type); + Conf::ScalarNode expire(_registrationExpire); + Conf::ScalarNode interface(_interface); + std::stringstream portstr; portstr << _localPort; + Conf::ScalarNode port(portstr.str()); + Conf::ScalarNode mailbox("97"); + Conf::ScalarNode publishAddr(_publishedIpAddress); + std::stringstream publicportstr; publicportstr << _publishedPort; + Conf::ScalarNode publishPort(publicportstr.str()); + Conf::ScalarNode sameasLocal(_publishedSameasLocal ? "true" : "false"); + Conf::ScalarNode resolveOnce(_resolveOnce ? "true" : "false"); + Conf::ScalarNode codecs(""); + Conf::ScalarNode stunServer(std::string(_stunServerName.ptr, _stunServerName.slen)); + Conf::ScalarNode stunEnabled(_stunEnabled ? "true" : "false"); + Conf::ScalarNode displayName(_displayName); + Conf::ScalarNode dtmfType(_dtmfType==0 ? "overrtp" : "sipinfo"); + + std::stringstream countstr; countstr << _credentialCount; + Conf::ScalarNode count(countstr.str()); + Conf::ScalarNode srtpenabled(_srtpEnabled ? "true" : "false"); + Conf::ScalarNode keyExchange(_srtpKeyExchange); + Conf::ScalarNode rtpFallback(_srtpFallback ? "true" : "false"); + + Conf::ScalarNode displaySas(_zrtpDisplaySas ? "true" : "false"); + Conf::ScalarNode displaySasOnce(_zrtpDisplaySasOnce ? "true" : "false"); + Conf::ScalarNode helloHashEnabled(_zrtpHelloHash ? "true" : "false"); + Conf::ScalarNode notSuppWarning(_zrtpNotSuppWarning ? "true" : "false"); + + Conf::ScalarNode tlsport(_tlsPortStr); + Conf::ScalarNode certificate(_tlsCertificateFile); + Conf::ScalarNode calist(_tlsCaListFile); + Conf::ScalarNode ciphers(_tlsCiphers); + Conf::ScalarNode tlsenabled(_tlsEnable); + Conf::ScalarNode tlsmethod(_tlsMethod); + Conf::ScalarNode timeout(_tlsNegotiationTimeoutSec); + Conf::ScalarNode tlspassword(_tlsPassword); + Conf::ScalarNode privatekey(_tlsPrivateKeyFile); + Conf::ScalarNode requirecertif(_tlsRequireClientCertificate ? "true" : "false"); + Conf::ScalarNode server(_tlsServerName); + Conf::ScalarNode verifyclient(_tlsVerifyServer ? "true" : "false"); + Conf::ScalarNode verifyserver(_tlsVerifyClient ? "true" : "false"); + + accountmap.setKeyValue(aliasKey, &alias); + accountmap.setKeyValue(typeKey, &type); + accountmap.setKeyValue(idKey, &id); + accountmap.setKeyValue(usernameKey, &username); + accountmap.setKeyValue(passwordKey, &password); + accountmap.setKeyValue(hostnameKey, &hostname); + accountmap.setKeyValue(accountEnableKey, &enable); + accountmap.setKeyValue(mailboxKey, &mailbox); + accountmap.setKeyValue(expireKey, &expire); + accountmap.setKeyValue(interfaceKey, &interface); + accountmap.setKeyValue(portKey, &port); + accountmap.setKeyValue(publishAddrKey, &publishAddr); + accountmap.setKeyValue(publishPortKey, &publishPort); + accountmap.setKeyValue(sameasLocalKey, &sameasLocal); + accountmap.setKeyValue(resolveOnceKey, &resolveOnce); + accountmap.setKeyValue(dtmfTypeKey, &dtmfType); + accountmap.setKeyValue(displayNameKey, &displayName); + + accountmap.setKeyValue(srtpKey, &srtpmap); + srtpmap.setKeyValue(srtpEnableKey, &srtpenabled); + srtpmap.setKeyValue(keyExchangeKey, &keyExchange); + srtpmap.setKeyValue(rtpFallbackKey, &rtpFallback); + + accountmap.setKeyValue(zrtpKey, &zrtpmap); + zrtpmap.setKeyValue(displaySasKey, &displaySas); + zrtpmap.setKeyValue(displaySasOnceKey, &displaySasOnce); + zrtpmap.setKeyValue(helloHashEnabledKey, &helloHashEnabled); + zrtpmap.setKeyValue(notSuppWarningKey, ¬SuppWarning); + + accountmap.setKeyValue(credKey, &credentialmap); + credentialmap.setKeyValue(credentialCountKey, &count); + + accountmap.setKeyValue(tlsKey, &tlsmap); + tlsmap.setKeyValue(tlsPortKey, &tlsport); + tlsmap.setKeyValue(certificateKey, &certificate); + tlsmap.setKeyValue(calistKey, &calist); + tlsmap.setKeyValue(ciphersKey, &ciphers); + tlsmap.setKeyValue(tlsEnableKey, &tlsenabled); + tlsmap.setKeyValue(methodKey, &tlsmethod); + tlsmap.setKeyValue(timeoutKey, &timeout); + tlsmap.setKeyValue(tlsPasswordKey, &tlspassword); + tlsmap.setKeyValue(privateKeyKey, &privatekey); + tlsmap.setKeyValue(requireCertifKey, &requirecertif); + tlsmap.setKeyValue(serverKey, &server); + tlsmap.setKeyValue(verifyClientKey, &verifyclient); + tlsmap.setKeyValue(verifyServerKey, &verifyserver); + } diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 24e62a697f..d499932970 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -451,8 +451,8 @@ class SIPAccount : public Account bool getZrtpDiaplaySasOnce(void) { return _zrtpDisplaySasOnce; } void setZrtpDiaplaySasOnce(bool sasonce) { _zrtpDisplaySasOnce = sasonce; } - bool getZrtpNotSuppWarning(void) { return _zrtpDisplaySasOnce; } - void setZrtpNotSuppWarning(bool warning) { _zrtpDisplaySasOnce = _zrtpNotSuppWarning; } + bool getZrtpNotSuppWarning(void) { return _zrtpNotSuppWarning; } + void setZrtpNotSuppWarning(bool warning) { _zrtpNotSuppWarning = warning; } bool getZrtpHelloHash(void) { return _zrtpHelloHash; } void setZrtpHelloHash(bool hellohash) { _zrtpHelloHash = hellohash; } -- GitLab From 455ae5be09087f57085490ffb3e91c426b53998b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 7 Jul 2010 16:56:07 -0400 Subject: [PATCH 134/197] [#3649] Implement serialization interface for preferences --- sflphone-common/src/preferences.cpp | 121 ++++++++++++++++++++++++++++ sflphone-common/src/preferences.h | 117 +++++++++++++++++++++++++++ 2 files changed, 238 insertions(+) create mode 100644 sflphone-common/src/preferences.cpp create mode 100755 sflphone-common/src/preferences.h diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp new file mode 100644 index 0000000000..30181d3c2b --- /dev/null +++ b/sflphone-common/src/preferences.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#include "preferences.h" +#include <sstream> + +Preferences::Preferences() : _accountOrder("") + , _audioApi(0) + , _historyLimit(30) + , _historyMaxCalls(20) + , _notifyMails(false) + , _zoneToneChoice("North America") + , _registrationExpire(180) + , _ringtoneEnabled(true) + , _portNum(5060) + , _searchBarDisplay(true) + , _zeroConfenable(false) + , _md5Hash(false) +{ + +} + +Preferences::~Preferences() {} + + +void Preferences::serialize(Engine *engine) +{ + + Conf::MappingNode preferencemap(NULL); + + Conf::ScalarNode order(_accountOrder); + std::stringstream audiostr; audiostr << _audioApi; + Conf::ScalarNode audioapi(audiostr.str()); + std::stringstream histlimitstr; histlimitstr << _historyLimit; + Conf::ScalarNode historyLimit(histlimitstr.str()); + std::stringstream histmaxstr; histmaxstr << _historyMaxCalls; + Conf::ScalarNode historyMaxCalls(histmaxstr.str()); + Conf::ScalarNode notifyMails(_notifyMails ? "true" : "false"); + Conf::ScalarNode zoneToneChoice(_zoneToneChoice); + std::stringstream expirestr; expirestr << _registrationExpire; + Conf::ScalarNode registrationExpire(expirestr.str()); + Conf::ScalarNode ringtoneEnabled(_ringtoneEnabled ? "true" : "false"); + std::stringstream portstr; portstr << _portNum; + Conf::ScalarNode portNum(portstr.str()); + Conf::ScalarNode searchBarDisplay(_searchBarDisplay ? "true" : "false"); + Conf::ScalarNode zeroConfenable(_zeroConfenable ? "true" : "false"); + Conf::ScalarNode md5Hash(_md5Hash ? "true" : "false"); + + preferencemap.setKeyValue(orderKey, &order); + preferencemap.setKeyValue(audioApiKey, &audioapi); + preferencemap.setKeyValue(historyLimitKey, &historyLimit); + preferencemap.setKeyValue(historyMaxCallsKey, &historyMaxCalls); + preferencemap.setKeyValue(notifyMailsKey, ¬ifyMails); + preferencemap.setKeyValue(zoneToneChoiceKey, &zoneToneChoice); + preferencemap.setKeyValue(registrationExpireKey, ®istrationExpire); + preferencemap.setKeyValue(ringtoneEnabledKey, &ringtoneEnabled); + preferencemap.setKeyValue(portNumKey, &portNum); + preferencemap.setKeyValue(searchBarDisplayKey, &searchBarDisplay); + preferencemap.setKeyValue(zeroConfenableKey, &zeroConfenable); + preferencemap.setKeyValue(md5HashKey, &md5Hash); + +} + +void Preferences::unserialize(Conf::MappingNode *map) +{ + + Conf::ScalarNode *val; + + val = (Conf::ScalarNode *)(map->getValue(orderKey)); + if(val) { _accountOrder = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(audioApiKey)); + if(val) { _audioApi = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(historyLimitKey)); + if(val) { _historyLimit = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(historyMaxCallsKey)); + if(val) { _historyMaxCalls = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(notifyMailsKey)); + if(val) { _notifyMails = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(zoneToneChoiceKey)); + if(val) { _zoneToneChoice = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(registrationExpireKey)); + if(val) { _registrationExpire = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(ringtoneEnabledKey)); + if(val) { _registrationExpire = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(portNumKey)); + if(val) { _portNum = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(searchBarDisplayKey)); + if(val) { _searchBarDisplay = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(zeroConfenableKey)); + if(val) { _zeroConfenable = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(md5HashKey)); + if(val) { _md5Hash = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + +} diff --git a/sflphone-common/src/preferences.h b/sflphone-common/src/preferences.h new file mode 100755 index 0000000000..5ed97c0821 --- /dev/null +++ b/sflphone-common/src/preferences.h @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#ifndef __PREFERENCE_H__ +#define __PREFERENCE_H__ + +#include "config/serializable.h" + +const Conf::Key orderKey("order"); // : 1234/2345/ +const Conf::Key audioApiKey("audioApi"); // : 0 +const Conf::Key historyLimitKey("historyLimit"); // : 30 +const Conf::Key historyMaxCallsKey("historyMaxCalls"); // : 20 +const Conf::Key notifyMailsKey("notifyMails"); // : false +const Conf::Key zoneToneChoiceKey("zoneToneChoice"); // : North America +const Conf::Key registrationExpireKey("registrationExpire");// : 180 +const Conf::Key ringtoneEnabledKey("ringtoneEnabled"); // : true +const Conf::Key portNumKey("portNum"); // : 5060 +const Conf::Key searchBarDisplayKey("searchBarDisplay"); // : true +const Conf::Key zeroConfenableKey("zeroConfenable"); // : false +const Conf::Key md5HashKey("md5Hash"); // : false + +class Preferences : public Serializable { + + public: + + Preferences(); + + ~Preferences(); + + virtual void serialize(Engine *engine); + + virtual void unserialize(Conf::MappingNode *map); + + + std::string getAccountOrder(void) { return _accountOrder; } + void setAccountOrder(std::string ord) { _accountOrder = ord; } + + int getAudioApi(void) { return _audioApi; } + void setAudioApi(int api) { _audioApi = api; } + + int getHistoryLimit(void) { return _historyLimit; } + void setHistoryLimit(int lim) { _historyLimit = lim; } + + int getHistoryMaxCalls(void) { return _historyMaxCalls; } + void setHistoryMaxCalls(int max) { _historyMaxCalls = max; } + + bool getNotifyMails(void) { return _notifyMails; } + void setNotifyMails(bool mails) { _notifyMails = mails; } + + std::string getZoneToneChoice(void) { return _zoneToneChoice; } + void setZoneToneChoice(std::string str) { _zoneToneChoice = str; } + + int getRegistrationExpire(void) { return _registrationExpire; } + void setRegistrationExpire(int exp) { _registrationExpire = exp; } + + bool getRingtoneEnabled(void) { return _ringtoneEnabled; } + void setRingtoneEnabled(bool ring) { _ringtoneEnabled = ring; } + + int getPortNum(void) { return _portNum; } + void setPortNum(int port) { _portNum = port; } + + bool getSearchBarDisplay(void) { return _searchBarDisplay; } + void setSearchBarDisplay(bool search) { _searchBarDisplay = search; } + + bool getZeroConfenable(void) { return _zeroConfenable; } + void setZeroConfenable(bool enable) { _zeroConfenable = enable; } + + bool getMd5Hash(void) { return _md5Hash; } + void setMd5Hash(bool md5) { _md5Hash = md5; } + + private: + + // account order + std::string _accountOrder; + + int _audioApi; + int _historyLimit; + int _historyMaxCalls; + bool _notifyMails; + std::string _zoneToneChoice; + int _registrationExpire; + bool _ringtoneEnabled; + int _portNum; + bool _searchBarDisplay; + bool _zeroConfenable; + bool _md5Hash; + +}; + +#endif -- GitLab From 9ea4ea48f2c93422326f5633574fc305bfc89373 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Thu, 10 Jun 2010 14:48:01 -0400 Subject: [PATCH 135/197] [#3531] Audio conf: disable file selection when ringtones are disabled --- sflphone-client-gnome/src/config/audioconf.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c index d27b64d2f2..bcf82af8b0 100644 --- a/sflphone-client-gnome/src/config/audioconf.c +++ b/sflphone-client-gnome/src/config/audioconf.c @@ -636,9 +636,10 @@ is_ringtone_enabled( void ) } void -ringtone_enabled( void ) +ringtone_enabled(GtkWidget *widget UNUSED, gpointer fileChooser) { dbus_ringtone_enabled(); + gtk_widget_set_sensitive(GTK_WIDGET(fileChooser), dbus_is_ringtone_enabled()); } void @@ -1046,17 +1047,17 @@ GtkWidget* create_audio_configuration() gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); GtkWidget *enableTone; - GtkWidget *fileChooser; + GtkWidget *fileChooser = gtk_file_chooser_button_new(_("Choose a ringtone"), GTK_FILE_CHOOSER_ACTION_OPEN); enableTone = gtk_check_button_new_with_mnemonic( _("_Enable ringtones")); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(enableTone), dbus_is_ringtone_enabled() ); - g_signal_connect(G_OBJECT( enableTone) , "clicked" , G_CALLBACK( ringtone_enabled ) , NULL); + g_signal_connect(G_OBJECT( enableTone) , "clicked" , G_CALLBACK( ringtone_enabled ) , fileChooser); gtk_table_attach ( GTK_TABLE( table ), enableTone, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); // file chooser button - fileChooser = gtk_file_chooser_button_new(_("Choose a ringtone"), GTK_FILE_CHOOSER_ACTION_OPEN); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER( fileChooser) , g_get_home_dir()); gtk_file_chooser_set_filename(GTK_FILE_CHOOSER( fileChooser) , get_ringtone_choice()); + gtk_widget_set_sensitive(GTK_WIDGET(fileChooser), dbus_is_ringtone_enabled()); g_signal_connect( G_OBJECT( fileChooser ) , "selection_changed" , G_CALLBACK( ringtone_changed ) , NULL ); GtkFileFilter *filter = gtk_file_filter_new(); -- GitLab From 92c996dc98107f9849ea47f950e98a08b22d897c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 7 Jul 2010 17:45:54 -0400 Subject: [PATCH 136/197] [#3649] Pass emitter as an argument for serialization --- sflphone-common/src/account.h | 2 +- sflphone-common/src/config/serializable.h | 3 ++- sflphone-common/src/config/yamlemitter.cpp | 26 +++++++++++++++++++++- sflphone-common/src/config/yamlemitter.h | 2 +- sflphone-common/src/iax/iaxaccount.cpp | 2 +- sflphone-common/src/iax/iaxaccount.h | 2 +- sflphone-common/src/preferences.cpp | 5 ++++- sflphone-common/src/preferences.h | 2 +- sflphone-common/src/sip/sipaccount.cpp | 4 ++-- sflphone-common/src/sip/sipaccount.h | 4 ++-- 10 files changed, 40 insertions(+), 12 deletions(-) diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h index e2113f2cb2..cf49c886c0 100644 --- a/sflphone-common/src/account.h +++ b/sflphone-common/src/account.h @@ -155,7 +155,7 @@ class Account : public Serializable{ */ virtual ~Account(); - virtual void serialize(Engine *engine) = 0; + virtual void serialize(Conf::YamlEmitter *emitter) = 0; virtual void unserialize(Conf::MappingNode *map) = 0; diff --git a/sflphone-common/src/config/serializable.h b/sflphone-common/src/config/serializable.h index 7b7cf657a4..e9b88cc84c 100755 --- a/sflphone-common/src/config/serializable.h +++ b/sflphone-common/src/config/serializable.h @@ -33,6 +33,7 @@ #include "yamlparser.h" +#include "yamlemitter.h" #include "yamlnode.h" class Engine; @@ -42,7 +43,7 @@ class Serializable { public: - virtual void serialize(Engine *engine) = 0; + virtual void serialize(Conf::YamlEmitter *emitter) = 0; virtual void unserialize(Conf::MappingNode *map) = 0; diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp index 3998e69670..7cd1eacba1 100755 --- a/sflphone-common/src/config/yamlemitter.cpp +++ b/sflphone-common/src/config/yamlemitter.cpp @@ -120,8 +120,30 @@ void YamlEmitter::writeAccount(MappingNode *map) } +void YamlEmitter::writePreference(MappingNode *map) +{ + std::string preferencestr("preferences"); + + if(map->getType() == MAPPING) + throw YamlEmitterException("Node type is not a mapping while writing preferences"); + + int preferenceid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE); + int preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE); + + yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping); + + Mapping *internalmap = map->getMapping(); + Mapping::iterator iter = internalmap->begin(); + + while(iter != internalmap->end()) { + addMappingItem(preferencemapping, iter->first, iter->second); + iter++; + } + +} + - void YamlEmitter::addMappingItem(int mappingid, Key key, YamlNode *node) +void YamlEmitter::addMappingItem(int mappingid, Key key, YamlNode *node) { if(node->getType() == SCALAR) { @@ -148,6 +170,8 @@ void YamlEmitter::writeAccount(MappingNode *map) iter++; } } + else + throw YamlEmitterException("Unknown node type while adding mapping node"); } diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h index 2bd0c24d0c..47bce14a5f 100755 --- a/sflphone-common/src/config/yamlemitter.h +++ b/sflphone-common/src/config/yamlemitter.h @@ -77,7 +77,7 @@ class YamlEmitter { void writeAccount(MappingNode *map); - void writePreference(); + void writePreference(MappingNode *map); void writeAddressbook(); diff --git a/sflphone-common/src/iax/iaxaccount.cpp b/sflphone-common/src/iax/iaxaccount.cpp index b94ca59623..bbf2bf0289 100644 --- a/sflphone-common/src/iax/iaxaccount.cpp +++ b/sflphone-common/src/iax/iaxaccount.cpp @@ -47,7 +47,7 @@ IAXAccount::~IAXAccount() _link = NULL; } -void IAXAccount::serialize(Engine *engine) +void IAXAccount::serialize(Conf::YamlEmitter *emitter) { } diff --git a/sflphone-common/src/iax/iaxaccount.h b/sflphone-common/src/iax/iaxaccount.h index f6fb6414e3..fc78a70de3 100644 --- a/sflphone-common/src/iax/iaxaccount.h +++ b/sflphone-common/src/iax/iaxaccount.h @@ -44,7 +44,7 @@ class IAXAccount : public Account ~IAXAccount(); - virtual void serialize(Engine *engine); + virtual void serialize(Conf::YamlEmitter *emitter); virtual void unserialize(Conf::MappingNode *map); diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp index 30181d3c2b..f3de3357fd 100644 --- a/sflphone-common/src/preferences.cpp +++ b/sflphone-common/src/preferences.cpp @@ -50,7 +50,7 @@ Preferences::Preferences() : _accountOrder("") Preferences::~Preferences() {} -void Preferences::serialize(Engine *engine) +void Preferences::serialize(Conf::YamlEmitter *emiter) { Conf::MappingNode preferencemap(NULL); @@ -86,6 +86,7 @@ void Preferences::serialize(Engine *engine) preferencemap.setKeyValue(zeroConfenableKey, &zeroConfenable); preferencemap.setKeyValue(md5HashKey, &md5Hash); + } void Preferences::unserialize(Conf::MappingNode *map) @@ -118,4 +119,6 @@ void Preferences::unserialize(Conf::MappingNode *map) val = (Conf::ScalarNode *)(map->getValue(md5HashKey)); if(val) { _md5Hash = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + + } diff --git a/sflphone-common/src/preferences.h b/sflphone-common/src/preferences.h index 5ed97c0821..0b8330ae36 100755 --- a/sflphone-common/src/preferences.h +++ b/sflphone-common/src/preferences.h @@ -54,7 +54,7 @@ class Preferences : public Serializable { ~Preferences(); - virtual void serialize(Engine *engine); + virtual void serialize(Conf::YamlEmitter *emitter); virtual void unserialize(Conf::MappingNode *map); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index e112421be2..699e21f2a6 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -40,7 +40,7 @@ Credentials::Credentials() : credentialCount(0) {} Credentials::~Credentials() {} -void Credentials::serialize(Engine *engine) +void Credentials::serialize(Conf::YamlEmitter *emitter) { } @@ -132,7 +132,7 @@ SIPAccount::~SIPAccount() free (_tlsSetting); } -void SIPAccount::serialize(Engine *engine) { +void SIPAccount::serialize(Conf::YamlEmitter *emitter) { Conf::MappingNode accountmap(NULL); diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index d499932970..b06c1e4bdd 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -134,7 +134,7 @@ class Credentials : public Serializable ~Credentials(); - virtual void serialize(Engine *engine); + virtual void serialize(Conf::YamlEmitter *emitter); virtual void unserialize(Conf::MappingNode *map); @@ -170,7 +170,7 @@ class SIPAccount : public Account */ virtual ~SIPAccount(); - virtual void serialize(Engine *engine); + virtual void serialize(Conf::YamlEmitter *emitter); virtual void unserialize(Conf::MappingNode *map); -- GitLab From b348e1aae5a01f829cbfdb836aabd178301ead2e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 7 Jul 2010 18:19:01 -0400 Subject: [PATCH 137/197] [#3648] Implement save configuration method --- sflphone-common/src/managerimpl.cpp | 22 ++++++++++++++++++++++ sflphone-common/src/managerimpl.h | 2 ++ sflphone-common/src/sip/sipaccount.cpp | 8 +++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 5d0b79c92f..bc208691da 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1413,6 +1413,28 @@ bool ManagerImpl::saveConfig (void) { setConfig(AUDIO, VOLUME_SPKR, getSpkrVolume()); setConfig(AUDIO, VOLUME_MICRO, getMicVolume()); + AccountMap::iterator iter = _accountMap.begin(); + + try{ + emitter = new Conf::YamlEmitter("/tmp/sequenceEmiter.txt"); + + // emitter->writeAccount(&accountmap); + // emitter->writeAccount(&accountmap); + emitter->serializeData(); + + while(iter != _accountMap.end()) { + iter->second->serialize(emitter); + iter++; + } + + preferences.serialize(emitter); + + delete emitter; + } + catch (Conf::YamlEmitterException &e) { + _error("ConfigTree: %s", e.what()); + } + _setupLoaded = _config.saveConfigTree(_path.data()); return _setupLoaded; } diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index 608f369524..1f79de5c5d 100755 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -55,6 +55,7 @@ #include "audio/codecs/codecDescriptor.h" // CodecDescriptor class contained by value here #include "audio/mainbuffer.h" +#include "yamlemitter.h" #include "yamlparser.h" #include "preferences.h" @@ -1347,6 +1348,7 @@ private: void check_call_configuration (const CallID& id, const std::string& to, Call::CallConfiguration *callConfig); Conf::YamlParser *parser; + Conf::YamlEmitter *emitter; #ifdef TEST bool testCallAccountMap(); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 699e21f2a6..49667c5105 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -134,6 +134,8 @@ SIPAccount::~SIPAccount() void SIPAccount::serialize(Conf::YamlEmitter *emitter) { + _debug("SipAccount: serialize %s", _accountID.c_str()); + Conf::MappingNode accountmap(NULL); Conf::MappingNode credentialmap(NULL); @@ -152,6 +154,7 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { Conf::ScalarNode interface(_interface); std::stringstream portstr; portstr << _localPort; Conf::ScalarNode port(portstr.str()); + Conf::ScalarNode mailbox("97"); Conf::ScalarNode publishAddr(_publishedIpAddress); std::stringstream publicportstr; publicportstr << _publishedPort; @@ -166,7 +169,7 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { std::stringstream countstr; countstr << _credentialCount; Conf::ScalarNode count(countstr.str()); - + Conf::ScalarNode srtpenabled(_srtpEnabled ? "true" : "false"); Conf::ScalarNode keyExchange(_srtpKeyExchange); Conf::ScalarNode rtpFallback(_srtpFallback ? "true" : "false"); @@ -496,6 +499,9 @@ int SIPAccount::registerVoIPLink() _transportType = PJSIP_TRANSPORT_START_OTHER; initStunConfiguration (); } + else { + _stunServerName = pj_str ((char*) _stunServer.data()); + } // In our definition of the // ip2ip profile (aka Direct IP Calls), -- GitLab From 652f000d23f1ca38860c58162cc37642ff5f1763 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 8 Jul 2010 09:35:15 -0400 Subject: [PATCH 138/197] [#3647] Fix yaml emitter --- sflphone-common/src/config/yamlemitter.cpp | 75 ++++++++++++++++------ sflphone-common/src/config/yamlemitter.h | 4 +- sflphone-common/src/config/yamlparser.cpp | 0 sflphone-common/src/config/yamlparser.h | 0 sflphone-common/src/managerimpl.cpp | 7 +- sflphone-common/src/preferences.cpp | 2 +- sflphone-common/src/sip/sipaccount.cpp | 6 ++ 7 files changed, 69 insertions(+), 25 deletions(-) mode change 100755 => 100644 sflphone-common/src/config/yamlparser.cpp mode change 100755 => 100644 sflphone-common/src/config/yamlparser.h mode change 100755 => 100644 sflphone-common/src/managerimpl.cpp mode change 100755 => 100644 sflphone-common/src/sip/sipaccount.cpp diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp index 7cd1eacba1..4aae4eda36 100755 --- a/sflphone-common/src/config/yamlemitter.cpp +++ b/sflphone-common/src/config/yamlemitter.cpp @@ -62,7 +62,8 @@ void YamlEmitter::open() yaml_document_initialize(&document, NULL, NULL, NULL, 0, 0); // Init the main configuration mapping - topLevelMapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE); + if((topLevelMapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0) + throw YamlEmitterException("Could not create top level mapping"); } void YamlEmitter::close() @@ -94,21 +95,37 @@ void YamlEmitter::serializeData() } -void YamlEmitter::writeAccount(MappingNode *map) +void YamlEmitter::serializeAccount(MappingNode *map) { std::string accountstr("accounts"); + int accountid, accountmapping; + + _debug("YamlEmitter: Serialize account"); + + if(map->getType() != MAPPING) + throw YamlEmitterException("Node type is not a mapping while writing account"); + if(isFirstAccount) { // accountSequence need to be static outside this scope since reused each time an account is written - accountSequence = yaml_document_add_sequence (&document, NULL, YAML_BLOCK_SEQUENCE_STYLE); - int accountid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)accountstr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE); - yaml_document_append_mapping_pair (&document, topLevelMapping, accountid, accountSequence); + if((accountid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)accountstr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0) + throw YamlEmitterException("Could not add preference scalar to document"); + + if((accountSequence = yaml_document_add_sequence (&document, NULL, YAML_BLOCK_SEQUENCE_STYLE)) == 0) + throw YamlEmitterException("Could not add sequence to document"); + + if(!yaml_document_append_mapping_pair (&document, topLevelMapping, accountid, accountSequence)) + throw YamlEmitterException("Could not add mapping pair to top level mapping"); + isFirstAccount = false; } - int accountmapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE); - yaml_document_append_sequence_item (&document, accountSequence, accountmapping); + if((accountmapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0) + throw YamlEmitterException("Could not add account mapping to document"); + + if(!yaml_document_append_sequence_item (&document, accountSequence, accountmapping)) + throw YamlEmitterException("Could not append account mapping to sequence"); Mapping *internalmap = map->getMapping(); Mapping::iterator iter = internalmap->begin(); @@ -120,17 +137,25 @@ void YamlEmitter::writeAccount(MappingNode *map) } -void YamlEmitter::writePreference(MappingNode *map) +void YamlEmitter::serializePreference(MappingNode *map) { std::string preferencestr("preferences"); - if(map->getType() == MAPPING) + int preferenceid, preferencemapping; + + _debug("YamlEmitter: Serialize preference"); + + if(map->getType() != MAPPING) throw YamlEmitterException("Node type is not a mapping while writing preferences"); - int preferenceid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE); - int preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE); + if((preferenceid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0) + throw YamlEmitterException("Could not add scalar to document"); - yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping); + if((preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0) + throw YamlEmitterException("Could not add mapping to document"); + + if(!yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping)) + throw YamlEmitterException("Could not add mapping pair to top leve mapping"); Mapping *internalmap = map->getMapping(); Mapping::iterator iter = internalmap->begin(); @@ -148,18 +173,32 @@ void YamlEmitter::addMappingItem(int mappingid, Key key, YamlNode *node) if(node->getType() == SCALAR) { + int temp1, temp2; + ScalarNode *sclr = (ScalarNode *)node; - int temp1 = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)key.c_str(), -1, YAML_PLAIN_SCALAR_STYLE); - int temp2 = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)sclr->getValue().c_str(), -1, YAML_PLAIN_SCALAR_STYLE); - yaml_document_append_mapping_pair (&document, mappingid, temp1, temp2); + if((temp1 = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)key.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0) + throw YamlEmitterException("Could not add scalar to document"); + + if((temp2 = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)sclr->getValue().c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0) + throw YamlEmitterException("Could not add scalar to document"); + + if(!yaml_document_append_mapping_pair (&document, mappingid, temp1, temp2)) + throw YamlEmitterException("Could not append mapping pair to mapping"); } else if(node->getType() == MAPPING){ - int temp1 = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)key.c_str(), -1, YAML_PLAIN_SCALAR_STYLE); - int temp2 = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE); - yaml_document_append_mapping_pair (&document, mappingid, temp1, temp2); + int temp1, temp2; + + if((temp1 = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)key.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0) + throw YamlEmitterException("Could not add scalar to document"); + + if((temp2 = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0) + throw YamlEmitterException("Could not add scalar to document"); + + if(!yaml_document_append_mapping_pair (&document, mappingid, temp1, temp2)) + throw YamlEmitterException("Could not add mapping pair to mapping"); MappingNode *map = (MappingNode *)node; Mapping *internalmap = map->getMapping(); diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h index 47bce14a5f..62cb3745d2 100755 --- a/sflphone-common/src/config/yamlemitter.h +++ b/sflphone-common/src/config/yamlemitter.h @@ -75,9 +75,9 @@ class YamlEmitter { void write(); - void writeAccount(MappingNode *map); + void serializeAccount(MappingNode *map); - void writePreference(MappingNode *map); + void serializePreference(MappingNode *map); void writeAddressbook(); diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp old mode 100755 new mode 100644 diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h old mode 100755 new mode 100644 diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp old mode 100755 new mode 100644 index bc208691da..959716c5a1 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1413,15 +1413,12 @@ bool ManagerImpl::saveConfig (void) { setConfig(AUDIO, VOLUME_SPKR, getSpkrVolume()); setConfig(AUDIO, VOLUME_MICRO, getMicVolume()); + AccountMap::iterator iter = _accountMap.begin(); try{ emitter = new Conf::YamlEmitter("/tmp/sequenceEmiter.txt"); - // emitter->writeAccount(&accountmap); - // emitter->writeAccount(&accountmap); - emitter->serializeData(); - while(iter != _accountMap.end()) { iter->second->serialize(emitter); iter++; @@ -1429,6 +1426,8 @@ bool ManagerImpl::saveConfig (void) { preferences.serialize(emitter); + emitter->serializeData(); + delete emitter; } catch (Conf::YamlEmitterException &e) { diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp index f3de3357fd..d0190ae96c 100644 --- a/sflphone-common/src/preferences.cpp +++ b/sflphone-common/src/preferences.cpp @@ -86,7 +86,7 @@ void Preferences::serialize(Conf::YamlEmitter *emiter) preferencemap.setKeyValue(zeroConfenableKey, &zeroConfenable); preferencemap.setKeyValue(md5HashKey, &md5Hash); - + emiter->serializePreference(&preferencemap); } void Preferences::unserialize(Conf::MappingNode *map) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp old mode 100755 new mode 100644 index 49667c5105..ff3a5e6ea6 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -240,6 +240,12 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { tlsmap.setKeyValue(verifyClientKey, &verifyclient); tlsmap.setKeyValue(verifyServerKey, &verifyserver); + try{ + emitter->serializeAccount(&accountmap); + } + catch (Conf::YamlEmitterException &e) { + _error("ConfigTree: %s", e.what()); + } } -- GitLab From 49a2f72e445fc978fdcc165c2a7e449359653083 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 8 Jul 2010 12:17:40 -0400 Subject: [PATCH 139/197] [#3649] Fix preference --- .../{sequence2.yml => sequenceParser.yml} | 0 sflphone-common/src/config/yamlemitter.cpp | 30 +++++++++++ sflphone-common/src/config/yamlemitter.h | 2 + sflphone-common/src/config/yamlparser.cpp | 15 ++++-- sflphone-common/src/config/yamlparser.h | 2 +- sflphone-common/src/managerimpl.cpp | 8 +-- sflphone-common/src/managerimpl.h | 2 + sflphone-common/src/preferences.h | 52 +++++++++++++++++++ 8 files changed, 102 insertions(+), 9 deletions(-) rename sflphone-common/{sequence2.yml => sequenceParser.yml} (100%) diff --git a/sflphone-common/sequence2.yml b/sflphone-common/sequenceParser.yml similarity index 100% rename from sflphone-common/sequence2.yml rename to sflphone-common/sequenceParser.yml diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp index 4aae4eda36..e069453c23 100755 --- a/sflphone-common/src/config/yamlemitter.cpp +++ b/sflphone-common/src/config/yamlemitter.cpp @@ -167,6 +167,36 @@ void YamlEmitter::serializePreference(MappingNode *map) } +void YamlEmitter::serializeVoipPreference(MappingNode *map) +{ + std::string preferencestr("voipPreferences"); + + int preferenceid, preferencemapping; + + _debug("YamlEmitter: Serialize preference"); + + if(map->getType() != MAPPING) + throw YamlEmitterException("Node type is not a mapping while writing preferences"); + + if((preferenceid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0) + throw YamlEmitterException("Could not add scalar to document"); + + if((preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0) + throw YamlEmitterException("Could not add mapping to document"); + + if(!yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping)) + throw YamlEmitterException("Could not add mapping pair to top leve mapping"); + + Mapping *internalmap = map->getMapping(); + Mapping::iterator iter = internalmap->begin(); + + while(iter != internalmap->end()) { + addMappingItem(preferencemapping, iter->first, iter->second); + iter++; + } + +} + void YamlEmitter::addMappingItem(int mappingid, Key key, YamlNode *node) { diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h index 62cb3745d2..7126f7ae5e 100755 --- a/sflphone-common/src/config/yamlemitter.h +++ b/sflphone-common/src/config/yamlemitter.h @@ -79,6 +79,8 @@ class YamlEmitter { void serializePreference(MappingNode *map); + void serializeVoipPreference(MappingNode *map); + void writeAddressbook(); void writeAudio(); diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index ee1ccd6c94..7111406c82 100644 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -257,6 +257,7 @@ void YamlParser::processScalar(YamlNode *topNode) char buffer[1000]; snprintf(buffer, 1000, "%s", events[eventIndex].data.scalar.value); + _debug("and the scalar is: %s", buffer); ScalarNode *sclr = new ScalarNode(buffer, topNode); @@ -358,6 +359,7 @@ void YamlParser::processMapping(YamlNode *topNode) char buffer[1000]; snprintf(buffer, 1000, "%s", events[eventIndex].data.scalar.value); map->setTmpKey(Key(buffer)); + _debug("KEY %s", buffer); eventIndex++; @@ -394,15 +396,15 @@ void YamlParser::constructNativeData() { switch((*iter)->getType()){ case SCALAR: - // _debug("construct scalar"); + _debug("construct scalar"); throw YamlParserException("No scalar allowed at document level, expect a mapping"); break; case SEQUENCE: - // _debug("construct sequence"); + _debug("construct sequence"); throw YamlParserException("No sequence allowed at document level, expect a mapping"); break; case MAPPING: { - // _debug("construct mapping"); + _debug("construct mapping"); MappingNode *map = (MappingNode *)(*iter); mainNativeDataMapping(map); break; @@ -428,11 +430,11 @@ void YamlParser::mainNativeDataMapping(MappingNode *map) { Key audio("audio"); Key hooks("hooks"); Key preferences("preferences"); - Key voiplink("voiplink"); + Key voiplink("voipPreferences"); while(iter != map->getMapping()->end()) { - // _debug("Iterating: %s", iter->first.c_str()); + _debug("Iterating: %s", iter->first.c_str()); if(accounts.compare(iter->first) == 0) { accountSequence = (SequenceNode *)(iter->second); } @@ -449,13 +451,16 @@ void YamlParser::mainNativeDataMapping(MappingNode *map) { preferenceSequence = (SequenceNode *)(iter->second); } else if(voiplink.compare(iter->first) == 0) { + _debug("Adding voip preference sequence"); voiplinkSequence = (SequenceNode *)(iter->second); + _debug("Added"); } else throw YamlParserException("Unknow map key in configuration"); iter++; } + _debug("Done"); } /* diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h index c1305bff6f..5aa8519170 100644 --- a/sflphone-common/src/config/yamlparser.h +++ b/sflphone-common/src/config/yamlparser.h @@ -88,7 +88,7 @@ class YamlParser { SequenceNode *getHooksSequence(void) { return preferenceSequence; } - SequenceNode *getVoiplinkSequence(void) { return preferenceSequence; } + SequenceNode *getVoipPreferenceSequence(void) { return voiplinkSequence; } private: diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 959716c5a1..24036f246b 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1417,7 +1417,7 @@ bool ManagerImpl::saveConfig (void) { AccountMap::iterator iter = _accountMap.begin(); try{ - emitter = new Conf::YamlEmitter("/tmp/sequenceEmiter.txt"); + emitter = new Conf::YamlEmitter("sequenceEmitter.yml"); while(iter != _accountMap.end()) { iter->second->serialize(emitter); @@ -1425,6 +1425,7 @@ bool ManagerImpl::saveConfig (void) { } preferences.serialize(emitter); + voipPreferences.serialize(emitter); emitter->serializeData(); @@ -4123,7 +4124,7 @@ short ManagerImpl::buildConfiguration() { try { - parser = new Conf::YamlParser("sequence2.yml"); + parser = new Conf::YamlParser("sequenceParser.yml"); parser->serializeEvents(); @@ -4137,7 +4138,8 @@ short ManagerImpl::buildConfiguration() { } // build preferences - preferences.unserialize((Conf::MappingNode *)(parser->getAccountSequence())); + preferences.unserialize((Conf::MappingNode *)(parser->getPreferenceSequence())); + voipPreferences.unserialize((Conf::MappingNode *)(parser->getVoipPreferenceSequence())); Conf::SequenceNode *seq = parser->getAccountSequence(); diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index 1f79de5c5d..b124bbe971 100755 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -116,6 +116,8 @@ class ManagerImpl { Preferences preferences; + VoipPreference voipPreferences; + short buildConfiguration(); /** diff --git a/sflphone-common/src/preferences.h b/sflphone-common/src/preferences.h index 0b8330ae36..92edbd7295 100755 --- a/sflphone-common/src/preferences.h +++ b/sflphone-common/src/preferences.h @@ -46,6 +46,16 @@ const Conf::Key searchBarDisplayKey("searchBarDisplay"); // : true const Conf::Key zeroConfenableKey("zeroConfenable"); // : false const Conf::Key md5HashKey("md5Hash"); // : false + +const Conf::Key playDtmfKey("playDtmf"); // true true +const Conf::Key playTonesKey("playTones"); // true +const Conf::Key pulseLengthKey("pulseLength"); //=250 +const Conf::Key sendDtmfAsKey("sendDtmfAs");// =0 +const Conf::Key symmetricRtpKey("symmetric");// =true +const Conf::Key zidFileKey("zidFile");// =sfl.zid + + + class Preferences : public Serializable { public: @@ -114,4 +124,46 @@ class Preferences : public Serializable { }; + +class VoipPreference : public Serializable { + + public: + + VoipPreference(); + + ~VoipPreference(); + + virtual void serialize(Conf::YamlEmitter *emitter); + + virtual void unserialize(Conf::MappingNode *map); + + bool getPlayDtmf(void) { return _playDtmf; } + void setPlayDtmf(bool dtmf) { _playDtmf = dtmf; } + + bool getPlayTones(void) { return _playTones; } + void setPlayTones(bool tone) { _playTones = tone; } + + int getPulseLength(void) { return _pulseLength; } + void setPulseLength(int length) { _pulseLength = length; } + + int getSendDtmfAs(void) { return _sendDtmfAs; } + void setSendDtmfAs(int dtmf) { _sendDtmfAs = dtmf; } + + bool getSymmetricRtp(void) { return _symmetricRtp; } + void setSymmetricRtp(bool sym) { _symmetricRtp = sym; } + + std::string getZidFile(void) { return _zidFile; } + void setZidFile(std::string file) { _zidFile = file; } + + private: + + bool _playDtmf; + bool _playTones; + int _pulseLength; + int _sendDtmfAs; + bool _symmetricRtp; + std::string _zidFile; + +}; + #endif -- GitLab From ac6cad2e0f7d045a70f0664e11d6c730f96cf4e0 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Thu, 8 Jul 2010 15:10:27 -0400 Subject: [PATCH 140/197] [#3681] Browse preferences section with an icon view --- sflphone-client-gnome/src/config/audioconf.c | 73 +-- .../src/config/preferencesdialog.c | 521 +++++++++++------- .../src/config/preferencesdialog.h | 2 + .../src/icons/icon_factory.c | 7 + .../src/icons/icon_factory.h | 2 + 5 files changed, 350 insertions(+), 255 deletions(-) diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c index bcf82af8b0..b96532e442 100644 --- a/sflphone-client-gnome/src/config/audioconf.c +++ b/sflphone-client-gnome/src/config/audioconf.c @@ -927,44 +927,6 @@ GtkWidget* alsa_box() return ret; } -GtkWidget* noise_box() -{ - GtkWidget *ret; - GtkWidget *enableEchoCancel; - GtkWidget *enableNoiseReduction; - gboolean echocancelActive, noisesuppressActive; - gchar *state; - - ret = gtk_hbox_new( TRUE , 1); - - enableEchoCancel = gtk_check_button_new_with_mnemonic( _("_Echo Suppression")); - state = dbus_get_echo_cancel_state(); - echocancelActive = FALSE; - if(strcmp(state, "enabled") == 0) - echocancelActive = TRUE; - else - echocancelActive = FALSE; - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableEchoCancel), echocancelActive); - g_signal_connect(G_OBJECT(enableEchoCancel), "clicked", active_echo_cancel, NULL); - - gtk_box_pack_start( GTK_BOX(ret), enableEchoCancel, TRUE , TRUE , 1); - - - enableNoiseReduction = gtk_check_button_new_with_mnemonic( _("_Noise Reduction")); - state = dbus_get_noise_suppress_state(); - noisesuppressActive = FALSE; - if(strcmp(state, "enabled") == 0) - noisesuppressActive = TRUE; - else - noisesuppressActive = FALSE; - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableNoiseReduction), noisesuppressActive); - gtk_box_pack_start( GTK_BOX(ret) , enableNoiseReduction , TRUE , TRUE , 1); - - g_signal_connect(G_OBJECT(enableNoiseReduction), "clicked", active_noise_suppress, NULL); - - return ret; -} - static void record_path_changed( GtkFileChooser *chooser , GtkLabel *label UNUSED) { DEBUG("record_path_changed"); @@ -982,6 +944,10 @@ GtkWidget* create_audio_configuration() // Sub boxes GtkWidget *box; GtkWidget *frame; + GtkWidget *enableEchoCancel; + GtkWidget *enableNoiseReduction; + gboolean echocancelActive, noisesuppressActive; + gchar *state; ret = gtk_vbox_new(FALSE, 10); gtk_container_set_border_width(GTK_CONTAINER(ret), 10); @@ -1068,14 +1034,31 @@ GtkWidget* create_audio_configuration() gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( fileChooser ) , filter); gtk_table_attach ( GTK_TABLE( table ), fileChooser, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gnome_main_section_new (_("Voice enhancement settings"), &noise_conf); - gtk_box_pack_start(GTK_BOX(ret), noise_conf, FALSE, FALSE, 0); - gtk_widget_show( noise_conf ); - // Box for the voice enhancement configuration - noisebox = noise_box(); - gtk_container_add( GTK_CONTAINER(noise_conf) , noisebox ); - + gnome_main_section_new_with_table (_("Voice enhancement settings"), &frame, &table, 2, 1); + gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); + + enableEchoCancel = gtk_check_button_new_with_mnemonic( _("_Echo Suppression")); + state = dbus_get_echo_cancel_state(); + echocancelActive = FALSE; + if(strcmp(state, "enabled") == 0) + echocancelActive = TRUE; + else + echocancelActive = FALSE; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableEchoCancel), echocancelActive); + g_signal_connect(G_OBJECT(enableEchoCancel), "clicked", active_echo_cancel, NULL); + gtk_table_attach ( GTK_TABLE(table), enableEchoCancel, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + enableNoiseReduction = gtk_check_button_new_with_mnemonic( _("_Noise Reduction")); + state = dbus_get_noise_suppress_state(); + noisesuppressActive = FALSE; + if(strcmp(state, "enabled") == 0) + noisesuppressActive = TRUE; + else + noisesuppressActive = FALSE; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableNoiseReduction), noisesuppressActive); + g_signal_connect(G_OBJECT(enableNoiseReduction), "clicked", active_noise_suppress, NULL); + gtk_table_attach ( GTK_TABLE(table), enableNoiseReduction, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show_all(ret); diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index ff68a31c7a..9dd08ccd81 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -32,22 +32,14 @@ */ #include <gtk/gtk.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> -#include <accountlist.h> #include <accountconfigdialog.h> -#include <actions.h> -#include <config.h> -#include <dbus/dbus.h> -#include <mainwindow.h> -#include <audioconf.h> #include <addressbook-config.h> #include <shortcuts-config.h> #include <hooks-config.h> -#include <utils.h> - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> /** * Local variables @@ -56,37 +48,54 @@ gboolean accDialogOpen = FALSE; gboolean dialogOpen = FALSE; gboolean ringtoneEnabled = TRUE; -GtkWidget * localPortSpinBox; -GtkWidget * localAddressCombo; - -GtkWidget * history_value; GtkWidget * status; +GtkWidget * history_value; -GtkWidget *showstatusicon; GtkWidget *starthidden; GtkWidget *popupwindow; GtkWidget *neverpopupwindow; +GtkWidget *treeView; +GtkWidget *iconview; +GtkCellRenderer *renderer; +GtkTreeViewColumn *column; +GtkTreeSelection *selection; +GtkWidget * notebook; + + +enum { + PIXBUF_COL, + TEXT_COL, + PAGE_NUMBER +}; + +typedef struct { + gchar* icon_descr; + gchar* icon_name; + gint page_number; +} browser_t; + + static int history_limit; static gboolean history_enabled = TRUE; -static void + static void set_md5_hash_cb (GtkWidget *widget UNUSED, gpointer data UNUSED) { - gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget)); - dbus_set_md5_credential_hashing (enabled); + gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget)); + dbus_set_md5_credential_hashing (enabled); } -static void + static void start_hidden (void) { gboolean currentstate = eel_gconf_get_integer (START_HIDDEN); eel_gconf_set_integer (START_HIDDEN, !currentstate); } -static void + static void set_popup_mode (GtkWidget *widget, gpointer *userdata) { gboolean currentstate = eel_gconf_get_integer (POPUP_ON_CALL); @@ -95,248 +104,340 @@ set_popup_mode (GtkWidget *widget, gpointer *userdata) } } -void + void set_notif_level () { gboolean current_state = eel_gconf_get_integer (NOTIFY_ALL); eel_gconf_set_integer (NOTIFY_ALL, !current_state); } -static void + static void history_limit_cb (GtkSpinButton *button, void *ptr) { - history_limit = gtk_spin_button_get_value_as_int ((GtkSpinButton *) (ptr)); + history_limit = gtk_spin_button_get_value_as_int ((GtkSpinButton *) (ptr)); } -static void + static void history_enabled_cb (GtkWidget *widget) { - history_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); - gtk_widget_set_sensitive (GTK_WIDGET (history_value), history_enabled); + history_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); + gtk_widget_set_sensitive (GTK_WIDGET (history_value), history_enabled); - // Toggle it through D-Bus - eel_gconf_set_integer (HISTORY_ENABLED, !eel_gconf_get_integer (HISTORY_ENABLED)); + // Toggle it through D-Bus + eel_gconf_set_integer (HISTORY_ENABLED, !eel_gconf_get_integer (HISTORY_ENABLED)); } -void + void clean_history (void) { - calllist_clean_history (); + calllist_clean_history (); } void showstatusicon_cb (GtkWidget *widget, gpointer data) { - gboolean currentstatus = FALSE; + gboolean currentstatus = FALSE; - // data contains the previous value of dbus_is_status_icon_enabled () - ie before the click. - currentstatus = (gboolean) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); + // data contains the previous value of dbus_is_status_icon_enabled () - ie before the click. + currentstatus = (gboolean) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); - // Update the widget states - gtk_widget_set_sensitive (GTK_WIDGET (popupwindow), currentstatus); - gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow), currentstatus); - gtk_widget_set_sensitive (GTK_WIDGET (starthidden), currentstatus); + // Update the widget states + gtk_widget_set_sensitive (GTK_WIDGET (popupwindow), currentstatus); + gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow), currentstatus); + gtk_widget_set_sensitive (GTK_WIDGET (starthidden), currentstatus); - currentstatus ? show_status_icon () : hide_status_icon (); + currentstatus ? show_status_icon () : hide_status_icon (); // Update through D-Bus eel_gconf_set_integer (SHOW_STATUSICON, currentstatus); } -GtkWidget* + GtkWidget* create_general_settings () { - GtkWidget *ret, *notifAll, *trayItem, *frame, *checkBoxWidget, *label, *table; - gboolean statusicon; - - // Load history configuration - history_load_configuration (); - - // Main widget - ret = gtk_vbox_new (FALSE, 10); - gtk_container_set_border_width (GTK_CONTAINER(ret), 10); - - // Notifications Frame - gnome_main_section_new_with_table (_("Desktop Notifications"), &frame, - &table, 2, 1); - gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); - - // Notification All - notifAll = gtk_check_button_new_with_mnemonic (_("_Enable notifications")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(notifAll), eel_gconf_get_integer (NOTIFY_ALL)); - g_signal_connect(G_OBJECT( notifAll ) , "clicked" , G_CALLBACK( set_notif_level ) , NULL ); - gtk_table_attach (GTK_TABLE(table), notifAll, 0, 1, 0, 1, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - // System Tray option frame - gnome_main_section_new_with_table (_("System Tray Icon"), &frame, &table, 4, - 1); - gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); - - // Whether or not displaying an icon in the system tray - statusicon = eel_gconf_get_integer (SHOW_STATUSICON); - - showstatusicon = gtk_check_button_new_with_mnemonic ( - _("Show SFLphone in the system tray")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(showstatusicon), statusicon); - g_signal_connect (G_OBJECT (showstatusicon) , "clicked" , G_CALLBACK (showstatusicon_cb), NULL); - gtk_table_attach (GTK_TABLE (table), showstatusicon, 0, 1, 0, 1, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - popupwindow = gtk_radio_button_new_with_mnemonic (NULL, - _("_Popup main window on incoming call")); - g_signal_connect(G_OBJECT (popupwindow), "toggled", G_CALLBACK (set_popup_mode), NULL); - gtk_table_attach (GTK_TABLE(table), popupwindow, 0, 1, 1, 2, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - neverpopupwindow = gtk_radio_button_new_with_mnemonic_from_widget ( - GTK_RADIO_BUTTON (popupwindow), _("Ne_ver popup main window")); - gtk_table_attach (GTK_TABLE(table), neverpopupwindow, 0, 1, 2, 3, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + GtkWidget *ret, *notifAll, *trayItem, *frame, *checkBoxWidget, *label, *table, *showstatusicon; + gboolean statusicon; + + // Load history configuration + history_load_configuration (); + + // Main widget + ret = gtk_vbox_new (FALSE, 10); + gtk_container_set_border_width (GTK_CONTAINER(ret), 10); + + // Notifications Frame + gnome_main_section_new_with_table (_("Desktop Notifications"), &frame, + &table, 2, 1); + gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); + + // Notification All + notifAll = gtk_check_button_new_with_mnemonic (_("_Enable notifications")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(notifAll), eel_gconf_get_integer (NOTIFY_ALL)); + g_signal_connect(G_OBJECT( notifAll ) , "clicked" , G_CALLBACK( set_notif_level ) , NULL ); + gtk_table_attach (GTK_TABLE(table), notifAll, 0, 1, 0, 1, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + // System Tray option frame + gnome_main_section_new_with_table (_("System Tray Icon"), &frame, &table, 4, + 1); + gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); + + // Whether or not displaying an icon in the system tray + statusicon = eel_gconf_get_integer (SHOW_STATUSICON); + + showstatusicon = gtk_check_button_new_with_mnemonic ( + _("Show SFLphone in the system tray")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(showstatusicon), statusicon); + g_signal_connect (G_OBJECT (showstatusicon) , "clicked" , G_CALLBACK (showstatusicon_cb), NULL); + gtk_table_attach (GTK_TABLE (table), showstatusicon, 0, 1, 0, 1, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + popupwindow = gtk_radio_button_new_with_mnemonic (NULL, + _("_Popup main window on incoming call")); + g_signal_connect(G_OBJECT (popupwindow), "toggled", G_CALLBACK (set_popup_mode), NULL); + gtk_table_attach (GTK_TABLE(table), popupwindow, 0, 1, 1, 2, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + neverpopupwindow = gtk_radio_button_new_with_mnemonic_from_widget ( + GTK_RADIO_BUTTON (popupwindow), _("Ne_ver popup main window")); + gtk_table_attach (GTK_TABLE(table), neverpopupwindow, 0, 1, 2, 3, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); // Toggle according to the user configuration eel_gconf_get_integer (POPUP_ON_CALL) ? gtk_toggle_button_set_active ( - GTK_TOGGLE_BUTTON (popupwindow), - TRUE) : - gtk_toggle_button_set_active ( - GTK_TOGGLE_BUTTON (neverpopupwindow), - TRUE); - - starthidden = gtk_check_button_new_with_mnemonic ( - _("Hide SFLphone window on _startup")); - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(starthidden), - eel_gconf_get_integer (START_HIDDEN)); - g_signal_connect(G_OBJECT (starthidden) , "clicked" , G_CALLBACK( start_hidden ) , NULL); - gtk_table_attach (GTK_TABLE(table), starthidden, 0, 1, 3, 4, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - // Update the widget states - gtk_widget_set_sensitive (GTK_WIDGET (popupwindow),statusicon); - gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow),statusicon); - gtk_widget_set_sensitive (GTK_WIDGET (starthidden),statusicon); - - // HISTORY CONFIGURATION - gnome_main_section_new_with_table (_("Calls History"), &frame, &table, 3, 1); - gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); - - checkBoxWidget = gtk_check_button_new_with_mnemonic ( - _("_Keep my history for at least")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkBoxWidget), - history_enabled); - g_signal_connect (G_OBJECT (checkBoxWidget) , "clicked" , G_CALLBACK (history_enabled_cb) , NULL); - gtk_table_attach (GTK_TABLE(table), checkBoxWidget, 0, 1, 0, 1, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - history_value = gtk_spin_button_new_with_range (1, 99, 1); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(history_value), history_limit); - g_signal_connect( G_OBJECT (history_value) , "value-changed" , G_CALLBACK (history_limit_cb) , history_value); - gtk_widget_set_sensitive (GTK_WIDGET (history_value), - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkBoxWidget))); - gtk_table_attach (GTK_TABLE(table), history_value, 1, 2, 0, 1, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - label = gtk_label_new (_("days")); - gtk_table_attach (GTK_TABLE(table), label, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, - GTK_EXPAND | GTK_FILL, 0, 5); - - gtk_widget_show_all (ret); - - return ret; + GTK_TOGGLE_BUTTON (popupwindow), + TRUE) : + gtk_toggle_button_set_active ( + GTK_TOGGLE_BUTTON (neverpopupwindow), + TRUE); + + starthidden = gtk_check_button_new_with_mnemonic ( + _("Hide SFLphone window on _startup")); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(starthidden), + eel_gconf_get_integer (START_HIDDEN)); + g_signal_connect(G_OBJECT (starthidden) , "clicked" , G_CALLBACK( start_hidden ) , NULL); + gtk_table_attach (GTK_TABLE(table), starthidden, 0, 1, 3, 4, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + // Update the widget states + gtk_widget_set_sensitive (GTK_WIDGET (popupwindow),statusicon); + gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow),statusicon); + gtk_widget_set_sensitive (GTK_WIDGET (starthidden),statusicon); + + // HISTORY CONFIGURATION + gnome_main_section_new_with_table (_("Calls History"), &frame, &table, 3, 1); + gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); + + checkBoxWidget = gtk_check_button_new_with_mnemonic ( + _("_Keep my history for at least")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkBoxWidget), + history_enabled); + g_signal_connect (G_OBJECT (checkBoxWidget) , "clicked" , G_CALLBACK (history_enabled_cb) , NULL); + gtk_table_attach (GTK_TABLE(table), checkBoxWidget, 0, 1, 0, 1, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + history_value = gtk_spin_button_new_with_range (1, 99, 1); + gtk_spin_button_set_value (GTK_SPIN_BUTTON(history_value), history_limit); + g_signal_connect( G_OBJECT (history_value) , "value-changed" , G_CALLBACK (history_limit_cb) , history_value); + gtk_widget_set_sensitive (GTK_WIDGET (history_value), + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkBoxWidget))); + gtk_table_attach (GTK_TABLE(table), history_value, 1, 2, 0, 1, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + label = gtk_label_new (_("days")); + gtk_table_attach (GTK_TABLE(table), label, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, + GTK_EXPAND | GTK_FILL, 0, 5); + + gtk_widget_show_all (ret); + + return ret; } -void + void save_configuration_parameters (void) { - // Address book config - addressbook_config_save_parameters (); - hooks_save_parameters (); + // Address book config + addressbook_config_save_parameters (); + hooks_save_parameters (); - // History config - dbus_set_history_limit (history_limit); + // History config + dbus_set_history_limit (history_limit); - // Direct IP calls config - // dbus_set_ip2ip_details (directIpCallsProperties); + // Direct IP calls config + // dbus_set_ip2ip_details (directIpCallsProperties); } -void + void history_load_configuration () { - history_limit = dbus_get_history_limit (); - history_enabled = eel_gconf_get_integer (HISTORY_ENABLED); + history_limit = dbus_get_history_limit (); + history_enabled = eel_gconf_get_integer (HISTORY_ENABLED); } + +gboolean selection_changed_cb (GtkIconView *view, gpointer user_data) { + + GtkTreeModel *model; + GtkTreeIter iter; + GList *list; + gint page; + + model = gtk_icon_view_get_model (view); + list = gtk_icon_view_get_selected_items (view); + + if (list == NULL) + return; + + if (g_list_length (list) > 1) + return; + + gtk_tree_model_get_iter (model, &iter, list->data); + gtk_tree_model_get (model, &iter, PAGE_NUMBER, &page, -1); + + gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), page); + g_list_foreach (list, (GFunc)gtk_tree_path_free, NULL); + g_list_free (list); +} + + + /** * Show configuration window with tabs */ -void + void show_preferences_dialog () { - GtkDialog * dialog; - GtkWidget * notebook; - GtkWidget * tab; - guint result; - - dialogOpen = TRUE; - - dialog = GTK_DIALOG(gtk_dialog_new_with_buttons (_("Preferences"), - GTK_WINDOW(get_main_window()), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_CLOSE, - GTK_RESPONSE_ACCEPT, - NULL)); - - // Set window properties - gtk_dialog_set_has_separator (dialog, FALSE); - gtk_window_set_default_size (GTK_WINDOW(dialog), 600, 400); - gtk_container_set_border_width (GTK_CONTAINER(dialog), 0); - - // Create tabs container - notebook = gtk_notebook_new (); - gtk_box_pack_start (GTK_BOX (dialog->vbox), notebook, TRUE, TRUE, 0); - gtk_container_set_border_width (GTK_CONTAINER(notebook), 10); - gtk_widget_show (notebook); - - // General settings tab - tab = create_general_settings (); - gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( - _("General"))); - gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); - - // Audio tab - tab = create_audio_configuration (); - gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( - _("Audio"))); - gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); - - // Addressbook tab - tab = create_addressbook_settings (); - gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( - _("Address Book"))); - gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); - - // Hooks tab - tab = create_hooks_settings (); - gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( - _("Hooks"))); - gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); - - // Shortcuts tab - tab = create_shortcuts_settings(); - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Shortcuts"))); - gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab); - - gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0); - - result = gtk_dialog_run (dialog); - - save_configuration_parameters (); - update_actions (); - - dialogOpen = FALSE; - - gtk_widget_destroy (GTK_WIDGET(dialog)); + GtkDialog * dialog; + GtkWidget * hbox; + GtkWidget * tab; + guint result; + + dialogOpen = TRUE; + + dialog = GTK_DIALOG(gtk_dialog_new_with_buttons (_("Preferences"), + GTK_WINDOW(get_main_window()), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CLOSE, + GTK_RESPONSE_ACCEPT, + NULL)); + + // Set window properties + gtk_dialog_set_has_separator (dialog, FALSE); + gtk_window_set_default_size (GTK_WINDOW(dialog), 600, 400); + gtk_container_set_border_width (GTK_CONTAINER(dialog), 0); + + + hbox = gtk_hbox_new(FALSE, 10); + + // Create tree view + iconview = gtk_icon_view_new_with_model (createModel ()); + g_object_set (iconview, + "selection-mode", GTK_SELECTION_BROWSE, + "text-column", TEXT_COL, + "pixbuf-column", PIXBUF_COL, + "columns", 1, + "margin", 10, + NULL); + // Connect the callback when clicking on an item + g_signal_connect(G_OBJECT (iconview), "selection-changed", G_CALLBACK (selection_changed_cb), NULL); + gtk_box_pack_start (GTK_BOX (hbox), iconview, TRUE, TRUE, 0); + + // Create tabs container + notebook = gtk_notebook_new (); + gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE); + gtk_box_pack_end (GTK_BOX (hbox), notebook, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (dialog->vbox), hbox, TRUE, TRUE, 0); + gtk_widget_show_all(dialog->vbox); + gtk_container_set_border_width (GTK_CONTAINER(notebook), 10); + gtk_widget_show (notebook); + + // General settings tab + tab = create_general_settings (); + gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( + _("General"))); + gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); + + // Audio tab + tab = create_audio_configuration (); + gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( + _("Audio"))); + gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); + + // Addressbook tab + tab = create_addressbook_settings (); + gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( + _("Address Book"))); + gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); + + // Hooks tab + tab = create_hooks_settings (); + gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( + _("Hooks"))); + gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); + + // Shortcuts tab + tab = create_shortcuts_settings(); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Shortcuts"))); + gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab); + + // By default, general settings + gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0); + // Highlight the corresponding icon + gtk_icon_view_select_path (iconview, gtk_tree_path_new_first ()); + + result = gtk_dialog_run (dialog); + + save_configuration_parameters (); + update_actions (); + + dialogOpen = FALSE; + + gtk_widget_destroy (GTK_WIDGET(dialog)); } + +GtkTreeModel* createModel() { + + browser_t browser_entries[5] = { + {_("General"), "start-here", 0}, + {_("Audio"), "multimedia-volume-control", 1}, + {_("Address Book"), "address-book-new", 2}, + {_("Hooks"), "gnome-globe", 3}, + {_("Shortcuts"), "preferences-desktop-keyboard", 4} + }; + + GdkPixbuf *pixbuf; + GtkTreeIter iter; + GtkListStore *store; + GError *error = NULL; + GtkIconSet *icon = NULL; + gint i; + + store = gtk_list_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT); + GtkIconTheme* theme = gtk_icon_theme_get_default(); + + for(i = 0; i < 5; i++) { + + gtk_list_store_append(store, &iter); + + pixbuf = gtk_icon_theme_load_icon (theme, browser_entries[i].icon_name, 48, 0, &error); + + gtk_list_store_set(store, &iter, + PIXBUF_COL, pixbuf, + TEXT_COL, browser_entries[i].icon_descr, + PAGE_NUMBER, browser_entries[i].page_number, + -1); + + if (pixbuf != NULL) { + gdk_pixbuf_unref (pixbuf); + } else { + DEBUG("Couldn't load icon: %s", error->message); + g_error_free (error); + } + } + + return GTK_TREE_MODEL(store); +} diff --git a/sflphone-client-gnome/src/config/preferencesdialog.h b/sflphone-client-gnome/src/config/preferencesdialog.h index e14a240111..7f7db4d26e 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.h +++ b/sflphone-client-gnome/src/config/preferencesdialog.h @@ -121,4 +121,6 @@ void save_configuration_parameters (void); void history_load_configuration (void); +GtkTreeModel* createModel(); + #endif diff --git a/sflphone-client-gnome/src/icons/icon_factory.c b/sflphone-client-gnome/src/icons/icon_factory.c index c18e038b0a..2d2d944fdb 100644 --- a/sflphone-client-gnome/src/icons/icon_factory.c +++ b/sflphone-client-gnome/src/icons/icon_factory.c @@ -29,6 +29,8 @@ */ #include "icon_factory.h" +#include "icons/pixmap_data.h" + static GtkIconFactory *icon_factory = NULL; @@ -59,6 +61,11 @@ void add_icon (GtkIconFactory *factory, const gchar *stock_id, const guint8 *ico DEBUG ("Icon %s already exists in factory\n", stock_id); } +GtkIconSet* lookup_sflphone_factory (const gchar *stock_id) { + + return gtk_icon_factory_lookup (icon_factory, stock_id); +} + void register_sflphone_stock_icons (GtkIconFactory *factory) { add_icon (factory, GTK_STOCK_PICKUP, gnome_stock_pickup, GTK_ICON_SIZE_SMALL_TOOLBAR); diff --git a/sflphone-client-gnome/src/icons/icon_factory.h b/sflphone-client-gnome/src/icons/icon_factory.h index 6392832ac6..b31c1b89a2 100644 --- a/sflphone-client-gnome/src/icons/icon_factory.h +++ b/sflphone-client-gnome/src/icons/icon_factory.h @@ -49,6 +49,8 @@ G_BEGIN_DECLS void init_icon_factory (void); +GtkIconSet* lookup_sflphone_factory (const gchar *stock_id); + G_END_DECLS #endif -- GitLab From d23e280b78c4247b4fb5625b7f254f40eed80410 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 8 Jul 2010 17:10:48 -0400 Subject: [PATCH 141/197] [#3649] Finalize preference parsing and serialization --- sflphone-common/sequenceParser.yml | 94 +++---- sflphone-common/src/config/yamlemitter.cpp | 93 ++++++- sflphone-common/src/config/yamlemitter.h | 6 +- sflphone-common/src/config/yamlnode.cpp | 12 +- sflphone-common/src/config/yamlparser.cpp | 14 +- sflphone-common/src/config/yamlparser.h | 6 +- sflphone-common/src/managerimpl.cpp | 6 + sflphone-common/src/managerimpl.h | 6 + sflphone-common/src/preferences.cpp | 301 ++++++++++++++++++++- sflphone-common/src/preferences.h | 201 +++++++++++++- 10 files changed, 676 insertions(+), 63 deletions(-) diff --git a/sflphone-common/sequenceParser.yml b/sflphone-common/sequenceParser.yml index 98abe4fa53..88602a0125 100755 --- a/sflphone-common/sequenceParser.yml +++ b/sflphone-common/sequenceParser.yml @@ -1,3 +1,4 @@ +--- accounts: - id: IP2IP alias: @@ -135,30 +136,30 @@ accounts: verifyServer: false addressbook: - photo: false - enabled: true - list: 1243608768.30329.0@emilou-desktop/1243456917.15690.23@emilou-desktop/ - max_results: 25 - business: true - home: false - mobile: false + photo: true + enabled: true + list: 1243608768.30329.0@emilou-desktop/1243456917.15690.23@emilou-desktop/ + maxResults: 25 + business: true + home: false + mobile: false audio: alsa: - cardin: 0 - cardout: 0 - cardout: 0 - framesize: 20 - plugin: default - smplrate: 44100 + cardin: 0 + cardout: 0 + cardout: 0 + framesize: 20 + plugin: default + smplrate: 44100 pulse: devicePlayback: deviceRecord: deviceRingtone: - recordpath: /home/msavard/Bureau - ringchoice: /usr/share/sflphone/ringtones/konga.ul - volumemic: 100 - volumespkr: 100 + recordpath: /home/msavard/Bureau + ringchoice: /usr/share/sflphone/ringtones/konga.ul + volumemic: 100 + volumespkr: 100 hooks: iax2Enabled: false @@ -169,34 +170,33 @@ hooks: urlSipField: X-sflphone-url preferences: - order: 1234/2345/ - audioApi: 0 - dialpadDisplay: 0 - historyEnabled: 1 - historyLimit: 30 - historyMaxCalls: 20 - notifyAll: true - notifyMails: false - zoneToneChoice: North America - registrationExpire: 180 - ringtoneEnabled: true - portNum: 5060 - searchBarDisplay: true - startHidden: 0 - volumeDisplay: 0 - windowHeight: 332 - windowPopup: 0 - windowPosition: 0 - windowWidth: 240 - zeroConfenable: false - md5Hash: false + order: Account:1278432440/Account:1278432417/ + audioApi: 0 + dialpadDisplay: 0 + historyEnabled: 1 + historyLimit: 30 + historyMaxCalls: 20 + notifyAll: true + notifyMails: false + zoneToneChoice: North America + registrationExpire: 180 + ringtoneEnabled: true + portNum: 5060 + searchBarDisplay: true + startHidden: 0 + volumeDisplay: 0 + windowHeight: 332 + windowPopup: 0 + windowPosition: 0 + windowWidth: 240 + zeroConfenable: false + md5Hash: false -voiplink: - playDtmf: true - playTones: true - pulseLength: 250 - sendDTMFas: 0 - stunenable: 0 - stunserver: stun.sflphone.org - symmetric: true - zidFile: sfl.zid \ No newline at end of file +voipPreferences: + playDtmf: true + playTones: true + pulseLength: 250 + sendDtmfAs: 0 + symmetric: true + zidFile: sfl.zid +... \ No newline at end of file diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp index e069453c23..507fd35ffb 100755 --- a/sflphone-common/src/config/yamlemitter.cpp +++ b/sflphone-common/src/config/yamlemitter.cpp @@ -173,7 +173,98 @@ void YamlEmitter::serializeVoipPreference(MappingNode *map) int preferenceid, preferencemapping; - _debug("YamlEmitter: Serialize preference"); + _debug("YamlEmitter: Serialize voip preference"); + + if(map->getType() != MAPPING) + throw YamlEmitterException("Node type is not a mapping while writing preferences"); + + if((preferenceid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0) + throw YamlEmitterException("Could not add scalar to document"); + + if((preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0) + throw YamlEmitterException("Could not add mapping to document"); + + if(!yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping)) + throw YamlEmitterException("Could not add mapping pair to top leve mapping"); + + Mapping *internalmap = map->getMapping(); + Mapping::iterator iter = internalmap->begin(); + + while(iter != internalmap->end()) { + addMappingItem(preferencemapping, iter->first, iter->second); + iter++; + } + +} + +void YamlEmitter::serializeAddressbookPreference(MappingNode *map) +{ + std::string preferencestr("addressbook"); + + int preferenceid, preferencemapping; + + _debug("YamlEmitter: Serialize addressbook preferences"); + + if(map->getType() != MAPPING) + throw YamlEmitterException("Node type is not a mapping while writing preferences"); + + if((preferenceid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0) + throw YamlEmitterException("Could not add scalar to document"); + + if((preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0) + throw YamlEmitterException("Could not add mapping to document"); + + if(!yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping)) + throw YamlEmitterException("Could not add mapping pair to top leve mapping"); + + Mapping *internalmap = map->getMapping(); + Mapping::iterator iter = internalmap->begin(); + + while(iter != internalmap->end()) { + addMappingItem(preferencemapping, iter->first, iter->second); + iter++; + } + +} + +void YamlEmitter::serializeHooksPreference(MappingNode *map) +{ + std::string preferencestr("hooks"); + + int preferenceid, preferencemapping; + + _debug("YamlEmitter: Serialize hooks preferences"); + + if(map->getType() != MAPPING) + throw YamlEmitterException("Node type is not a mapping while writing preferences"); + + if((preferenceid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0) + throw YamlEmitterException("Could not add scalar to document"); + + if((preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0) + throw YamlEmitterException("Could not add mapping to document"); + + if(!yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping)) + throw YamlEmitterException("Could not add mapping pair to top leve mapping"); + + Mapping *internalmap = map->getMapping(); + Mapping::iterator iter = internalmap->begin(); + + while(iter != internalmap->end()) { + addMappingItem(preferencemapping, iter->first, iter->second); + iter++; + } + +} + + +void YamlEmitter::serializeAudioPreference(MappingNode *map) +{ + std::string preferencestr("audio"); + + int preferenceid, preferencemapping; + + _debug("YamlEmitter: Serialize hooks preferences"); if(map->getType() != MAPPING) throw YamlEmitterException("Node type is not a mapping while writing preferences"); diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h index 7126f7ae5e..ddf098fdc9 100755 --- a/sflphone-common/src/config/yamlemitter.h +++ b/sflphone-common/src/config/yamlemitter.h @@ -81,7 +81,11 @@ class YamlEmitter { void serializeVoipPreference(MappingNode *map); - void writeAddressbook(); + void serializeAddressbookPreference(MappingNode *map); + + void serializeHooksPreference(MappingNode *map); + + void serializeAudioPreference(MappingNode *map); void writeAudio(); diff --git a/sflphone-common/src/config/yamlnode.cpp b/sflphone-common/src/config/yamlnode.cpp index 51c4c97ee3..c494ea0443 100755 --- a/sflphone-common/src/config/yamlnode.cpp +++ b/sflphone-common/src/config/yamlnode.cpp @@ -29,6 +29,7 @@ */ #include "yamlnode.h" +#include "src/global.h" namespace Conf { @@ -65,7 +66,7 @@ void MappingNode::setKeyValue(Key key, YamlNode *value) void MappingNode::removeKeyValue(Key key) { - Mapping::iterator it = map.find(key); +Mapping::iterator it = map.find(key); map.erase(it); } @@ -73,7 +74,14 @@ void MappingNode::removeKeyValue(Key key) YamlNode *MappingNode::getValue(Key key) { Mapping::iterator it = map.find(key); - return it->second; + + if(it != map.end()) { + return it->second; + } + else { + _debug("Could not fine %s", key.c_str()); + return NULL; + } } diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index 7111406c82..a132d08f7c 100644 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -250,7 +250,7 @@ void YamlParser::processDocument() void YamlParser::processScalar(YamlNode *topNode) { - // _debug("YamlParser: process scalar"); + _debug("YamlParser: process scalar"); if(!topNode) throw YamlParserException("No container for scalar"); @@ -279,7 +279,7 @@ void YamlParser::processScalar(YamlNode *topNode) void YamlParser::processSequence(YamlNode *topNode) { - // _debug("YamlParser: process sequence"); + _debug("YamlParser: process sequence"); if(!topNode) throw YamlParserException("No container for sequence"); @@ -328,7 +328,7 @@ void YamlParser::processSequence(YamlNode *topNode) void YamlParser::processMapping(YamlNode *topNode) { - // _debug("YamlParser: process mapping"); + _debug("YamlParser: process mapping -----------------------------------------"); if(!topNode) throw YamlParserException("No container for mapping"); @@ -436,24 +436,28 @@ void YamlParser::mainNativeDataMapping(MappingNode *map) { _debug("Iterating: %s", iter->first.c_str()); if(accounts.compare(iter->first) == 0) { + _debug("Adding voip account sequence"); accountSequence = (SequenceNode *)(iter->second); } else if(addressbook.compare(iter->first) == 0) { + _debug("Adding voip addressbook sequence"); addressbookSequence = (SequenceNode *)(iter->second); } else if(audio.compare(iter->first) == 0) { + _debug("Adding voip audio sequence"); audioSequence = (SequenceNode *)(iter->second); } else if(hooks.compare(iter->first) == 0) { + _debug("Adding voip hooks sequence"); hooksSequence = (SequenceNode *)(iter->second); } else if(preferences.compare(iter->first) == 0) { + _debug("Adding voip preference sequence"); preferenceSequence = (SequenceNode *)(iter->second); } else if(voiplink.compare(iter->first) == 0) { - _debug("Adding voip preference sequence"); + _debug("Adding voip voip sequence"); voiplinkSequence = (SequenceNode *)(iter->second); - _debug("Added"); } else throw YamlParserException("Unknow map key in configuration"); diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h index 5aa8519170..5a3de72479 100644 --- a/sflphone-common/src/config/yamlparser.h +++ b/sflphone-common/src/config/yamlparser.h @@ -82,11 +82,11 @@ class YamlParser { SequenceNode *getPreferenceSequence(void) { return preferenceSequence; } - SequenceNode *getAddressbookSequence(void) { return preferenceSequence; } + SequenceNode *getAddressbookSequence(void) { return addressbookSequence; } - SequenceNode *getAudioSequence(void) { return preferenceSequence; } + SequenceNode *getAudioSequence(void) { return audioSequence; } - SequenceNode *getHooksSequence(void) { return preferenceSequence; } + SequenceNode *getHookSequence(void) { return hooksSequence; } SequenceNode *getVoipPreferenceSequence(void) { return voiplinkSequence; } diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 24036f246b..ac08563d9a 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1426,6 +1426,9 @@ bool ManagerImpl::saveConfig (void) { preferences.serialize(emitter); voipPreferences.serialize(emitter); + addressbookPreference.serialize(emitter); + hookPreference.serialize(emitter); + audioPreference.serialize(emitter); emitter->serializeData(); @@ -4140,6 +4143,9 @@ short ManagerImpl::buildConfiguration() { // build preferences preferences.unserialize((Conf::MappingNode *)(parser->getPreferenceSequence())); voipPreferences.unserialize((Conf::MappingNode *)(parser->getVoipPreferenceSequence())); + addressbookPreference.unserialize((Conf::MappingNode *)(parser->getAddressbookSequence())); + hookPreference.unserialize((Conf::MappingNode *)(parser->getHookSequence())); + audioPreference.unserialize((Conf::MappingNode *)(parser->getAudioSequence())); Conf::SequenceNode *seq = parser->getAccountSequence(); diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index b124bbe971..efe1077c06 100755 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -118,6 +118,12 @@ class ManagerImpl { VoipPreference voipPreferences; + AddressbookPreference addressbookPreference; + + HookPreference hookPreference; + + AudioPreference audioPreference; + short buildConfiguration(); /** diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp index d0190ae96c..6f6c4ad558 100644 --- a/sflphone-common/src/preferences.cpp +++ b/sflphone-common/src/preferences.cpp @@ -30,6 +30,7 @@ #include "preferences.h" #include <sstream> +#include "global.h" Preferences::Preferences() : _accountOrder("") , _audioApi(0) @@ -53,6 +54,8 @@ Preferences::~Preferences() {} void Preferences::serialize(Conf::YamlEmitter *emiter) { + _debug("Preference: Serialize configuration"); + Conf::MappingNode preferencemap(NULL); Conf::ScalarNode order(_accountOrder); @@ -92,6 +95,8 @@ void Preferences::serialize(Conf::YamlEmitter *emiter) void Preferences::unserialize(Conf::MappingNode *map) { + _debug("Preference: Unserialize configuration"); + Conf::ScalarNode *val; val = (Conf::ScalarNode *)(map->getValue(orderKey)); @@ -113,12 +118,302 @@ void Preferences::unserialize(Conf::MappingNode *map) val = (Conf::ScalarNode *)(map->getValue(portNumKey)); if(val) { _portNum = atoi(val->getValue().data()); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(searchBarDisplayKey)); - if(val) { _searchBarDisplay = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + if(val && !val->getValue().empty()) { _searchBarDisplay = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } val = (Conf::ScalarNode *)(map->getValue(zeroConfenableKey)); - if(val) { _zeroConfenable = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + if(val && !val->getValue().empty()) { _zeroConfenable = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } val = (Conf::ScalarNode *)(map->getValue(md5HashKey)); - if(val) { _md5Hash = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + if(val && !val->getValue().empty()) { _md5Hash = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + + + +} + + +VoipPreference::VoipPreference() : _playDtmf(true) + , _playTones(true) + , _pulseLength(250) + , _sendDtmfAs(0) + , _symmetricRtp(true) + , _zidFile("zidFile") +{ + +} + +VoipPreference::~VoipPreference() {} + + +void VoipPreference::serialize(Conf::YamlEmitter *emitter) +{ + Conf::MappingNode preferencemap(NULL); + + Conf::ScalarNode playDtmf(_playDtmf ? "true" : "false"); + Conf::ScalarNode playTones(_playTones ? "true" : "false"); + std::stringstream pulselengthstr; pulselengthstr << _pulseLength; + Conf::ScalarNode pulseLength(pulselengthstr.str()); + std::stringstream senddtmfstr; senddtmfstr << _sendDtmfAs; + Conf::ScalarNode sendDtmfAs(senddtmfstr.str()); + Conf::ScalarNode symmetricRtp(_symmetricRtp ? "true" : "false"); + Conf::ScalarNode zidFile(_zidFile.c_str()); + + preferencemap.setKeyValue(playDtmfKey, &playDtmf); + preferencemap.setKeyValue(playTonesKey, &playTones); + preferencemap.setKeyValue(pulseLengthKey, &pulseLength); + preferencemap.setKeyValue(sendDtmfAsKey, &sendDtmfAs); + preferencemap.setKeyValue(symmetricRtpKey, &symmetricRtp); + preferencemap.setKeyValue(zidFileKey, &zidFile); + + emitter->serializeVoipPreference(&preferencemap); +} + +void VoipPreference::unserialize(Conf::MappingNode *map) +{ + + _debug("VoipPreference: Unserialize configuration"); + Conf::ScalarNode *val = NULL; + val = (Conf::ScalarNode *)(map->getValue(playDtmfKey)); + if(val && !val->getValue().empty()) { _playDtmf = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(playTonesKey)); + if(val && !val->getValue().empty()) { _playTones = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(pulseLengthKey)); + if(val) { _pulseLength = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(sendDtmfAsKey)); + if(val) { _sendDtmfAs = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(symmetricRtpKey)); + if(val && !val->getValue().empty()) { _symmetricRtp = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(zidFileKey)); + if(val) { _zidFile = val->getValue().c_str(); val = NULL; } } + + + +AddressbookPreference::AddressbookPreference() : _photo(true) + , _enabled(true) + , _list("") + , _maxResults(25) + , _business(true) + , _home(true) + , _mobile(true) +{ + +} + +AddressbookPreference::~AddressbookPreference() {} + +void AddressbookPreference::serialize(Conf::YamlEmitter *emitter) +{ + _debug("Addressbook: Serialize configuration"); + + Conf::MappingNode preferencemap(NULL); + + Conf::ScalarNode photo(_photo ? "true" : "false"); + Conf::ScalarNode enabled(_enabled ? "true" : "false"); + Conf::ScalarNode list(_list); + std::stringstream maxresultstr; maxresultstr << _maxResults; + Conf::ScalarNode maxResults(maxresultstr.str()); + Conf::ScalarNode business(_business ? "true" : "false"); + Conf::ScalarNode home(_home ? "true" : "false"); + Conf::ScalarNode mobile(_mobile ? "true" : "false"); + + preferencemap.setKeyValue(photoKey, &photo); + preferencemap.setKeyValue(enabledKey, &enabled); + preferencemap.setKeyValue(listKey, &list); + preferencemap.setKeyValue(maxResultsKey, &maxResults); + preferencemap.setKeyValue(businessKey, &business); + preferencemap.setKeyValue(homeKey, &home); + preferencemap.setKeyValue(mobileKey, &mobile); + + emitter->serializeAddressbookPreference(&preferencemap); + +} + +void AddressbookPreference::unserialize(Conf::MappingNode *map) +{ + _debug("Addressbook: Unserialize configuration"); + + Conf::ScalarNode *val = NULL; + + val = (Conf::ScalarNode *)(map->getValue(photoKey)); + if(val && !(val->getValue().empty())) { _photo = (val->getValue() == "true") ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(enabledKey)); + if(val && !val->getValue().empty()) { _enabled = (val->getValue() == "true") ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(listKey)); + if(val) { _list = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(maxResultsKey)); + if(val) { _maxResults = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(businessKey)); + if(val && !val->getValue().empty()) { _business = (val->getValue() == "true") ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(homeKey)); + if(val && !val->getValue().empty()) { _home = (val->getValue() == "true") ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(mobileKey)); + if(val && !val->getValue().empty()) { _mobile = (val->getValue() == "true") ? true : false; val = NULL; } + +} + + +HookPreference::HookPreference() : _iax2Enabled(false) + , _numberAddPrefix(false) + , _numberEnabled(false) + , _sipEnabled(false) + , _urlCommand("x-www-browser") + , _urlSipField("X-sflphone-url") +{ + +} + +HookPreference::~HookPreference() {} + +void HookPreference::serialize(Conf::YamlEmitter *emitter) +{ + _debug("Hook: Serialize configuration"); + + Conf::MappingNode preferencemap(NULL); + + Conf::ScalarNode iax2Enabled(_iax2Enabled ? "true" : "false"); + Conf::ScalarNode numberAddPrefix(_numberAddPrefix ? "true" : "false"); + Conf::ScalarNode numberEnabled(_numberEnabled ? "true" : "false"); + Conf::ScalarNode sipEnabled(_sipEnabled ? "true" : "false"); + Conf::ScalarNode urlCommand(_urlCommand); + Conf::ScalarNode urlSipField(_urlSipField); + + preferencemap.setKeyValue(iax2EnabledKey, &iax2Enabled); + preferencemap.setKeyValue(numberAddPrefixKey, &numberAddPrefix); + preferencemap.setKeyValue(numberEnabledKey, &numberEnabled); + preferencemap.setKeyValue(sipEnabledKey, &sipEnabled); + preferencemap.setKeyValue(urlCommandKey, &urlCommand); + preferencemap.setKeyValue(urlSipFieldKey, &urlSipField); + + emitter->serializeHooksPreference(&preferencemap); +} + +void HookPreference::unserialize(Conf::MappingNode *map) +{ + Conf::ScalarNode *val = NULL; + + _debug("Hook: Unserialize preference"); + + val = (Conf::ScalarNode *)(map->getValue(iax2EnabledKey)); + if(val) { _iax2Enabled = (val->getValue() == "true") ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(numberAddPrefixKey)); + if(val) { _numberAddPrefix = (val->getValue() == "true") ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(numberEnabledKey)); + if(val) { _numberEnabled = (val->getValue() == "true") ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(sipEnabledKey)); + if(val) { _sipEnabled = (val->getValue() == "true") ? true : false; val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(urlCommandKey)); + if(val) { _urlCommand = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(urlSipFieldKey)); + if(val) { _urlSipField = val->getValue(); val = NULL; } + + +} + + + +AudioPreference::AudioPreference() : _cardin(0) + , _cardout(0) + , _cardring(0) + , _framesize(20) + , _plugin("default") + , _smplrate(44100) + , _devicePlayback("") + , _deviceRecord("") + , _deviceRingtone("") + , _recordpath("") + , _ringchoice("/usr/share/sflphone/ringtones/konga.ul") + , _volumemic(100) + , _volumespkr(100) +{ + +} + +AudioPreference::~AudioPreference() {} + +void AudioPreference::serialize(Conf::YamlEmitter *emitter) +{ + Conf::MappingNode preferencemap(NULL); + Conf::MappingNode alsapreferencemap(NULL); + Conf::MappingNode pulsepreferencemap(NULL); + + // alsa preference + std::stringstream instr; instr << _cardin; + Conf::ScalarNode cardin(instr.str()); // 0 + std::stringstream outstr; outstr << _cardout; + Conf::ScalarNode cardout(outstr.str()); // 0 + std::stringstream ringstr; ringstr << _cardring; + Conf::ScalarNode cardring(ringstr.str());// 0 + std::stringstream framestr; framestr << _framesize; + Conf::ScalarNode framesize(framestr.str()); // 20 + Conf::ScalarNode plugin(_plugin); // default + std::stringstream ratestr; ratestr << _smplrate; + Conf::ScalarNode smplrate(ratestr.str());// 44100 + + //pulseaudio preference + Conf::ScalarNode devicePlayback(_devicePlayback);//: + Conf::ScalarNode deviceRecord(_deviceRecord); //: + Conf::ScalarNode deviceRingtone(_deviceRingtone); //: + + // general preference + Conf::ScalarNode recordpath(_recordpath); //: /home/msavard/Bureau + Conf::ScalarNode ringchoice(_ringchoice); // : /usr/share/sflphone/ringtones/konga.ul + std::stringstream micstr; micstr << _volumemic; + Conf::ScalarNode volumemic(micstr.str()); //: 100 + std::stringstream spkrstr; spkrstr << _volumespkr; + Conf::ScalarNode volumespkr(spkrstr.str()); //: 100 + + preferencemap.setKeyValue(recordpathKey, &recordpath); + preferencemap.setKeyValue(ringchoiceKey, &ringchoice); + preferencemap.setKeyValue(volumemicKey, &volumemic); + preferencemap.setKeyValue(volumespkrKey, &volumespkr); + + preferencemap.setKeyValue(alsamapKey, &alsapreferencemap); + alsapreferencemap.setKeyValue(cardinKey, &cardin); + alsapreferencemap.setKeyValue(cardoutKey, &cardout); + alsapreferencemap.setKeyValue(cardringKey, &cardring); + alsapreferencemap.setKeyValue(framesizeKey, &framesize); + alsapreferencemap.setKeyValue(pluginKey, &plugin); + alsapreferencemap.setKeyValue(smplrateKey, &smplrate); + + preferencemap.setKeyValue(pulsemapKey, &pulsepreferencemap); + pulsepreferencemap.setKeyValue(devicePlaybackKey, &devicePlayback); + pulsepreferencemap.setKeyValue(deviceRecordKey, &deviceRecord); + pulsepreferencemap.setKeyValue(deviceRingtoneKey, &deviceRingtone); + + emitter->serializeAudioPreference(&preferencemap); + +} + +void AudioPreference::unserialize(Conf::MappingNode *map) +{ + Conf::ScalarNode *val = NULL; + + val = (Conf::ScalarNode *)(map->getValue(cardinKey)); + if(val) { _cardin = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(cardoutKey)); + if(val) { _cardout = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(cardringKey)); + if(val) { _cardring = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(framesizeKey)); + if(val) { _framesize = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(smplrateKey)); + if(val) { _smplrate = atoi(val->getValue().data()); val = NULL; } + + val = (Conf::ScalarNode *)(map->getValue(devicePlaybackKey)); + if(val) { _devicePlayback = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(deviceRecordKey)); + if(val) { _deviceRecord = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(deviceRingtoneKey)); + if(val) { _deviceRingtone = val->getValue(); val = NULL; } + + val = (Conf::ScalarNode *)(map->getValue(recordpathKey)); + if(val) { _recordpath = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(ringchoiceKey)); + if(val) { _ringchoice = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(volumemicKey)); + if(val) { _volumemic = atoi(val->getValue().data()); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(volumespkrKey)); + if(val) { _volumespkr = atoi(val->getValue().data()); val = NULL; } + +} diff --git a/sflphone-common/src/preferences.h b/sflphone-common/src/preferences.h index 92edbd7295..a023f7a56a 100755 --- a/sflphone-common/src/preferences.h +++ b/sflphone-common/src/preferences.h @@ -33,6 +33,7 @@ #include "config/serializable.h" +// general preferences const Conf::Key orderKey("order"); // : 1234/2345/ const Conf::Key audioApiKey("audioApi"); // : 0 const Conf::Key historyLimitKey("historyLimit"); // : 30 @@ -46,7 +47,7 @@ const Conf::Key searchBarDisplayKey("searchBarDisplay"); // : true const Conf::Key zeroConfenableKey("zeroConfenable"); // : false const Conf::Key md5HashKey("md5Hash"); // : false - +// voip preferences const Conf::Key playDtmfKey("playDtmf"); // true true const Conf::Key playTonesKey("playTones"); // true const Conf::Key pulseLengthKey("pulseLength"); //=250 @@ -54,6 +55,39 @@ const Conf::Key sendDtmfAsKey("sendDtmfAs");// =0 const Conf::Key symmetricRtpKey("symmetric");// =true const Conf::Key zidFileKey("zidFile");// =sfl.zid +// addressbook preferences +const Conf::Key photoKey("photo");// false +const Conf::Key enabledKey("enabled");// true +const Conf::Key listKey("list");// 1243608768.30329.0@emilou-desktop/1243456917.15690.23@emilou-desktop/ +const Conf::Key maxResultsKey("maxResults");// 25 +const Conf::Key businessKey("business");// true +const Conf::Key homeKey("home");// false +const Conf::Key mobileKey("mobile");// false + +// hooks preferences +const Conf::Key iax2EnabledKey("iax2Enabled");// : false +const Conf::Key numberAddPrefixKey("numberAddPrefix");//: false +const Conf::Key numberEnabledKey("numberEnabled"); //: false +const Conf::Key sipEnabledKey("sipEnabled"); //: false +const Conf::Key urlCommandKey("urlCommand"); //: x-www-browser +const Conf::Key urlSipFieldKey("urlSipField"); //: X-sflphone-url + + +const Conf::Key alsamapKey("alsa"); +const Conf::Key pulsemapKey("pulse"); +const Conf::Key cardinKey("cardin");// : 0 +const Conf::Key cardoutKey("cardout");// 0 +const Conf::Key cardringKey("cardring");// : 0 +const Conf::Key framesizeKey("framesize");// : 20 +const Conf::Key pluginKey("plugin"); //: default +const Conf::Key smplrateKey("smplrate");//: 44100 +const Conf::Key devicePlaybackKey("devicePlayback");//: +const Conf::Key deviceRecordKey("deviceRecord");// : +const Conf::Key deviceRingtoneKey("deviceRecord");// : +const Conf::Key recordpathKey("recordpath");//: /home/msavard/Bureau +const Conf::Key ringchoiceKey("ringchoice");//: /usr/share/sflphone/ringtones/konga.ul +const Conf::Key volumemicKey("volumemic");//: 100 +const Conf::Key volumespkrKey("volumespkr");//: 100 class Preferences : public Serializable { @@ -166,4 +200,169 @@ class VoipPreference : public Serializable { }; +class AddressbookPreference : public Serializable { + + public: + + AddressbookPreference(); + + ~AddressbookPreference(); + + virtual void serialize(Conf::YamlEmitter *emitter); + + virtual void unserialize(Conf::MappingNode *map); + + bool getPhoto(void) { return _photo;} + void setPhoto(bool p) { _photo = p; } + + bool getEnabled(void) { return _enabled; } + void setEnabled(bool e) { _enabled = e; } + + std::string getList(void) { return _list; } + void setList(std::string l) { _list = l; } + + int getMaxResults(void) { return _maxResults; } + void setMaxResults(int r) { _maxResults = r; } + + bool getBusiness(void) { return _business; } + void setBusiness(bool b) { _business = b; } + + bool getHome(void) { return _home; } + void setHone(bool h) { _home = h; } + + bool getMobile(void) { return _mobile; } + void setMobile(bool m) { _mobile = m; } + + private: + + bool _photo; + bool _enabled; + std::string _list; + int _maxResults; + bool _business; + bool _home; + bool _mobile; + +}; + + +class HookPreference : public Serializable { + + public: + + HookPreference(); + + ~HookPreference(); + + virtual void serialize(Conf::YamlEmitter *emitter); + + virtual void unserialize(Conf::MappingNode *map); + + bool getIax2Enabled(void) { return _iax2Enabled; } + void setIax2Enabled( bool i) { _iax2Enabled = i; } + + bool getNumberAddPrefix(void) { return _numberAddPrefix; } + void setNumberAddPrefix(bool n) { _numberAddPrefix = n; } + + bool getNumberEnabled(void) { return _numberEnabled; } + void setNumberEnabled(bool n) { _numberEnabled = n; } + + bool getSipEnabled(void) { return _sipEnabled; } + void setSipEnabled(bool s) { _sipEnabled = s; } + + std::string getUrlCommand(void) { return _urlCommand; } + void setUrlCommand(std::string u) { _urlCommand = u; } + + std::string getUrlSipField(void) { return _urlSipField; } + void setUrlSipField(std::string u) { _urlSipField = u; } + + private: + + bool _iax2Enabled;// : false + bool _numberAddPrefix;//: false + bool _numberEnabled; //: false + bool _sipEnabled; //: false + std::string _urlCommand; //: x-www-browser + std::string _urlSipField; //: X-sflphone-url + +}; + + +class AudioPreference : public Serializable { + + public: + + AudioPreference(); + + ~AudioPreference(); + + virtual void serialize(Conf::YamlEmitter *emitter); + + virtual void unserialize(Conf::MappingNode *map); + + // alsa preference + int getCardin(void) { return _cardin; } + void setCardin(int c) { _cardin = c; } + + int getCardout(void) { return _cardout; } + void setCardout(int c) { _cardout = c; } + + int getCardring(void) { return _cardring; } + void setCardring(int c) { _cardring = c; } + + int getFramesize(void) { return _framesize; } + void setFramesize(int f) { _framesize = f; } + + std::string getPlugin(void) { return _plugin; } + void setPlugin(std::string p) { _plugin = p; } + + int getSmplrate(void) { return _smplrate; } + void setSmplrate(int r) { _smplrate = r; } + + //pulseaudio preference + std::string getDevicePlayback(void) { return _devicePlayback; } + void setDevicePlayback(std::string p) { _devicePlayback = p; } + + std::string getDeviceRecord(void) { return _deviceRecord; } + void getDeviceRecord(std::string r) { _deviceRecord = r; } + + std::string getDeviceRingtone(void) { return _deviceRingtone; } + void getDeviceRingtone(std::string r) { _deviceRingtone = r; } + + // general preference + std::string getRecordpath(void) { return _recordpath; } + void getRecordpath(std::string r) { _recordpath = r; } + + std::string getRingchoice(void) { return _ringchoice; } + void getRingchoice(std::string r) { _ringchoice = r; } + + int getVolumemic(void) { return _volumemic; } + void getVolumemic(int m) { _volumemic = m; } + + int getVolumespkr(void) { return _volumespkr; } + void getVolumespkr(int s) { _volumespkr = s; } + + private: + + // alsa preference + int _cardin; // 0 + int _cardout; // 0 + int _cardring;// 0 + int _framesize; // 20 + std::string _plugin; // default + int _smplrate;// 44100 + + //pulseaudio preference + std::string _devicePlayback;//: + std::string _deviceRecord; //: + std::string _deviceRingtone; //: + + // general preference + std::string _recordpath; //: /home/msavard/Bureau + std::string _ringchoice; // : /usr/share/sflphone/ringtones/konga.ul + int _volumemic; //: 100 + int _volumespkr; //: 100 + +}; + #endif -- GitLab From 33ba103b6d9834f2e5d76ebff33a80120e70fff5 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 8 Jul 2010 18:31:49 -0400 Subject: [PATCH 142/197] [#3649] Use audioPreference for configuration changes --- sflphone-common/src/managerimpl.cpp | 58 +++++++++++++++++++++++------ sflphone-common/src/preferences.h | 12 +++--- 2 files changed, 52 insertions(+), 18 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index ac08563d9a..c5230a29f4 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2388,7 +2388,8 @@ void ManagerImpl::setOutputAudioPlugin (const std::string& audioPlugin) { // set config if (res) - setConfig(AUDIO, ALSA_PLUGIN, audioPlugin); + audioPreference.setPlugin(audioPlugin); + //setConig(AUDIO, ALSA_PLUGIN, audioPlugin); } /** @@ -2434,21 +2435,24 @@ void ManagerImpl::setAudioDevice (const int index, int streamType) { _audiodriver->openDevice(_audiodriver->getIndexIn(), index, _audiodriver->getIndexRing(), _audiodriver->getSampleRate(), _audiodriver->getFrameSize(), SFL_PCM_PLAYBACK, alsaplugin); - setConfig(AUDIO, ALSA_CARD_ID_OUT, index); + audioPreference.setCardout(index); + // setConfig(AUDIO, ALSA_CARD_ID_OUT, index); break; case SFL_PCM_CAPTURE: _debug("Manager: Set input device"); _audiodriver->openDevice(index, _audiodriver->getIndexOut(), _audiodriver->getIndexRing(), _audiodriver->getSampleRate(), _audiodriver->getFrameSize(), SFL_PCM_CAPTURE, alsaplugin); - setConfig(AUDIO, ALSA_CARD_ID_IN, index); + audioPreference.setCardin(index); + // setConfig(AUDIO, ALSA_CARD_ID_IN, index); break; case SFL_PCM_RINGTONE: _debug("Manager: Set ringtone device"); _audiodriver->openDevice(_audiodriver->getIndexOut(), _audiodriver->getIndexOut(), index, _audiodriver->getSampleRate(), _audiodriver->getFrameSize(), SFL_PCM_RINGTONE, alsaplugin); - setConfig(AUDIO, ALSA_CARD_ID_RING, index); + // setConfig(AUDIO, ALSA_CARD_ID_RING, index); + audioPreference.setCardring(index); break; default: _warn("Unknown stream type"); @@ -2503,14 +2507,19 @@ int ManagerImpl::isRingtoneEnabled (void) { } void ManagerImpl::ringtoneEnabled (void) { + /* (getConfigString(PREFERENCES, CONFIG_RINGTONE) == RINGTONE_ENABLED) ? setConfig( PREFERENCES, CONFIG_RINGTONE, FALSE_STR) : setConfig(PREFERENCES, CONFIG_RINGTONE, TRUE_STR); + */ + + preferences.getRingtoneEnabled() ? preferences.setRingtoneEnabled(false) : preferences.setRingtoneEnabled(true); + } std::string ManagerImpl::getRingtoneChoice (void) { // we need the absolute path - std::string tone_name = getConfigString(AUDIO, RING_CHOICE); + std::string tone_name = audioPreference.getRingchoice(); // getConfigString(AUDIO, RING_CHOICE); std::string tone_path; if (tone_name.find(DIR_SEPARATOR_CH) == std::string::npos) { @@ -2529,22 +2538,25 @@ std::string ManagerImpl::getRingtoneChoice (void) { void ManagerImpl::setRingtoneChoice (const std::string& tone) { // we save the absolute path - setConfig(AUDIO, RING_CHOICE, tone); + // setConfig(AUDIO, RING_CHOICE, tone); + audioPreference.setRingchoice(tone); } std::string ManagerImpl::getRecordPath (void) { - return getConfigString(AUDIO, RECORD_PATH); + return audioPreference.getRecordpath();// getConfigString(AUDIO, RECORD_PATH); } void ManagerImpl::setRecordPath (const std::string& recPath) { _debug ("ManagerImpl::setRecordPath(%s)! ", recPath.c_str()); - setConfig(AUDIO, RECORD_PATH, recPath); + audioPreference.setRecordpath(recPath); + // setConfig(AUDIO, RECORD_PATH, recPath); } bool ManagerImpl::getMd5CredentialHashing (void) { - return getConfigBool(PREFERENCES, CONFIG_MD5HASH); + return preferences.getMd5Hash(); // getConfigBool(PREFERENCES, CONFIG_MD5HASH); } + int ManagerImpl::getDialpad (void) { if (getConfigString(PREFERENCES, CONFIG_DIALPAD) == TRUE_STR) { return 1; @@ -2553,6 +2565,7 @@ int ManagerImpl::getDialpad (void) { } } + void ManagerImpl::setDialpad (bool display) { std::string set; @@ -2566,6 +2579,7 @@ void ManagerImpl::setDialpad (bool display) { setConfig(PREFERENCES, CONFIG_DIALPAD, set); } + int ManagerImpl::getVolumeControls (void) { if (getConfigString(PREFERENCES, CONFIG_VOLUME) == TRUE_STR) { return 1; @@ -2587,6 +2601,7 @@ void ManagerImpl::setVolumeControls (bool display) { setConfig(PREFERENCES, CONFIG_VOLUME, set); } + void ManagerImpl::setRecordingCall (const CallID& id) { /* _debug ("ManagerImpl::setRecording()! "); @@ -4353,6 +4368,14 @@ std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings () { std::map<std::string, int32_t> settings; + settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_ENABLE", addressbookPreference.getEnabled() ? 1 : 0)); + settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_MAX_RESULTS", addressbookPreference.getMaxResults())); + settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_DISPLAY_CONTACT_PHOTO", addressbookPreference.getPhoto() ? 1 : 0)); + settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_DISPLAY_PHONE_BUSINESS", addressbookPreference.getBusiness() ? 1 : 0)); + settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_DISPLAY_PHONE_HOME", addressbookPreference.getHome() ? 1 : 0)); + settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_DISPLAY_PHONE_MOBILE", addressbookPreference.getMobile() ? 1 : 0)); + + /* settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_ENABLE", getConfigInt(ADDRESSBOOK, ADDRESSBOOK_ENABLE))); settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_MAX_RESULTS", @@ -4369,13 +4392,22 @@ std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings () { settings.insert(std::pair<std::string, int32_t>( "ADDRESSBOOK_DISPLAY_PHONE_MOBILE", getConfigInt(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_MOBILE))); - + */ return settings; } void ManagerImpl::setAddressbookSettings ( const std::map<std::string, int32_t>& settings) { + + addressbookPreference.setEnabled((settings.find("ADDRESSBOOK_ENABLE")->second == 1) ? true : false); + addressbookPreference.setMaxResults(settings.find("ADDRESSBOOK_MAX_RESULTS")->second); + addressbookPreference.setPhoto((settings.find("ADDRESSBOOK_DISPLAY_CONTACT_PHOTO")->second == 1) ? true : false); + addressbookPreference.setBusiness((settings.find("ADDRESSBOOK_DISPLAY_PHONE_BUSINESS")->second == 1) ? true : false); + addressbookPreference.setHone((settings.find("ADDRESSBOOK_DISPLAY_PHONE_HOME")->second == 1) ? true : false); + addressbookPreference.setMobile((settings.find("ADDRESSBOOK_DISPLAY_PHONE_MOBILE")->second == 1) ? true : false); + +/* setConfig(ADDRESSBOOK, ADDRESSBOOK_ENABLE, (*settings.find( "ADDRESSBOOK_ENABLE")).second); setConfig(ADDRESSBOOK, ADDRESSBOOK_MAX_RESULTS, (*settings.find( @@ -4388,6 +4420,7 @@ void ManagerImpl::setAddressbookSettings ( "ADDRESSBOOK_DISPLAY_PHONE_HOME")).second); setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_MOBILE, (*settings.find( "ADDRESSBOOK_DISPLAY_PHONE_MOBILE")).second); +*/ // Write it to the configuration file saveConfig(); @@ -4396,12 +4429,13 @@ void ManagerImpl::setAddressbookSettings ( void ManagerImpl::setAddressbookList (const std::vector<std::string>& list) { std::string s = serialize(list); - setConfig(ADDRESSBOOK, ADDRESSBOOK_LIST, s); + addressbookPreference.setList(s); + // setConfig(ADDRESSBOOK, ADDRESSBOOK_LIST, s); } std::vector<std::string> ManagerImpl::getAddressbookList (void) { - std::string s = getConfigString(ADDRESSBOOK, ADDRESSBOOK_LIST); + std::string s = addressbookPreference.getList(); // getConfigString(ADDRESSBOOK, ADDRESSBOOK_LIST); return unserialize(s); } diff --git a/sflphone-common/src/preferences.h b/sflphone-common/src/preferences.h index a023f7a56a..3c9b690b6f 100755 --- a/sflphone-common/src/preferences.h +++ b/sflphone-common/src/preferences.h @@ -324,23 +324,23 @@ class AudioPreference : public Serializable { void setDevicePlayback(std::string p) { _devicePlayback = p; } std::string getDeviceRecord(void) { return _deviceRecord; } - void getDeviceRecord(std::string r) { _deviceRecord = r; } + void setDeviceRecord(std::string r) { _deviceRecord = r; } std::string getDeviceRingtone(void) { return _deviceRingtone; } - void getDeviceRingtone(std::string r) { _deviceRingtone = r; } + void setDeviceRingtone(std::string r) { _deviceRingtone = r; } // general preference std::string getRecordpath(void) { return _recordpath; } - void getRecordpath(std::string r) { _recordpath = r; } + void setRecordpath(std::string r) { _recordpath = r; } std::string getRingchoice(void) { return _ringchoice; } - void getRingchoice(std::string r) { _ringchoice = r; } + void setRingchoice(std::string r) { _ringchoice = r; } int getVolumemic(void) { return _volumemic; } - void getVolumemic(int m) { _volumemic = m; } + void setVolumemic(int m) { _volumemic = m; } int getVolumespkr(void) { return _volumespkr; } - void getVolumespkr(int s) { _volumespkr = s; } + void setVolumespkr(int s) { _volumespkr = s; } private: -- GitLab From 74b640809dd26aaafb73b03e89a877956b148161 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 8 Jul 2010 18:41:44 -0400 Subject: [PATCH 143/197] [#3649] Use audioPreference for alsa preferences --- sflphone-common/src/managerimpl.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index c5230a29f4..21ef3dc038 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2888,13 +2888,13 @@ void ManagerImpl::selectAudioDriver (void) { _debug ("Audio layer type: %i" , layer); /* Retrieve the global devices info from the user config */ - alsaPlugin = getConfigString(AUDIO, ALSA_PLUGIN); - numCardIn = getConfigInt(AUDIO, ALSA_CARD_ID_IN); - numCardOut = getConfigInt(AUDIO, ALSA_CARD_ID_OUT); - numCardRing = getConfigInt(AUDIO, ALSA_CARD_ID_RING); + alsaPlugin = audioPreference.getPlugin(); // getConfigString(AUDIO, ALSA_PLUGIN); + numCardIn = audioPreference.getCardin(); //getConfigInt(AUDIO, ALSA_CARD_ID_IN); + numCardOut = audioPreference.getCardout(); //getConfigInt(AUDIO, ALSA_CARD_ID_OUT); + numCardRing = audioPreference.getCardring(); //getConfigInt(AUDIO, ALSA_CARD_ID_RING); // sampleRate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE); sampleRate = _mainBuffer.getInternalSamplingRate(); - frameSize = getConfigInt(AUDIO, ALSA_FRAME_SIZE); + frameSize = audioPreference.getFramesize(); //getConfigInt(AUDIO, ALSA_FRAME_SIZE); /* Only for the ALSA layer, we check the sound card information */ @@ -2904,19 +2904,19 @@ void ManagerImpl::selectAudioDriver (void) { if (!alsalayer -> soundCardIndexExist(numCardIn, SFL_PCM_CAPTURE)) { _debug (" Card with index %i doesn't exist or cannot capture. Switch to 0.", numCardIn); numCardIn = ALSA_DFT_CARD_ID; - setConfig(AUDIO, ALSA_CARD_ID_IN, ALSA_DFT_CARD_ID); + audioPreference.setCardin(ALSA_DFT_CARD_ID); // setConfig(AUDIO, ALSA_CARD_ID_IN, ALSA_DFT_CARD_ID); } if (!alsalayer -> soundCardIndexExist(numCardOut, SFL_PCM_PLAYBACK)) { _debug (" Card with index %i doesn't exist or cannot playback. Switch to 0.", numCardOut); numCardOut = ALSA_DFT_CARD_ID; - setConfig(AUDIO, ALSA_CARD_ID_OUT, ALSA_DFT_CARD_ID); + audioPreference.setCardout(ALSA_DFT_CARD_ID); // setConfig(AUDIO, ALSA_CARD_ID_OUT, ALSA_DFT_CARD_ID); } if (!alsalayer->soundCardIndexExist(numCardRing, SFL_PCM_RINGTONE)) { _debug(" Card with index %i doesn't exist or cannot ringtone. Switch to 0.", numCardRing); numCardRing = ALSA_DFT_CARD_ID; - setConfig(AUDIO, ALSA_CARD_ID_RING, ALSA_DFT_CARD_ID); + audioPreference.setCardring(ALSA_DFT_CARD_ID); } } @@ -2946,15 +2946,15 @@ void ManagerImpl::switchAudioManager (void) { // samplerate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE); samplerate = _mainBuffer.getInternalSamplingRate(); - framesize = getConfigInt(AUDIO, ALSA_FRAME_SIZE); + framesize = audioPreference.getFramesize();// getConfigInt(AUDIO, ALSA_FRAME_SIZE); _debug ("Mnager: samplerate: %i, framesize %i\n", samplerate, framesize); - alsaPlugin = getConfigString(AUDIO, ALSA_PLUGIN); + alsaPlugin = audioPreference.getPlugin();//getConfigString(AUDIO, ALSA_PLUGIN); - numCardIn = getConfigInt(AUDIO, ALSA_CARD_ID_IN); - numCardOut = getConfigInt(AUDIO, ALSA_CARD_ID_OUT); - numCardRing = getConfigInt(AUDIO, ALSA_CARD_ID_RING); + numCardIn = audioPreference.getCardin();//getConfigInt(AUDIO, ALSA_CARD_ID_IN); + numCardOut = audioPreference.getCardout();// getConfigInt(AUDIO, ALSA_CARD_ID_OUT); + numCardRing = audioPreference.getCardring(); //getConfigInt(AUDIO, ALSA_CARD_ID_RING); _debug ("Manager: Deleting current layer... "); -- GitLab From 7601339de57fd8a827815ad9264719a08280b7fe Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 9 Jul 2010 09:26:02 -0400 Subject: [PATCH 144/197] [#3649] Migrate to new config system --- .../dbus/configurationmanager-introspec.xml | 11 +++-- .../src/dbus/configurationmanager.cpp | 4 ++ .../src/dbus/configurationmanager.h | 29 ++++++------ sflphone-common/src/managerimpl.cpp | 45 ++++++++++++------- sflphone-common/src/managerimpl.h | 24 +++++----- 5 files changed, 68 insertions(+), 45 deletions(-) diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml index f75d22c662..19e0590b34 100644 --- a/sflphone-common/src/dbus/configurationmanager-introspec.xml +++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml @@ -633,6 +633,7 @@ </arg> </method> + <!-- <method name="setNotify" tp:name-for-bindings="setNotify"> <tp:docstring> </tp:docstring> @@ -646,7 +647,7 @@ </tp:docstring> </arg> </method> - + --> <method name="setMailNotify" tp:name-for-bindings="setMailNotify"> <tp:docstring> </tp:docstring> @@ -660,7 +661,7 @@ </tp:docstring> </arg> </method> - + <!-- <method name="getDialpad" tp:name-for-bindings="getDialpad"> <tp:docstring> </tp:docstring> @@ -724,6 +725,7 @@ </tp:docstring> </arg> </method> + --> <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit"> <tp:docstring> @@ -742,7 +744,7 @@ </tp:docstring> </arg> </method> - + <!-- <method name="startHidden" tp:name-for-bindings="startHidden"> <tp:docstring> </tp:docstring> @@ -756,7 +758,7 @@ </tp:docstring> </arg> </method> - + <method name="popupMode" tp:name-for-bindings="popupMode"> <tp:docstring> </tp:docstring> @@ -770,6 +772,7 @@ <tp:docstring> </tp:docstring> </method> + --> <method name="getWindowWidth" tp:name-for-bindings="getWindowWidth"> <tp:docstring> diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index 608d91622a..0984c2299f 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -642,6 +642,7 @@ void ConfigurationManager::setRecordPath(const std::string& recPath) { Manager::instance().setRecordPath(recPath); } +/* int32_t ConfigurationManager::getDialpad(void) { return Manager::instance().getDialpad(); } @@ -665,6 +666,7 @@ int32_t ConfigurationManager::getVolumeControls(void) { void ConfigurationManager::setVolumeControls(const bool& display) { Manager::instance().setVolumeControls(display); } +*/ int32_t ConfigurationManager::getHistoryLimit(void) { return Manager::instance().getHistoryLimit(); @@ -674,6 +676,7 @@ void ConfigurationManager::setHistoryLimit(const int32_t& days) { Manager::instance().setHistoryLimit(days); } +/* void ConfigurationManager::setHistoryEnabled(void) { Manager::instance().setHistoryEnabled(); } @@ -705,6 +708,7 @@ void ConfigurationManager::setNotify(void) { int32_t ConfigurationManager::getNotify(void) { return Manager::instance().getNotify(); } +*/ void ConfigurationManager::setAudioManager(const int32_t& api) { Manager::instance().setAudioManager(api); diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h index 7c351af08e..c33ae08296 100644 --- a/sflphone-common/src/dbus/configurationmanager.h +++ b/sflphone-common/src/dbus/configurationmanager.h @@ -109,17 +109,19 @@ public: void setRingtoneChoice( const std::string& tone ); std::string getRecordPath( void ); void setRecordPath(const std::string& recPath ); + /* int32_t getDialpad( void ); void setDialpad (const bool& display); int32_t getSearchbar( void ); - void setSearchbar( void ); + */ void setHistoryLimit( const int32_t& days); int32_t getHistoryLimit (void); + /* void setHistoryEnabled (void); - std::string getHistoryEnabled (void); + std::string getHistoryEnabled (void); int32_t getVolumeControls( void ); void setVolumeControls (const bool& display); @@ -129,20 +131,21 @@ public: void switchPopupMode( void ); int32_t getNotify( void ); void setNotify( void ); + */ int32_t getMailNotify( void ); void setMailNotify( void ); - int32_t getWindowWidth (void); - int32_t getWindowHeight (void); - void setWindowWidth (const int32_t& width); - void setWindowHeight (const int32_t& height); - int32_t getWindowPositionX (void); - int32_t getWindowPositionY (void); - void setWindowPositionX (const int32_t& posX); - void setWindowPositionY (const int32_t& posY); - - void enableStatusIcon (const std::string&); - std::string isStatusIconEnabled (void); + int32_t getWindowWidth (void); + int32_t getWindowHeight (void); + void setWindowWidth (const int32_t& width); + void setWindowHeight (const int32_t& height); + int32_t getWindowPositionX (void); + int32_t getWindowPositionY (void); + void setWindowPositionX (const int32_t& posX); + void setWindowPositionY (const int32_t& posY); + + void enableStatusIcon (const std::string&); + std::string isStatusIconEnabled (void); std::map<std::string, int32_t> getAddressbookSettings (void); void setAddressbookSettings (const std::map<std::string, int32_t>& settings); diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 21ef3dc038..90a76cd0e8 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1410,9 +1410,8 @@ void ManagerImpl::removeStream (const CallID& call_id) { //THREAD=Main bool ManagerImpl::saveConfig (void) { _debug ("Saving Configuration to XDG directory %s ... ", _path.c_str()); - setConfig(AUDIO, VOLUME_SPKR, getSpkrVolume()); - setConfig(AUDIO, VOLUME_MICRO, getMicVolume()); - + audioPreference.setVolumemic(getMicVolume()); // setConfig(AUDIO, VOLUME_SPKR, getSpkrVolume()); + audioPreference.setVolumespkr(getSpkrVolume()); // setConfig(AUDIO, VOLUME_MICRO, getMicVolume()); AccountMap::iterator iter = _accountMap.begin(); @@ -2557,6 +2556,7 @@ bool ManagerImpl::getMd5CredentialHashing (void) { } +/* int ManagerImpl::getDialpad (void) { if (getConfigString(PREFERENCES, CONFIG_DIALPAD) == TRUE_STR) { return 1; @@ -2600,7 +2600,7 @@ void ManagerImpl::setVolumeControls (bool display) { != FALSE_STR))) setConfig(PREFERENCES, CONFIG_VOLUME, set); } - +*/ void ManagerImpl::setRecordingCall (const CallID& id) { /* @@ -2632,6 +2632,7 @@ bool ManagerImpl::isRecording (const CallID& id) { return rec->isRecording(); } +/* void ManagerImpl::startHidden (void) { (getConfigString(PREFERENCES, CONFIG_START) == START_HIDDEN) ? setConfig( PREFERENCES, CONFIG_START, FALSE_STR) : setConfig(PREFERENCES, @@ -2647,15 +2648,18 @@ void ManagerImpl::switchPopupMode (void) { PREFERENCES, CONFIG_POPUP, FALSE_STR) : setConfig(PREFERENCES, CONFIG_POPUP, TRUE_STR); } +*/ void ManagerImpl::setHistoryLimit (const int& days) { - setConfig(PREFERENCES, CONFIG_HISTORY_LIMIT, days); + // setConfig(PREFERENCES, CONFIG_HISTORY_LIMIT, days); + preferences.setHistoryLimit(days); } int ManagerImpl::getHistoryLimit (void) { - return getConfigInt(PREFERENCES, CONFIG_HISTORY_LIMIT); + return preferences.getHistoryLimit(); // getConfigInt(PREFERENCES, CONFIG_HISTORY_LIMIT); } +/* std::string ManagerImpl::getHistoryEnabled (void) { return getConfigString(PREFERENCES, CONFIG_HISTORY_ENABLED); } @@ -2689,9 +2693,18 @@ void ManagerImpl::setNotify (void) { PREFERENCES, CONFIG_NOTIFY, FALSE_STR) : setConfig(PREFERENCES, CONFIG_NOTIFY, TRUE_STR); } +*/ int32_t ManagerImpl::getMailNotify (void) { - return getConfigInt(PREFERENCES, CONFIG_MAIL_NOTIFY); + // return getConfigInt(PREFERENCES, CONFIG_MAIL_NOTIFY); + return preferences.getNotifyMails(); +} + +void ManagerImpl::setMailNotify (void) { + // (getConfigString(PREFERENCES, CONFIG_MAIL_NOTIFY) == NOTIFY_ALL) ? setConfig( + // PREFERENCES, CONFIG_MAIL_NOTIFY, FALSE_STR) + // : setConfig(PREFERENCES, CONFIG_MAIL_NOTIFY, TRUE_STR); + preferences.getNotifyMails() ? preferences.setNotifyMails(true) : preferences.setNotifyMails(false); } void ManagerImpl::setAudioManager (const int32_t& api) { @@ -2711,7 +2724,8 @@ void ManagerImpl::setAudioManager (const int32_t& api) { return; } - setConfig(PREFERENCES, CONFIG_AUDIO, api); + // setConfig(PREFERENCES, CONFIG_AUDIO, api); + preferences.setAudioApi(api); switchAudioManager(); return; @@ -2719,14 +2733,10 @@ void ManagerImpl::setAudioManager (const int32_t& api) { } int32_t ManagerImpl::getAudioManager (void) { - return getConfigInt(PREFERENCES, CONFIG_AUDIO); + //return getConfigInt(PREFERENCES, CONFIG_AUDIO); + return preferences.getAudioApi(); } -void ManagerImpl::setMailNotify (void) { - (getConfigString(PREFERENCES, CONFIG_MAIL_NOTIFY) == NOTIFY_ALL) ? setConfig( - PREFERENCES, CONFIG_MAIL_NOTIFY, FALSE_STR) - : setConfig(PREFERENCES, CONFIG_MAIL_NOTIFY, TRUE_STR); -} void ManagerImpl::notifyErrClient (const int32_t& errCode) { if (_dbus) { @@ -2845,10 +2855,13 @@ bool ManagerImpl::initAudioDriver (void) { _debugInit ("AudioLayer Creation"); - if (getConfigInt(PREFERENCES, CONFIG_AUDIO) == ALSA) { + // if (getConfigInt(PREFERENCES, CONFIG_AUDIO) == ALSA) { + if (preferences.getAudioApi() == ALSA) { _audiodriver = new AlsaLayer(this); _audiodriver->setMainBuffer(&_mainBuffer); - } else if (getConfigInt(PREFERENCES, CONFIG_AUDIO) == PULSEAUDIO) { + } + // } else if (getConfigInt(PREFERENCES, CONFIG_AUDIO) == PULSEAUDIO) { + else if(preferences.getAudioApi() == PULSEAUDIO) { if (app_is_running("pulseaudio") == 0) { _audiodriver = new PulseLayer(this); _audiodriver->setMainBuffer(&_mainBuffer); diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index efe1077c06..e6d07bbb75 100755 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -662,24 +662,24 @@ class ManagerImpl { * @return int 1 if dialpad has to be displayed * 0 otherwise */ - int getDialpad( void ); + // int getDialpad( void ); /** * Set the dialpad visible or not */ - void setDialpad (bool display); + // void setDialpad (bool display); /** * Tells if the user wants to display the volume controls or not * @return int 1 if the controls have to be displayed * 0 otherwise */ - int getVolumeControls( void ); + // int getVolumeControls( void ); /** * Set the volume controls ( mic and speaker ) visible or not */ - void setVolumeControls (bool display); + // void setVolumeControls (bool display); /** * Set recording on / off @@ -705,9 +705,9 @@ class ManagerImpl { */ int getHistoryLimit (void); - void setHistoryEnabled (void); + // void setHistoryEnabled (void); - std::string getHistoryEnabled (void); + // std::string getHistoryEnabled (void); /** @@ -728,35 +728,35 @@ class ManagerImpl { * @return int 1 if it should popup on incoming calls * 0 if it should never popups */ - int popupMode( void ); + // int popupMode( void ); /** * Configure the popup behaviour * When SFLphone is in the system tray, you can configure when it popups * Never or only on incoming calls */ - void switchPopupMode( void ); + // void switchPopupMode( void ); /** * Determine whether or not the search bar (history) should be displayed */ - int getSearchbar( void ); + // int getSearchbar( void ); /** * Configure the search bar behaviour */ - void setSearchbar( void ); + // void setSearchbar( void ); /** * Set the desktop notification level */ - void setNotify( void ); + // void setNotify( void ); /** * Get the desktop notification level * @return int The notification level */ - int32_t getNotify( void ); + // int32_t getNotify( void ); /** * Set the desktop mail notification level -- GitLab From ba58d452964b92ba73e0b5bea7dc30b177e28798 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 9 Jul 2010 10:08:13 -0400 Subject: [PATCH 145/197] [#3649] Migrate hook configuration to new config --- sflphone-common/src/managerimpl.cpp | 65 +++++++++++++++++++++-------- sflphone-common/src/preferences.cpp | 6 +-- sflphone-common/src/preferences.h | 6 +-- 3 files changed, 53 insertions(+), 24 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 90a76cd0e8..18ef20b620 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3736,6 +3736,8 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, sipaccount->setLocalPort(atoi(localPort.data())); sipaccount->setPublishedPort(atoi(publishedPort.data())); // sipaccount->setStunServerName + // sipaccount->setStunServer(); + // sipaccount->setStunEnable(); sipaccount->setResolveOnce((resolveOnce.compare("true")==0) ? true : false); sipaccount->setRegistrationExpire(registrationExpire); @@ -3746,8 +3748,8 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, // setConfig(accountID, PUBLISHED_ADDRESS, publishedAddress); // setConfig(accountID, LOCAL_PORT, localPort); // setConfig(accountID, PUBLISHED_PORT, publishedPort); - setConfig(accountID, STUN_ENABLE, stunEnable); - setConfig(accountID, STUN_SERVER, stunServer); + // setConfig(accountID, STUN_ENABLE, stunEnable); + // setConfig(accountID, STUN_SERVER, stunServer); // setConfig(accountID, ACCOUNT_DTMF_TYPE, dtmfType); // setConfig(accountID, CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce); // setConfig(accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire); @@ -3759,7 +3761,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, setConfig(accountID, REALM, realm); // setConfig(accountID, USERAGENT, ua_name); - setConfig(accountID, AUTHENTICATION_USERNAME, authenticationName); + // setConfig(accountID, AUTHENTICATION_USERNAME, authenticationName); sipaccount->setUseragent(ua_name); @@ -3849,23 +3851,25 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, // setConfig(accountID, TLS_NEGOTIATION_TIMEOUT_MSEC,tlsNegotiationTimeoutMsec); if (!getMd5CredentialHashing()) { - setConfig(accountID, PASSWORD, password); + // setConfig(accountID, PASSWORD, password); + sipaccount->setPassword(password); } else { // Make sure not to re-hash the password field if // it is already saved as a MD5 Hash. // TODO: This test is weak. Fix this. - if ((password.compare(getConfigString(accountID, PASSWORD)) != 0)) { + // if ((password.compare(getConfig(accountID, PASSWORD)) != 0)) { + if ((password.compare(sipaccount->getPassword()) != 0)) { _debug ("Password sent and password from config are different. Re-hashing"); std::string hash; if (authenticationName.empty()) { hash = computeMd5HashFromCredential(username, password, realm); } else { - hash = computeMd5HashFromCredential(authenticationName, - password, realm); + hash = computeMd5HashFromCredential(authenticationName, password, realm); } - setConfig(accountID, PASSWORD, hash); + // setConfig(accountID, PASSWORD, hash); + sipaccount->setPassword(hash); } } @@ -3876,9 +3880,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, Account * acc = NULL; acc = getAccount(accountID); - if (acc != NULL) { - - + if (acc != NULL) { // acc->loadConfig(); if (acc->isEnabled()) { @@ -3938,7 +3940,8 @@ std::string ManagerImpl::addAccount ( newAccountID += "/"; // Prepend the new account account_list.insert(0, newAccountID); - setConfig(PREFERENCES, CONFIG_ACCOUNTS_ORDER, account_list); + // setConfig(PREFERENCES, CONFIG_ACCOUNTS_ORDER, account_list); + preferences.setAccountOrder(account_list); } saveConfig(); @@ -3950,11 +3953,17 @@ std::string ManagerImpl::addAccount ( } void ManagerImpl::deleteAllCredential (const AccountID& accountID) { - int numberOfCredential = getConfigInt(accountID, CONFIG_CREDENTIAL_NUMBER); + + Account *account = getAccount(accountID); + + if(account->getType() != "SIP") + return; - int i; + SIPAccount *sipaccount = (SIPAccount *)account; - for (i = 0; i < numberOfCredential; i++) { + int numberOfCredential = getConfigInt(accountID, CONFIG_CREDENTIAL_NUMBER); + + for (int i = 0; i < numberOfCredential; i++) { std::string credentialIndex; std::stringstream streamOut; streamOut << i; @@ -3966,7 +3975,8 @@ void ManagerImpl::deleteAllCredential (const AccountID& accountID) { } if (accountID.empty() == false) { - setConfig(accountID, CONFIG_CREDENTIAL_NUMBER, 0); + // setConfig(accountID, CONFIG_CREDENTIAL_NUMBER, 0); + } } @@ -4456,6 +4466,15 @@ std::map<std::string, std::string> ManagerImpl::getHookSettings () { std::map<std::string, std::string> settings; + + settings.insert(std::pair<std::string, std::string>("URLHOOK_IAX2_ENABLED", hookPreference.getIax2Enabled() ? "true" : "false")); + settings.insert(std::pair<std::string, std::string>("PHONE_NUMBER_HOOK_ADD_PREFIX", hookPreference.getNumberAddPrefix())); + settings.insert(std::pair<std::string, std::string>("PHONE_NUMBER_HOOK_ENABLED", hookPreference.getNumberEnabled() ? "true" : "false")); + settings.insert(std::pair<std::string, std::string>("URLHOOK_SIP_ENABLED", hookPreference.getSipEnabled() ? "true" : "false")); + settings.insert(std::pair<std::string, std::string>("URLHOOK_COMMAND", hookPreference.getUrlCommand())); + settings.insert(std::pair<std::string, std::string>("URLHOOK_SIP_FIELD", hookPreference.getUrlSipField())); + + /* settings.insert(std::pair<std::string, std::string>("URLHOOK_SIP_FIELD", getConfigString(HOOKS, URLHOOK_SIP_FIELD))); settings.insert(std::pair<std::string, std::string>("URLHOOK_COMMAND", @@ -4471,12 +4490,21 @@ std::map<std::string, std::string> ManagerImpl::getHookSettings () { "PHONE_NUMBER_HOOK_ADD_PREFIX", getConfigString(HOOKS, PHONE_NUMBER_HOOK_ADD_PREFIX))); + */ + return settings; } -void ManagerImpl::setHookSettings ( - const std::map<std::string, std::string>& settings) { +void ManagerImpl::setHookSettings (const std::map<std::string, std::string>& settings) { + hookPreference.setIax2Enabled((settings.find("URLHOOK_IAX2_ENABLED")->second == "true") ? true : false); + hookPreference.setNumberAddPrefix(settings.find("PHONE_NUMBER_HOOK_ADD_PREFIX")->second); + hookPreference.setNumberEnabled((settings.find("PHONE_NUMBER_HOOK_ENABLED")->second == "true") ? true : false); + hookPreference.setSipEnabled((settings.find("URLHOOK_SIP_ENABLED")->second == "true") ? true : false); + hookPreference.setUrlCommand(settings.find("URLHOOK_COMMAND")->second); + hookPreference.setUrlSipField(settings.find("URLHOOK_SIP_FIELD")->second); + + /* setConfig(HOOKS, URLHOOK_SIP_FIELD, (*settings.find("URLHOOK_SIP_FIELD")).second); setConfig(HOOKS, URLHOOK_COMMAND, @@ -4489,6 +4517,7 @@ void ManagerImpl::setHookSettings ( "PHONE_NUMBER_HOOK_ENABLED")).second); setConfig(HOOKS, PHONE_NUMBER_HOOK_ADD_PREFIX, (*settings.find( "PHONE_NUMBER_HOOK_ADD_PREFIX")).second); + */ // Write it to the configuration file saveConfig(); diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp index 6f6c4ad558..2c08c9cd12 100644 --- a/sflphone-common/src/preferences.cpp +++ b/sflphone-common/src/preferences.cpp @@ -254,7 +254,7 @@ void AddressbookPreference::unserialize(Conf::MappingNode *map) HookPreference::HookPreference() : _iax2Enabled(false) - , _numberAddPrefix(false) + , _numberAddPrefix("") , _numberEnabled(false) , _sipEnabled(false) , _urlCommand("x-www-browser") @@ -272,7 +272,7 @@ void HookPreference::serialize(Conf::YamlEmitter *emitter) Conf::MappingNode preferencemap(NULL); Conf::ScalarNode iax2Enabled(_iax2Enabled ? "true" : "false"); - Conf::ScalarNode numberAddPrefix(_numberAddPrefix ? "true" : "false"); + Conf::ScalarNode numberAddPrefix(_numberAddPrefix); Conf::ScalarNode numberEnabled(_numberEnabled ? "true" : "false"); Conf::ScalarNode sipEnabled(_sipEnabled ? "true" : "false"); Conf::ScalarNode urlCommand(_urlCommand); @@ -297,7 +297,7 @@ void HookPreference::unserialize(Conf::MappingNode *map) val = (Conf::ScalarNode *)(map->getValue(iax2EnabledKey)); if(val) { _iax2Enabled = (val->getValue() == "true") ? true : false; val = NULL; } val = (Conf::ScalarNode *)(map->getValue(numberAddPrefixKey)); - if(val) { _numberAddPrefix = (val->getValue() == "true") ? true : false; val = NULL; } + if(val) { _numberAddPrefix = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(numberEnabledKey)); if(val) { _numberEnabled = (val->getValue() == "true") ? true : false; val = NULL; } val = (Conf::ScalarNode *)(map->getValue(sipEnabledKey)); diff --git a/sflphone-common/src/preferences.h b/sflphone-common/src/preferences.h index 3c9b690b6f..c9fda93479 100755 --- a/sflphone-common/src/preferences.h +++ b/sflphone-common/src/preferences.h @@ -261,8 +261,8 @@ class HookPreference : public Serializable { bool getIax2Enabled(void) { return _iax2Enabled; } void setIax2Enabled( bool i) { _iax2Enabled = i; } - bool getNumberAddPrefix(void) { return _numberAddPrefix; } - void setNumberAddPrefix(bool n) { _numberAddPrefix = n; } + std::string getNumberAddPrefix(void) { return _numberAddPrefix; } + void setNumberAddPrefix(std::string n) { _numberAddPrefix = n; } bool getNumberEnabled(void) { return _numberEnabled; } void setNumberEnabled(bool n) { _numberEnabled = n; } @@ -279,7 +279,7 @@ class HookPreference : public Serializable { private: bool _iax2Enabled;// : false - bool _numberAddPrefix;//: false + std::string _numberAddPrefix;//: false bool _numberEnabled; //: false bool _sipEnabled; //: false std::string _urlCommand; //: x-www-browser -- GitLab From 53e29dde9ad0fe0fcd4764048b51721bfc243e93 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 9 Jul 2010 10:48:48 -0400 Subject: [PATCH 146/197] [#3649] Managerimpl configuration migration done --- sflphone-common/src/managerimpl.cpp | 61 ++++++++++++++++------------ sflphone-common/src/sip/sipaccount.h | 3 +- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 18ef20b620..fa5e081f3a 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -139,7 +139,7 @@ void ManagerImpl::init () { unsigned int sampleRate = audiolayer->getSampleRate(); _debugInit ("Manager: Load telephone tone"); - std::string country = getConfigString(PREFERENCES, ZONE_TONE); + std::string country = preferences.getZoneToneChoice(); // getConfigString(PREFERENCES, ZONE_TONE); _telephoneTone = new TelephoneTone(country, sampleRate); _debugInit ("Manager: Loading DTMF key"); @@ -147,7 +147,8 @@ void ManagerImpl::init () { } // Load the history - _history->load_history(getConfigInt(PREFERENCES, CONFIG_HISTORY_LIMIT)); + // _history->load_history(getConfigInt(PREFERENCES, CONFIG_HISTORY_LIMIT)); + _history->load_history(preferences.getHistoryLimit()); } void ManagerImpl::terminate () { @@ -215,11 +216,15 @@ bool ManagerImpl::outgoingCall (const std::string& account_id, CallID current_call_id = getCurrentCallId(); + /* if (getConfigString(HOOKS, PHONE_NUMBER_HOOK_ENABLED) == "1") _cleaner->set_phone_number_prefix(getConfigString(HOOKS, PHONE_NUMBER_HOOK_ADD_PREFIX)); + */ + if(hookPreference.getNumberEnabled()) + _cleaner->set_phone_number_prefix(hookPreference.getNumberAddPrefix()); else - _cleaner->set_phone_number_prefix(""); + _cleaner->set_phone_number_prefix(""); to_cleaned = _cleaner->clean(to); @@ -1468,7 +1473,7 @@ bool ManagerImpl::playDtmf (char code) { stopTone(); - bool hasToPlayTone = getConfigBool(SIGNALISATION, PLAY_DTMF); + bool hasToPlayTone = voipPreferences.getPlayDtmf(); // getConfigBool(SIGNALISATION, PLAY_DTMF); if (!hasToPlayTone) { _debug ("Manager: playDtmf: Do not have to play a tone..."); @@ -1476,7 +1481,7 @@ bool ManagerImpl::playDtmf (char code) { } // length in milliseconds - pulselen = getConfigInt(SIGNALISATION, PULSE_LENGTH); + pulselen = voipPreferences.getPulseLength(); // getConfigInt(SIGNALISATION, PULSE_LENGTH); if (!pulselen) { _debug ("Manager: playDtmf: Pulse length is not set..."); @@ -1819,7 +1824,7 @@ bool ManagerImpl::playATone (Tone::TONEID toneId) { // _debug ("Manager: Play tone %d", toneId); - hasToPlayTone = getConfigBool(SIGNALISATION, PLAY_TONES); + hasToPlayTone = voipPreferences.getPlayTones(); // getConfigBool(SIGNALISATION, PLAY_TONES); if (!hasToPlayTone) return false; @@ -1847,7 +1852,7 @@ bool ManagerImpl::playATone (Tone::TONEID toneId) { void ManagerImpl::stopTone () { bool hasToPlayTone; - hasToPlayTone = getConfigBool(SIGNALISATION, PLAY_TONES); + hasToPlayTone = voipPreferences.getPlayTones();// getConfigBool(SIGNALISATION, PLAY_TONES); if (!hasToPlayTone) return; @@ -1910,7 +1915,7 @@ void ManagerImpl::ringtone () { //TODO Comment this because it makes the daemon crashes since the main thread //synchronizes the ringtone thread. - ringchoice = getConfigString(AUDIO, RING_CHOICE); + ringchoice = audioPreference.getRingchoice();// getConfigString(AUDIO, RING_CHOICE); //if there is no / inside the path if (ringchoice.find(DIR_SEPARATOR_CH) == std::string::npos) { @@ -2502,7 +2507,8 @@ int ManagerImpl::isIax2Enabled (void) { } int ManagerImpl::isRingtoneEnabled (void) { - return (getConfigString(PREFERENCES, CONFIG_RINGTONE) == "true") ? 1 : 0; + // return (getConfigString(PREFERENCES, CONFIG_RINGTONE) == "true") ? 1 : 0; + return preferences.getRingtoneEnabled() ? 1 : 0; } void ManagerImpl::ringtoneEnabled (void) { @@ -2768,7 +2774,7 @@ std::string ManagerImpl::getCurrentAudioOutputPlugin (void) { if (alsalayer) return alsalayer -> getAudioPlugin(); else - return getConfigString(AUDIO, ALSA_PLUGIN); + return audioPreference.getPlugin();// getConfigString(AUDIO, ALSA_PLUGIN); } @@ -2867,7 +2873,8 @@ bool ManagerImpl::initAudioDriver (void) { _audiodriver->setMainBuffer(&_mainBuffer); } else { _audiodriver = new AlsaLayer(this); - setConfig(PREFERENCES, CONFIG_AUDIO, ALSA); + // setConfig(PREFERENCES, CONFIG_AUDIO, ALSA); + preferences.setAudioApi(ALSA); _audiodriver->setMainBuffer(&_mainBuffer); } } else @@ -3036,15 +3043,15 @@ void ManagerImpl::audioSamplingRateChanged (void) { type = _audiodriver->getLayerType(); samplerate = _mainBuffer.getInternalSamplingRate(); - framesize = getConfigInt(AUDIO, ALSA_FRAME_SIZE); + framesize = audioPreference.getFramesize(); // getConfigInt(AUDIO, ALSA_FRAME_SIZE); _debug ("Mnager: samplerate: %i, framesize %i\n", samplerate, framesize); alsaPlugin = getConfigString(AUDIO, ALSA_PLUGIN); - numCardIn = getConfigInt(AUDIO, ALSA_CARD_ID_IN); - numCardOut = getConfigInt(AUDIO, ALSA_CARD_ID_OUT); - numCardRing = getConfigInt(AUDIO, ALSA_CARD_ID_RING); + numCardIn = audioPreference.getCardin(); // getConfigInt(AUDIO, ALSA_CARD_ID_IN); + numCardOut = audioPreference.getCardout(); // getConfigInt(AUDIO, ALSA_CARD_ID_OUT); + numCardRing = audioPreference.getCardring(); // getConfigInt(AUDIO, ALSA_CARD_ID_RING); _debug ("Manager: Deleting current layer... "); @@ -3092,7 +3099,7 @@ void ManagerImpl::audioSamplingRateChanged (void) { delete _telephoneTone; _debugInit ("Manager: Load telephone tone"); - std::string country = getConfigString(PREFERENCES, ZONE_TONE); + std::string country = preferences.getZoneToneChoice(); // getConfigString(PREFERENCES, ZONE_TONE); _telephoneTone = new TelephoneTone(country, sampleRate); @@ -3122,8 +3129,10 @@ void ManagerImpl::audioSamplingRateChanged (void) { */ void ManagerImpl::initVolume () { _debugInit ("Initiate Volume"); - setSpkrVolume(getConfigInt(AUDIO, VOLUME_SPKR)); - setMicVolume(getConfigInt(AUDIO, VOLUME_MICRO)); + // setSpkrVolume(getConfigInt(AUDIO, VOLUME_SPKR)); + // setMicVolume(getConfigInt(AUDIO, VOLUME_MICRO)); + setSpkrVolume(audioPreference.getVolumespkr()); + setMicVolume(audioPreference.getVolumemic()); } void ManagerImpl::setSpkrVolume (unsigned short spkr_vol) { @@ -3149,7 +3158,7 @@ void ManagerImpl::setMicVolume (unsigned short mic_vol) { int ManagerImpl::getLocalIp2IpPort (void) { // The SIP port used for default account (IP to IP) calls= - return getConfigInt(IP2IP_PROFILE, LOCAL_PORT); + return preferences.getPortNum(); // getConfigInt(IP2IP_PROFILE, LOCAL_PORT); } @@ -3325,7 +3334,8 @@ bool ManagerImpl::setConfig (const std::string& section, void ManagerImpl::setAccountsOrder (const std::string& order) { _debug ("Setcreate accounts order : %s", order.c_str()); // Set the new config - setConfig(PREFERENCES, CONFIG_ACCOUNTS_ORDER, order); + // setConfig(PREFERENCES, CONFIG_ACCOUNTS_ORDER, order); + preferences.setAccountOrder(order); } std::vector<std::string> ManagerImpl::getAccountList () { @@ -3934,7 +3944,7 @@ std::string ManagerImpl::addAccount ( setAccountDetails(accountID.str(), details); // Add the newly created account in the account order list - account_list = getConfigString(PREFERENCES, CONFIG_ACCOUNTS_ORDER); + account_list = preferences.getAccountOrder();// getConfigString(PREFERENCES, CONFIG_ACCOUNTS_ORDER); if (account_list != "") { newAccountID += "/"; @@ -3961,7 +3971,7 @@ void ManagerImpl::deleteAllCredential (const AccountID& accountID) { SIPAccount *sipaccount = (SIPAccount *)account; - int numberOfCredential = getConfigInt(accountID, CONFIG_CREDENTIAL_NUMBER); + int numberOfCredential = sipaccount->getCredentialCount(); // getConfigInt(accountID, CONFIG_CREDENTIAL_NUMBER); for (int i = 0; i < numberOfCredential; i++) { std::string credentialIndex; @@ -4622,9 +4632,10 @@ std::map<std::string, std::string> ManagerImpl::send_history_to_client (void) { void ManagerImpl::receive_history_from_client (std::map<std::string, std::string> history) { - _history->set_serialized_history(history, Manager::instance().getConfigInt( - PREFERENCES, CONFIG_HISTORY_LIMIT)); - _history->save_history(); + // _history->set_serialized_history(history, Manager::instance().getConfigInt( + // PREFERENCES, CONFIG_HISTORY_LIMIT)); + _history->set_serialized_history(history, preferences.getHistoryLimit());; + _history->save_history(); } std::vector<std::string> ManagerImpl::getCallList (void) { diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index b06c1e4bdd..3828720885 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -262,7 +262,8 @@ class SIPAccount : public Account * @param none * @return int The number of credentials set for this account. */ - inline int getCredentialCount(void) { return _credentialCount; } + inline int getCredentialCount(void) { return credentials.getCredentialCount(); } + inline void setCredentialCount(int count) { return credentials.setCredentialCount(count); } /** * @return pjsip_tls_setting structure, filled from the configuration -- GitLab From 8404fe28b9668bbeed18aadc041bc5b328bc7707 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 9 Jul 2010 11:12:12 -0400 Subject: [PATCH 147/197] [#3649] Migrate sipvoiplink to new config engine --- sflphone-common/src/sip/sipvoiplink.cpp | 36 ++++++++++++++++--------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 0930a023a7..4780e3582e 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -446,13 +446,17 @@ std::string SIPVoIPLink::get_useragent_name (const AccountID& id) useragent << PROGNAME << "/" << SFLPHONED_VERSION; return useragent.str(); */ + + SIPAccount *account = (SIPAccount *)Manager::instance().getAccount(id); + std::ostringstream useragent; - useragent << Manager::instance ().getConfigString (id, USERAGENT); - if (useragent.str() == "sflphone" || useragent.str() == "") - useragent << "/" << SFLPHONED_VERSION; - - return useragent.str (); + // useragent << Manager::instance ().getConfigString (id, USERAGENT); + useragent << account->getUseragent(); + if (useragent.str() == "sflphone" || useragent.str() == "") + useragent << "/" << SFLPHONED_VERSION; + + return useragent.str (); } void @@ -1338,7 +1342,8 @@ SIPVoIPLink::dtmfSipInfo(SIPCall *call, char code) pjsip_media_type ctype; - duration = Manager::instance().getConfigInt (SIGNALISATION, PULSE_LENGTH); + duration = Manager::instance().voipPreferences.getPulseLength(); + // Manager::instance().getConfigInt (SIGNALISATION, PULSE_LENGTH); dtmf_body = new char[body_len]; @@ -3288,8 +3293,10 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) // if RTPFALLBACK, change RTP session AccountID accountID = Manager::instance().getAccountFromCall (call->getCallId()); - if(Manager::instance().getConfigString (accountID, SRTP_RTP_FALLBACK) == "true") - call->getAudioRtp()->initAudioRtpSession(call); + SIPAccount *account = (SIPAccount *)Manager::instance().getAccount(accountID); + //if(Manager::instance().getConfigString (accountID, SRTP_RTP_FALLBACK) == "true") + if(account->getSrtpFallback()) + call->getAudioRtp()->initAudioRtpSession(call); } if(nego_success && call->getAudioRtp()->getAudioRtpType() != sfl::Sdes) { @@ -3430,7 +3437,8 @@ void regc_cb (struct pjsip_regc_cbparam *param) out << (expire_value * 2); std::string s = out.str(); - Manager::instance().setConfig(account->getAccountID(), CONFIG_ACCOUNT_REGISTRATION_EXPIRE, s); + // Manager::instance().setConfig(account->getAccountID(), CONFIG_ACCOUNT_REGISTRATION_EXPIRE, s); + account->setRegistrationExpire(s); account->registerVoIPLink(); } break; @@ -3638,18 +3646,22 @@ mod_on_rx_request (pjsip_rx_data *rdata) /******************************************* URL HOOK *********************************************/ - if (Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_ENABLED) == "1") { + // if (Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_ENABLED) == "1") { + if (Manager::instance().hookPreference.getSipEnabled()) { _debug("UserAgent: Set sip url hooks"); std::string header_value; - header_value = fetch_header_value (rdata->msg_info.msg, Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_FIELD)); + header_value = fetch_header_value (rdata->msg_info.msg, + Manager::instance().hookPreference.getUrlSipField()); + // Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_FIELD)); if (header_value.size () < header_value.max_size()) { if (header_value!="") { urlhook->addAction (header_value, - Manager::instance().getConfigString (HOOKS, URLHOOK_COMMAND)); + Manager::instance().hookPreference.getUrlCommand()); + //Manager::instance().getConfigString (HOOKS, URLHOOK_COMMAND)); } } else throw length_error ("UserAgent: Url exceeds std::string max_size"); -- GitLab From 174c963f2485aabc6ad3e6e6358e8974ba636c54 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 9 Jul 2010 11:26:49 -0400 Subject: [PATCH 148/197] [#3649] Fix account registration protection in case IAX not supported --- sflphone-common/src/account.cpp | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/sflphone-common/src/account.cpp b/sflphone-common/src/account.cpp index 40da977a20..6480b65d41 100644 --- a/sflphone-common/src/account.cpp +++ b/sflphone-common/src/account.cpp @@ -49,21 +49,13 @@ Account::~Account() void Account::loadConfig() { - std::string p; - - p = Manager::instance().getConfigString (_accountID , CONFIG_ACCOUNT_TYPE); -#ifdef USE_IAX - _enabled = (Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_ENABLE) == "true") ? true : false; -#else - - if (p == "IAX") - _enabled = false; - else - _enabled = (Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_ENABLE) == "true") ? true : false; - + // If IAX is not supported, do not register this account +#ifndef USE_IAX + if (_type == "IAX") + _enabled = false; #endif - loadAudioCodecs (); + loadAudioCodecs (); } void Account::setRegistrationState (RegistrationState state) { -- GitLab From 30fe5778e754c6779c48705a01a0530c64467fc8 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 9 Jul 2010 12:08:27 -0400 Subject: [PATCH 149/197] [#3649] Fix codec order initialization --- sflphone-common/src/sip/sipaccount.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index ff3a5e6ea6..e28fa96d4a 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -161,7 +161,7 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { Conf::ScalarNode publishPort(publicportstr.str()); Conf::ScalarNode sameasLocal(_publishedSameasLocal ? "true" : "false"); Conf::ScalarNode resolveOnce(_resolveOnce ? "true" : "false"); - Conf::ScalarNode codecs(""); + Conf::ScalarNode codecs(_startupCodecStr); Conf::ScalarNode stunServer(std::string(_stunServerName.ptr, _stunServerName.slen)); Conf::ScalarNode stunEnabled(_stunEnabled ? "true" : "false"); Conf::ScalarNode displayName(_displayName); @@ -210,6 +210,7 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { accountmap.setKeyValue(resolveOnceKey, &resolveOnce); accountmap.setKeyValue(dtmfTypeKey, &dtmfType); accountmap.setKeyValue(displayNameKey, &displayName); + accountmap.setKeyValue(codecsKey, &codecs); accountmap.setKeyValue(srtpKey, &srtpmap); srtpmap.setKeyValue(srtpEnableKey, &srtpenabled); @@ -276,8 +277,7 @@ void SIPAccount::unserialize(Conf::MappingNode *map) // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); val = (Conf::ScalarNode *)(map->getValue(codecsKey)); - if(val) { val = NULL; } - // _codecOrder = val->getValue(); + if(val) { _startupCodecStr = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(expireKey)); if(val) { _registrationExpire = val->getValue(); val = NULL; } -- GitLab From c669fb7f985b5ecd5b6137e0d186f4977066b7b9 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 9 Jul 2010 14:09:51 -0400 Subject: [PATCH 150/197] [#3649] Move getAccountDetails setAccountDetails in account class --- sflphone-common/src/account.cpp | 8 +- sflphone-common/src/account.h | 37 ++- sflphone-common/src/iax/iaxaccount.cpp | 13 + sflphone-common/src/iax/iaxaccount.h | 4 + sflphone-common/src/managerimpl.cpp | 409 ++----------------------- sflphone-common/src/managerimpl.h | 16 +- sflphone-common/src/sip/sipaccount.cpp | 290 ++++++++++++++++++ sflphone-common/src/sip/sipaccount.h | 4 + 8 files changed, 376 insertions(+), 405 deletions(-) diff --git a/sflphone-common/src/account.cpp b/sflphone-common/src/account.cpp index 6480b65d41..329166a30d 100644 --- a/sflphone-common/src/account.cpp +++ b/sflphone-common/src/account.cpp @@ -39,6 +39,7 @@ Account::Account (const AccountID& accountID, std::string type) : , _enabled (false) , _type (type) , _codecOrder () + , _startupCodecStr("") { setRegistrationState (Unregistered); } @@ -72,17 +73,16 @@ void Account::setRegistrationState (RegistrationState state) { void Account::loadAudioCodecs (void) { // if the user never set the codec list, use the default configuration for this account - if (Manager::instance ().getConfigString (_accountID, "ActiveCodecs") == "") { + if(_startupCodecStr == "") { _info ("Account: use the default order"); Manager::instance ().getCodecDescriptorMap ().setDefaultOrder(); } - // else retrieve the one set in the user config file else { std::vector<std::string> active_list = Manager::instance ().retrieveActiveCodecs(); // This property is now set per account basis - std::string s = Manager::instance ().getConfigString (_accountID, "ActiveCodecs"); - setActiveCodecs (Manager::instance ().unserialize (s)); + // std::string s = Manager::instance ().getConfigString (_accountID, "ActiveCodecs"); + setActiveCodecs (Manager::instance ().unserialize (_startupCodecStr)); } } diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h index cf49c886c0..5120bfd829 100644 --- a/sflphone-common/src/account.h +++ b/sflphone-common/src/account.h @@ -144,6 +144,8 @@ const Conf::Key mailboxKey("mailbox"); const Conf::Key codecsKey("codecs"); // 0/9/110/111/112/ +#define find_in_map(X, Y) if((iter = map_cpy.find(X)) != map_cpy.end()) { Y = iter->second; } + class Account : public Serializable{ public: @@ -159,6 +161,11 @@ class Account : public Serializable{ virtual void unserialize(Conf::MappingNode *map) = 0; + virtual void setAccountDetails(const std::map<std::string, std::string>& details) = 0; + + virtual std::map<std::string, std::string> getAccountDetails() = 0; + + /** * Load the settings for this account. */ @@ -247,13 +254,13 @@ class Account : public Serializable{ inline std::string getType( void ) { return _type; } inline void setType( std::string type ) { _type = type; } - /** - * Accessor to data structures - * @return CodecOrder& The list that reflects the user's choice - */ - inline CodecOrder& getActiveCodecs() { return _codecOrder; } - - void setActiveCodecs (const std::vector <std::string>& list); + /** + * Accessor to data structures + * @return CodecOrder& The list that reflects the user's choice + */ + inline CodecOrder& getActiveCodecs() { return _codecOrder; } + + void setActiveCodecs (const std::vector <std::string>& list); private: // copy constructor @@ -262,7 +269,7 @@ class Account : public Serializable{ // assignment operator Account& operator=(const Account& rh); - void loadAudioCodecs (void); + void loadAudioCodecs (void); protected: /** @@ -320,10 +327,16 @@ class Account : public Serializable{ */ std::pair<int, std::string> _registrationStateDetailed; - /** - * Vector containing the order of the codecs - */ - CodecOrder _codecOrder; + /** + * Vector containing the order of the codecs + */ + CodecOrder _codecOrder; + + /** + * List of codec obtained when parsing configuration and used + * to generate codec order list, should not be used elsewhere. + */ + std::string _startupCodecStr; }; diff --git a/sflphone-common/src/iax/iaxaccount.cpp b/sflphone-common/src/iax/iaxaccount.cpp index bbf2bf0289..42ca92abb1 100644 --- a/sflphone-common/src/iax/iaxaccount.cpp +++ b/sflphone-common/src/iax/iaxaccount.cpp @@ -57,6 +57,19 @@ void IAXAccount::unserialize(Conf::MappingNode *map) } +void IAXAccount::setAccountDetails(const std::map<std::string, std::string>& details) +{ + +} + +std::map<std::string, std::string> IAXAccount::getAccountDetails() +{ + std::map<std::string, std::string> a; + + return a; +} + + void IAXAccount::setVoIPLink() { diff --git a/sflphone-common/src/iax/iaxaccount.h b/sflphone-common/src/iax/iaxaccount.h index fc78a70de3..1075dd70ab 100644 --- a/sflphone-common/src/iax/iaxaccount.h +++ b/sflphone-common/src/iax/iaxaccount.h @@ -48,6 +48,10 @@ class IAXAccount : public Account virtual void unserialize(Conf::MappingNode *map); + void setAccountDetails(const std::map<std::string, std::string>& details); + + std::map<std::string, std::string> getAccountDetails(); + void setVoIPLink (); /** diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index fa5e081f3a..89a3be32c1 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -72,8 +72,6 @@ #define MD5_APPEND(pms,buf,len) pj_md5_update(pms, (const pj_uint8_t*)buf, len) -#define find_in_map(X, Y) if((iter = map_cpy.find(X)) != map_cpy.end()) { Y = iter->second; } - ManagerImpl::ManagerImpl (void) : _hasTriedToRegister(false), _config(), _currentCallId2(), _currentCallMutex(), _codecBuilder(NULL), _audiodriver(NULL), @@ -3401,119 +3399,20 @@ std::vector<std::string> ManagerImpl::getAccountList () { } std::map<std::string, std::string> ManagerImpl::getAccountDetails ( - const AccountID& accountID) { - std::map<std::string, std::string> a; - - _debug("getAccountDetails %s", accountID.c_str()); - - Account * account = _accountMap[accountID]; - - if (account == NULL) { - _debug ("Cannot getAccountDetails on a non-existing accountID %s. Defaults will be used.", accountID.c_str()); - } - - a.insert(std::pair<std::string, std::string>(ACCOUNT_ID, accountID)); - - // The IP profile does not allow to set an alias - (accountID == IP2IP_PROFILE) ? a.insert( - std::pair<std::string, std::string>(CONFIG_ACCOUNT_ALIAS, - DIRECT_IP_CALL)) : a.insert(std::pair<std::string, - std::string>(CONFIG_ACCOUNT_ALIAS, account->getAlias())); - - a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ENABLE, account->isEnabled() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_TYPE, account->getType())); - a.insert(std::pair<std::string, std::string>(HOSTNAME, account->getHostname())); - a.insert(std::pair<std::string, std::string>(USERNAME, account->getUsername())); - a.insert(std::pair<std::string, std::string>(PASSWORD, account->getPassword())); - - - // a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_MAILBOX, - // getConfigString(accountID, CONFIG_ACCOUNT_MAILBOX))); - // a.insert(std::pair<std::string, std::string>(DISPLAY_NAME, getConfigString( - // accountID, DISPLAY_NAME))); - - RegistrationState state = Unregistered; - std::string registrationStateCode; - std::string registrationStateDescription; - - if (account != NULL) { - if (accountID == IP2IP_PROFILE) { - registrationStateCode = EMPTY_FIELD; - registrationStateDescription = "Direct IP call"; - } else { - state = account->getRegistrationState(); - int code = account->getRegistrationStateDetailed().first; - std::stringstream out; - out << code; - registrationStateCode = out.str(); - registrationStateDescription = account->getRegistrationStateDetailed().second; - } - } - - (accountID == IP2IP_PROFILE) ? a.insert( - std::pair<std::string, std::string>(REGISTRATION_STATUS, "READY")) - : a.insert(std::pair<std::string, std::string>(REGISTRATION_STATUS, - mapStateNumberToString(state))); - - a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_CODE, - registrationStateCode)); - a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_DESCRIPTION, registrationStateDescription)); - - // Add sip specific details - if(account->getType().compare("SIP") == 0) { - - SIPAccount *sipaccount = (SIPAccount *)account; - - a.insert(std::pair<std::string, std::string>(ROUTESET, sipaccount->getRouteSet())); - a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_RESOLVE_ONCE, sipaccount->isResolveOnce() ? "true" : "false")); - // a.insert(std::pair<std::string, std::string>(REALM, account-> - a.insert(std::pair<std::string, std::string>(USERAGENT, sipaccount->getUseragent())); - // a.insert(std::pair<std::string, std::string>(AUTHENTICATION_USERNAME, getConfigString(accountID, AUTHENTICATION_USERNAME))); - a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_REGISTRATION_EXPIRE, sipaccount->getRegistrationExpire())); - a.insert(std::pair<std::string, std::string>(LOCAL_INTERFACE, sipaccount->getLocalInterface())); - a.insert(std::pair<std::string, std::string>(PUBLISHED_SAMEAS_LOCAL, sipaccount->getPublishedSameasLocal() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(PUBLISHED_ADDRESS, sipaccount->getPublishedAddress())); - - std::stringstream localport; - localport << sipaccount->getLocalPort(); - a.insert(std::pair<std::string, std::string>(LOCAL_PORT, localport.str())); - std::stringstream publishedport; - publishedport << sipaccount->getPublishedPort(); - a.insert(std::pair<std::string, std::string>(PUBLISHED_PORT, publishedport.str())); - a.insert(std::pair<std::string, std::string>(STUN_ENABLE, sipaccount->isStunEnabled() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(STUN_SERVER, std::string(sipaccount->getStunServerName().ptr, sipaccount->getStunServerName().slen))); - a.insert(std::pair<std::string, std::string>(ACCOUNT_DTMF_TYPE, (sipaccount->getDtmfType() == 0) ? "0" : "1")); - - a.insert(std::pair<std::string, std::string>(SRTP_KEY_EXCHANGE, sipaccount->getSrtpKeyExchange())); - a.insert(std::pair<std::string, std::string>(SRTP_ENABLE, sipaccount->getSrtpEnable() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(SRTP_RTP_FALLBACK, sipaccount->getSrtpFallback() ? "true" : "false")); - - a.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS, sipaccount->getZrtpDisplaySas() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS_ONCE, sipaccount->getZrtpDiaplaySasOnce() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(ZRTP_HELLO_HASH, sipaccount->getZrtpHelloHash() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(ZRTP_NOT_SUPP_WARNING, sipaccount->getZrtpNotSuppWarning() ? "true" : "false")); - - // TLS listener is unique and parameters are modified through IP2IP_PROFILE - std::stringstream tlslistenerport; - tlslistenerport << sipaccount->getTlsListenerPort(); - a.insert(std::pair<std::string, std::string>(TLS_LISTENER_PORT, tlslistenerport.str())); - a.insert(std::pair<std::string, std::string>(TLS_ENABLE, sipaccount->getTlsEnable())); - a.insert(std::pair<std::string, std::string>(TLS_CA_LIST_FILE, sipaccount->getTlsCaListFile())); - a.insert(std::pair<std::string, std::string>(TLS_CERTIFICATE_FILE, sipaccount->getTlsCertificateFile())); - a.insert(std::pair<std::string, std::string>(TLS_PRIVATE_KEY_FILE, sipaccount->getTlsPrivateKeyFile())); - a.insert(std::pair<std::string, std::string>(TLS_PASSWORD, sipaccount->getTlsPassword())); - a.insert(std::pair<std::string, std::string>(TLS_METHOD, sipaccount->getTlsMethod())); - a.insert(std::pair<std::string, std::string>(TLS_CIPHERS, sipaccount->getTlsCiphers())); - a.insert(std::pair<std::string, std::string>(TLS_SERVER_NAME, sipaccount->getTlsServerName())); - a.insert(std::pair<std::string, std::string>(TLS_VERIFY_SERVER, sipaccount->getTlsVerifyServer() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(TLS_VERIFY_CLIENT, sipaccount->getTlsVerifyClient() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(TLS_REQUIRE_CLIENT_CERTIFICATE, sipaccount->getTlsRequireClientCertificate() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_SEC, sipaccount->getTlsNegotiationTimeoutSec())); - a.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_MSEC, sipaccount->getTlsNegotiationTimeoutMsec())); - - } + const AccountID& accountID) { + _debug("------------------------ Manager: get account details %s", accountID.c_str()); + + Account * account; + if(!(account = _accountMap[accountID])) { + _warn("Manager: Cannot getAccountDetails on a non-existing accountID %s.", accountID.c_str()); + // return an empty map + std::map<std::string, std::string> a; return a; + } + else + return account->getAccountDetails(); + } /* Transform digest to string. @@ -3627,284 +3526,32 @@ void ManagerImpl::setCredential (const std::string& accountID, Manager::instance().setConfig(section, PASSWORD, password); } -//TODO: tidy this up. Make a macro or inline // method to reduce the if/else mess. // Even better, switch to XML ! void ManagerImpl::setAccountDetails (const std::string& accountID, const std::map<std::string, std::string>& details) { - std::map<std::string, std::string> map_cpy; - std::map<std::string, std::string>::iterator iter; - - // Work on a copy - map_cpy = details; - - // Get the account type - std::string accountType; - find_in_map(CONFIG_ACCOUNT_TYPE, accountType) - - Account* account = getAccount(accountID); - - std::string alias; - std::string type; - std::string hostname; - std::string username; - std::string password; - std::string mailbox; - std::string accountEnable; - - // Account setting common to SIP and IAX - find_in_map(CONFIG_ACCOUNT_ALIAS, alias) - find_in_map(CONFIG_ACCOUNT_TYPE, type) - find_in_map(HOSTNAME, hostname) - find_in_map(USERNAME, username) - find_in_map(PASSWORD, password) - find_in_map(CONFIG_ACCOUNT_MAILBOX, mailbox); - find_in_map(CONFIG_ACCOUNT_ENABLE, accountEnable); - - account->setAlias(alias); - account->setType(type); - account->setUsername(username); - account->setHostname(hostname); - account->setPassword(password); - account->setEnabled((accountEnable.compare("true") == 0) ? true : false); - - // setConfig(accountID, CONFIG_ACCOUNT_ALIAS, alias); - // setConfig(accountID, CONFIG_ACCOUNT_TYPE, type); - // setConfig(accountID, HOSTNAME, hostname); - // setConfig(accountID, USERNAME, username); - // setConfig(accountID, PASSWORD, password); - // setConfig(accountID, CONFIG_ACCOUNT_MAILBOX, mailbox); - // setConfig(accountID, CONFIG_ACCOUNT_ENABLE, accountEnable); - - // SIP specific account settings - if(accountType == "SIP") { - - SIPAccount *sipaccount = (SIPAccount *)account; - - std::string ua_name; - std::string realm; - std::string routeset; - std::string authenticationName; - - std::string resolveOnce; - std::string registrationExpire; - - std::string displayName; - std::string localInterface; - std::string publishedSameasLocal; - std::string localAddress; - std::string publishedAddress; - std::string localPort; - std::string publishedPort; - std::string stunEnable; - std::string stunServer; - std::string dtmfType; - std::string srtpEnable; - std::string srtpRtpFallback; - std::string zrtpDisplaySas; - std::string zrtpDisplaySasOnce; - std::string zrtpNotSuppWarning; - std::string zrtpHelloHash; - std::string srtpKeyExchange; - - std::string tlsListenerPort; - std::string tlsEnable; - std::string tlsCaListFile; - std::string tlsCertificateFile; - std::string tlsPrivateKeyFile; - std::string tlsPassword; - std::string tlsMethod; - std::string tlsCiphers; - std::string tlsServerName; - std::string tlsVerifyServer; - std::string tlsVerifyClient; - std::string tlsRequireClientCertificate; - std::string tlsNegotiationTimeoutSec; - std::string tlsNegotiationTimeoutMsec; - - // general sip settings - find_in_map(DISPLAY_NAME, displayName) - find_in_map(ROUTESET, routeset) - find_in_map(LOCAL_INTERFACE, localInterface) - find_in_map(PUBLISHED_SAMEAS_LOCAL, publishedSameasLocal) - find_in_map(PUBLISHED_ADDRESS, publishedAddress) - find_in_map(LOCAL_PORT, localPort) - find_in_map(PUBLISHED_PORT, publishedPort) - find_in_map(STUN_ENABLE, stunEnable) - find_in_map(STUN_SERVER, stunServer) - find_in_map(ACCOUNT_DTMF_TYPE, dtmfType) - find_in_map(CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce) - find_in_map(CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire) - - sipaccount->setDisplayName(displayName); - sipaccount->setRouteSet(routeset); - sipaccount->setLocalInterface(localInterface); - sipaccount->setPublishedSameasLocal((publishedSameasLocal.compare("true") == 0) ? true : false); - sipaccount->setPublishedAddress(publishedAddress); - sipaccount->setLocalPort(atoi(localPort.data())); - sipaccount->setPublishedPort(atoi(publishedPort.data())); - // sipaccount->setStunServerName - // sipaccount->setStunServer(); - // sipaccount->setStunEnable(); - sipaccount->setResolveOnce((resolveOnce.compare("true")==0) ? true : false); - sipaccount->setRegistrationExpire(registrationExpire); - - // setConfig(accountID, DISPLAY_NAME, displayName); - // setConfig(accountID, ROUTESET, routeset); - // setConfig(accountID, LOCAL_INTERFACE, localInterface); - // setConfig(accountID, PUBLISHED_SAMEAS_LOCAL, publishedSameasLocal); - // setConfig(accountID, PUBLISHED_ADDRESS, publishedAddress); - // setConfig(accountID, LOCAL_PORT, localPort); - // setConfig(accountID, PUBLISHED_PORT, publishedPort); - // setConfig(accountID, STUN_ENABLE, stunEnable); - // setConfig(accountID, STUN_SERVER, stunServer); - // setConfig(accountID, ACCOUNT_DTMF_TYPE, dtmfType); - // setConfig(accountID, CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce); - // setConfig(accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire); - - // sip credential - find_in_map(REALM, realm) - find_in_map(AUTHENTICATION_USERNAME, authenticationName) - find_in_map(USERAGENT, ua_name) - - setConfig(accountID, REALM, realm); - // setConfig(accountID, USERAGENT, ua_name); - // setConfig(accountID, AUTHENTICATION_USERNAME, authenticationName); - - sipaccount->setUseragent(ua_name); - - // srtp settings - find_in_map(SRTP_ENABLE, srtpEnable) - find_in_map(SRTP_RTP_FALLBACK, srtpRtpFallback) - find_in_map(ZRTP_DISPLAY_SAS, zrtpDisplaySas) - find_in_map(ZRTP_DISPLAY_SAS_ONCE, zrtpDisplaySasOnce) - find_in_map(ZRTP_NOT_SUPP_WARNING, zrtpNotSuppWarning) - find_in_map(ZRTP_HELLO_HASH, zrtpHelloHash) - find_in_map(SRTP_KEY_EXCHANGE, srtpKeyExchange) - - sipaccount->setSrtpEnable((srtpEnable.compare("true") == 0) ? true : false); - sipaccount->setSrtpFallback((srtpRtpFallback.compare("true") == 0) ? true : false); - sipaccount->setZrtpDisplaySas((zrtpDisplaySas.compare("true") == 0) ? true : false); - sipaccount->setZrtpDiaplaySasOnce((zrtpDisplaySasOnce.compare("true") == 0) ? true : false); - sipaccount->setZrtpNotSuppWarning((zrtpNotSuppWarning.compare("true") == 0) ? true : false); - sipaccount->setZrtpHelloHash((zrtpHelloHash.compare("true") == 0) ? true : false); - // sipaccount->setSrtpKeyExchange((srtpKeyExchange.compare("true") == 0) ? true : false); - sipaccount->setSrtpKeyExchange(srtpKeyExchange); - - // setConfig(accountID, SRTP_ENABLE, srtpEnable); - // setConfig(accountID, SRTP_RTP_FALLBACK, srtpRtpFallback); - // setConfig(accountID, ZRTP_DISPLAY_SAS, zrtpDisplaySas); - // setConfig(accountID, ZRTP_DISPLAY_SAS_ONCE, zrtpDisplaySasOnce); - // setConfig(accountID, ZRTP_NOT_SUPP_WARNING, zrtpNotSuppWarning); - // setConfig(accountID, ZRTP_HELLO_HASH, zrtpHelloHash); - // setConfig(accountID, SRTP_KEY_EXCHANGE, srtpKeyExchange); + _debug("----------------------- Manager: Set account details %s", accountID.c_str()); + + Account* account; + if(!(account = getAccount(accountID))) { + _warn("Manager: Cannot setAccountDetails on a non-existing accountID %s.", accountID.c_str()); + return; + } - - // TLS settings - // The TLS listener is unique and globally defined through IP2IP_PROFILE - if(accountID == IP2IP_PROFILE) { - find_in_map(TLS_LISTENER_PORT, tlsListenerPort) - } - find_in_map(TLS_ENABLE, tlsEnable) - find_in_map(TLS_CA_LIST_FILE, tlsCaListFile) - find_in_map(TLS_CERTIFICATE_FILE, tlsCertificateFile) - find_in_map(TLS_PRIVATE_KEY_FILE, tlsPrivateKeyFile) - find_in_map(TLS_PASSWORD, tlsPassword) - find_in_map(TLS_METHOD, tlsMethod) - find_in_map(TLS_CIPHERS, tlsCiphers) - find_in_map(TLS_SERVER_NAME, tlsServerName) - find_in_map(TLS_VERIFY_SERVER, tlsVerifyServer) - find_in_map(TLS_VERIFY_CLIENT, tlsVerifyClient) - find_in_map(TLS_REQUIRE_CLIENT_CERTIFICATE, tlsRequireClientCertificate) - find_in_map(TLS_NEGOTIATION_TIMEOUT_SEC, tlsNegotiationTimeoutSec) - find_in_map(TLS_NEGOTIATION_TIMEOUT_MSEC, tlsNegotiationTimeoutMsec) - - - - if (accountID == IP2IP_PROFILE){ - sipaccount->setTlsListenerPort(atoi(tlsListenerPort.data())); - } - sipaccount->setTlsEnable(tlsEnable); - sipaccount->setTlsCaListFile(tlsCaListFile); - sipaccount->setTlsCertificateFile(tlsCertificateFile); - sipaccount->setTlsPrivateKeyFile(tlsPrivateKeyFile); - sipaccount->setTlsPassword(tlsPassword); - sipaccount->setTlsMethod(tlsMethod); - sipaccount->setTlsCiphers(tlsCiphers); - sipaccount->setTlsServerName(tlsServerName); - sipaccount->setTlsVerifyServer(tlsVerifyServer.compare("true") ? true : false); - sipaccount->setTlsVerifyClient(tlsVerifyServer.compare("true") ? true : false); - sipaccount->setTlsRequireClientCertificate(tlsRequireClientCertificate.compare("true") ? true : false); - sipaccount->setTlsNegotiationTimeoutSec(tlsNegotiationTimeoutSec); - sipaccount->setTlsNegotiationTimeoutMsec(tlsNegotiationTimeoutMsec); - - - - // The TLS listener is unique and globally defined through IP2IP_PROFILE - // if (accountID == IP2IP_PROFILE){ - // setConfig(accountID, TLS_LISTENER_PORT, tlsListenerPort); - // } - // setConfig(accountID, TLS_ENABLE, tlsEnable); - // setConfig(accountID, TLS_CA_LIST_FILE, tlsCaListFile); - // setConfig(accountID, TLS_CERTIFICATE_FILE, tlsCertificateFile); - // setConfig(accountID, TLS_PRIVATE_KEY_FILE, tlsPrivateKeyFile); - // setConfig(accountID, TLS_PASSWORD, tlsPassword); - // setConfig(accountID, TLS_METHOD, tlsMethod); - // setConfig(accountID, TLS_CIPHERS, tlsCiphers); - // setConfig(accountID, TLS_SERVER_NAME, tlsServerName); - // setConfig(accountID, TLS_VERIFY_SERVER, tlsVerifyServer); - // setConfig(accountID, TLS_VERIFY_CLIENT, tlsVerifyClient); - // setConfig(accountID, TLS_REQUIRE_CLIENT_CERTIFICATE, tlsRequireClientCertificate); - // setConfig(accountID, TLS_NEGOTIATION_TIMEOUT_SEC, tlsNegotiationTimeoutSec); - // setConfig(accountID, TLS_NEGOTIATION_TIMEOUT_MSEC,tlsNegotiationTimeoutMsec); - - if (!getMd5CredentialHashing()) { - // setConfig(accountID, PASSWORD, password); - sipaccount->setPassword(password); - } else { - // Make sure not to re-hash the password field if - // it is already saved as a MD5 Hash. - // TODO: This test is weak. Fix this. - // if ((password.compare(getConfig(accountID, PASSWORD)) != 0)) { - if ((password.compare(sipaccount->getPassword()) != 0)) { - _debug ("Password sent and password from config are different. Re-hashing"); - std::string hash; - - if (authenticationName.empty()) { - hash = computeMd5HashFromCredential(username, password, realm); - } else { - hash = computeMd5HashFromCredential(authenticationName, password, realm); - } - - // setConfig(accountID, PASSWORD, hash); - sipaccount->setPassword(hash); - } - } + account->setAccountDetails(details); - } + saveConfig(); - saveConfig(); - - Account * acc = NULL; - acc = getAccount(accountID); - - if (acc != NULL) { - // acc->loadConfig(); - - if (acc->isEnabled()) { - acc->registerVoIPLink(); - } else { - acc->unregisterVoIPLink(); - } - } else { - _debug ("ManagerImpl::setAccountDetails: account is NULL"); - } + if (account->isEnabled()) + account->registerVoIPLink(); + else + account->unregisterVoIPLink(); - // Update account details to the client side - if (_dbus) - _dbus->getConfigurationManager()->accountsChanged(); + // Update account details to the client side + if (_dbus) + _dbus->getConfigurationManager()->accountsChanged(); } diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index e6d07bbb75..68bf3b84a7 100755 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -1057,6 +1057,14 @@ class ManagerImpl { ost::Mutex* getAudioLayerMutex() { return &_audiolayer_mutex; } + /** + * Helper function that creates an MD5 Hash from the credential + * information provided as parameters. The hash is computed as + * MD5(username ":" realm ":" password). + * + */ + std::string computeMd5HashFromCredential(const std::string& username, const std::string& password, const std::string& realm); + private: /* Transform digest to string. * output must be at least PJSIP_MD5STRLEN+1 bytes. @@ -1067,14 +1075,6 @@ class ManagerImpl { */ void digest2str(const unsigned char digest[], char *output); - /** - * Helper function that creates an MD5 Hash from the credential - * information provided as parameters. The hash is computed as - * MD5(username ":" realm ":" password). - * - */ - std::string computeMd5HashFromCredential(const std::string& username, const std::string& password, const std::string& realm); - /** * Check if a process is running with the system command * diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index e28fa96d4a..75288b8d58 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -373,6 +373,296 @@ void SIPAccount::unserialize(Conf::MappingNode *map) } +void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& details) +{ + + std::map<std::string, std::string> map_cpy; + std::map<std::string, std::string>::iterator iter; + + // Work on a copy + map_cpy = details; + + std::string alias; + std::string type; + std::string hostname; + std::string username; + std::string password; + std::string mailbox; + std::string accountEnable; + + // Account setting common to SIP and IAX + find_in_map(CONFIG_ACCOUNT_ALIAS, alias) + find_in_map(CONFIG_ACCOUNT_TYPE, type) + find_in_map(HOSTNAME, hostname) + find_in_map(USERNAME, username) + find_in_map(PASSWORD, password) + find_in_map(CONFIG_ACCOUNT_MAILBOX, mailbox); + find_in_map(CONFIG_ACCOUNT_ENABLE, accountEnable); + + setAlias(alias); + setType(type); + setUsername(username); + setHostname(hostname); + setPassword(password); + setEnabled((accountEnable.compare("true") == 0) ? true : false); + + // SIP specific account settings + if(getType() == "SIP") { + + std::string ua_name; + std::string realm; + std::string routeset; + std::string authenticationName; + + std::string resolveOnce; + std::string registrationExpire; + + std::string displayName; + std::string localInterface; + std::string publishedSameasLocal; + std::string localAddress; + std::string publishedAddress; + std::string localPort; + std::string publishedPort; + std::string stunEnable; + std::string stunServer; + std::string dtmfType; + std::string srtpEnable; + std::string srtpRtpFallback; + std::string zrtpDisplaySas; + std::string zrtpDisplaySasOnce; + std::string zrtpNotSuppWarning; + std::string zrtpHelloHash; + std::string srtpKeyExchange; + + std::string tlsListenerPort; + std::string tlsEnable; + std::string tlsCaListFile; + std::string tlsCertificateFile; + std::string tlsPrivateKeyFile; + std::string tlsPassword; + std::string tlsMethod; + std::string tlsCiphers; + std::string tlsServerName; + std::string tlsVerifyServer; + std::string tlsVerifyClient; + std::string tlsRequireClientCertificate; + std::string tlsNegotiationTimeoutSec; + std::string tlsNegotiationTimeoutMsec; + + // general sip settings + find_in_map(DISPLAY_NAME, displayName) + find_in_map(ROUTESET, routeset) + find_in_map(LOCAL_INTERFACE, localInterface) + find_in_map(PUBLISHED_SAMEAS_LOCAL, publishedSameasLocal) + find_in_map(PUBLISHED_ADDRESS, publishedAddress) + find_in_map(LOCAL_PORT, localPort) + find_in_map(PUBLISHED_PORT, publishedPort) + find_in_map(STUN_ENABLE, stunEnable) + find_in_map(STUN_SERVER, stunServer) + find_in_map(ACCOUNT_DTMF_TYPE, dtmfType) + find_in_map(CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce) + find_in_map(CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire) + + setDisplayName(displayName); + setRouteSet(routeset); + setLocalInterface(localInterface); + setPublishedSameasLocal((publishedSameasLocal.compare("true") == 0) ? true : false); + setPublishedAddress(publishedAddress); + setLocalPort(atoi(localPort.data())); + setPublishedPort(atoi(publishedPort.data())); + // sipaccount->setStunServerName + // sipaccount->setStunServer(); + // sipaccount->setStunEnable(); + setResolveOnce((resolveOnce.compare("true")==0) ? true : false); + setRegistrationExpire(registrationExpire); + + // sip credential + find_in_map(REALM, realm) + find_in_map(AUTHENTICATION_USERNAME, authenticationName) + find_in_map(USERAGENT, ua_name) + + // setConfig(accountID, REALM, realm); + // setConfig(accountID, USERAGENT, ua_name); + // setConfig(accountID, AUTHENTICATION_USERNAME, authenticationName); + + setUseragent(ua_name); + + // srtp settings + find_in_map(SRTP_ENABLE, srtpEnable) + find_in_map(SRTP_RTP_FALLBACK, srtpRtpFallback) + find_in_map(ZRTP_DISPLAY_SAS, zrtpDisplaySas) + find_in_map(ZRTP_DISPLAY_SAS_ONCE, zrtpDisplaySasOnce) + find_in_map(ZRTP_NOT_SUPP_WARNING, zrtpNotSuppWarning) + find_in_map(ZRTP_HELLO_HASH, zrtpHelloHash) + find_in_map(SRTP_KEY_EXCHANGE, srtpKeyExchange) + + setSrtpEnable((srtpEnable.compare("true") == 0) ? true : false); + setSrtpFallback((srtpRtpFallback.compare("true") == 0) ? true : false); + setZrtpDisplaySas((zrtpDisplaySas.compare("true") == 0) ? true : false); + setZrtpDiaplaySasOnce((zrtpDisplaySasOnce.compare("true") == 0) ? true : false); + setZrtpNotSuppWarning((zrtpNotSuppWarning.compare("true") == 0) ? true : false); + setZrtpHelloHash((zrtpHelloHash.compare("true") == 0) ? true : false); + // sipaccount->setSrtpKeyExchange((srtpKeyExchange.compare("true") == 0) ? true : false); + setSrtpKeyExchange(srtpKeyExchange); + + // TLS settings + // The TLS listener is unique and globally defined through IP2IP_PROFILE + if(_accountID == IP2IP_PROFILE) { + find_in_map(TLS_LISTENER_PORT, tlsListenerPort) + } + find_in_map(TLS_ENABLE, tlsEnable) + find_in_map(TLS_CA_LIST_FILE, tlsCaListFile) + find_in_map(TLS_CERTIFICATE_FILE, tlsCertificateFile) + find_in_map(TLS_PRIVATE_KEY_FILE, tlsPrivateKeyFile) + find_in_map(TLS_PASSWORD, tlsPassword) + find_in_map(TLS_METHOD, tlsMethod) + find_in_map(TLS_CIPHERS, tlsCiphers) + find_in_map(TLS_SERVER_NAME, tlsServerName) + find_in_map(TLS_VERIFY_SERVER, tlsVerifyServer) + find_in_map(TLS_VERIFY_CLIENT, tlsVerifyClient) + find_in_map(TLS_REQUIRE_CLIENT_CERTIFICATE, tlsRequireClientCertificate) + find_in_map(TLS_NEGOTIATION_TIMEOUT_SEC, tlsNegotiationTimeoutSec) + find_in_map(TLS_NEGOTIATION_TIMEOUT_MSEC, tlsNegotiationTimeoutMsec) + + if (_accountID == IP2IP_PROFILE){ + setTlsListenerPort(atoi(tlsListenerPort.data())); + } + setTlsEnable(tlsEnable); + setTlsCaListFile(tlsCaListFile); + setTlsCertificateFile(tlsCertificateFile); + setTlsPrivateKeyFile(tlsPrivateKeyFile); + setTlsPassword(tlsPassword); + setTlsMethod(tlsMethod); + setTlsCiphers(tlsCiphers); + setTlsServerName(tlsServerName); + setTlsVerifyServer(tlsVerifyServer.compare("true") ? true : false); + setTlsVerifyClient(tlsVerifyServer.compare("true") ? true : false); + setTlsRequireClientCertificate(tlsRequireClientCertificate.compare("true") ? true : false); + setTlsNegotiationTimeoutSec(tlsNegotiationTimeoutSec); + setTlsNegotiationTimeoutMsec(tlsNegotiationTimeoutMsec); + + if (!Manager::instance().preferences.getMd5Hash()) { + setPassword(password); + } else { + // Make sure not to re-hash the password field if + // it is already saved as a MD5 Hash. + // TODO: This test is weak. Fix this. + if ((password.compare(getPassword()) != 0)) { + _debug ("SipAccount: Password sent and password from config are different. Re-hashing"); + std::string hash; + + if (authenticationName.empty()) { + hash = Manager::instance().computeMd5HashFromCredential(username, password, realm); + } else { + hash = Manager::instance().computeMd5HashFromCredential(authenticationName, password, realm); + } + + // setConfig(accountID, PASSWORD, hash); + setPassword(hash); + } + } + } +} + +std::map<std::string, std::string> SIPAccount::getAccountDetails() +{ + _debug("--------------------------- SipAccount: get account details %s", _accountID.c_str()); + + std::map<std::string, std::string> a; + + a.insert(std::pair<std::string, std::string>(ACCOUNT_ID, _accountID)); + + // The IP profile does not allow to set an alias + (_accountID == IP2IP_PROFILE) ? + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ALIAS, IP2IP_PROFILE)) : + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ALIAS, getAlias())); + + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ENABLE, isEnabled() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_TYPE, getType())); + a.insert(std::pair<std::string, std::string>(HOSTNAME, getHostname())); + a.insert(std::pair<std::string, std::string>(USERNAME, getUsername())); + a.insert(std::pair<std::string, std::string>(PASSWORD, getPassword())); + + RegistrationState state = Unregistered; + std::string registrationStateCode; + std::string registrationStateDescription; + + + if (_accountID == IP2IP_PROFILE) { + registrationStateCode = EMPTY_FIELD; + registrationStateDescription = "Direct IP call"; + } else { + state = getRegistrationState(); + int code = getRegistrationStateDetailed().first; + std::stringstream out; out << code; + registrationStateCode = out.str(); + registrationStateDescription = getRegistrationStateDetailed().second; + } + + + (_accountID == IP2IP_PROFILE) ? + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATUS, "READY")) : + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATUS, Manager::instance().mapStateNumberToString(state))); + + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_CODE, registrationStateCode)); + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_DESCRIPTION, registrationStateDescription)); + + // Add sip specific details + if(getType() == "SIP") { + + a.insert(std::pair<std::string, std::string>(ROUTESET, getRouteSet())); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_RESOLVE_ONCE, isResolveOnce() ? "true" : "false")); + // a.insert(std::pair<std::string, std::string>(REALM, account-> + a.insert(std::pair<std::string, std::string>(USERAGENT, getUseragent())); + // a.insert(std::pair<std::string, std::string>(AUTHENTICATION_USERNAME, getConfigString(accountID, AUTHENTICATION_USERNAME))); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_REGISTRATION_EXPIRE, getRegistrationExpire())); + a.insert(std::pair<std::string, std::string>(LOCAL_INTERFACE, getLocalInterface())); + a.insert(std::pair<std::string, std::string>(PUBLISHED_SAMEAS_LOCAL, getPublishedSameasLocal() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(PUBLISHED_ADDRESS, getPublishedAddress())); + + std::stringstream localport; localport << getLocalPort(); + a.insert(std::pair<std::string, std::string>(LOCAL_PORT, localport.str())); + std::stringstream publishedport; publishedport << getPublishedPort(); + a.insert(std::pair<std::string, std::string>(PUBLISHED_PORT, publishedport.str())); + a.insert(std::pair<std::string, std::string>(STUN_ENABLE, isStunEnabled() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(STUN_SERVER, std::string(getStunServerName().ptr, getStunServerName().slen))); + a.insert(std::pair<std::string, std::string>(ACCOUNT_DTMF_TYPE, (getDtmfType() == 0) ? "0" : "1")); + + a.insert(std::pair<std::string, std::string>(SRTP_KEY_EXCHANGE, getSrtpKeyExchange())); + a.insert(std::pair<std::string, std::string>(SRTP_ENABLE, getSrtpEnable() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(SRTP_RTP_FALLBACK, getSrtpFallback() ? "true" : "false")); + + a.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS, getZrtpDisplaySas() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS_ONCE, getZrtpDiaplaySasOnce() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(ZRTP_HELLO_HASH, getZrtpHelloHash() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(ZRTP_NOT_SUPP_WARNING, getZrtpNotSuppWarning() ? "true" : "false")); + + // TLS listener is unique and parameters are modified through IP2IP_PROFILE + std::stringstream tlslistenerport; + tlslistenerport << getTlsListenerPort(); + a.insert(std::pair<std::string, std::string>(TLS_LISTENER_PORT, tlslistenerport.str())); + a.insert(std::pair<std::string, std::string>(TLS_ENABLE, getTlsEnable())); + a.insert(std::pair<std::string, std::string>(TLS_CA_LIST_FILE, getTlsCaListFile())); + a.insert(std::pair<std::string, std::string>(TLS_CERTIFICATE_FILE, getTlsCertificateFile())); + a.insert(std::pair<std::string, std::string>(TLS_PRIVATE_KEY_FILE, getTlsPrivateKeyFile())); + a.insert(std::pair<std::string, std::string>(TLS_PASSWORD, getTlsPassword())); + a.insert(std::pair<std::string, std::string>(TLS_METHOD, getTlsMethod())); + a.insert(std::pair<std::string, std::string>(TLS_CIPHERS, getTlsCiphers())); + a.insert(std::pair<std::string, std::string>(TLS_SERVER_NAME, getTlsServerName())); + a.insert(std::pair<std::string, std::string>(TLS_VERIFY_SERVER, getTlsVerifyServer() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(TLS_VERIFY_CLIENT, getTlsVerifyClient() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(TLS_REQUIRE_CLIENT_CERTIFICATE, getTlsRequireClientCertificate() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_SEC, getTlsNegotiationTimeoutSec())); + a.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_MSEC, getTlsNegotiationTimeoutMsec())); + + } + + return a; + +} + + // void SIPAccount::setVoIPLink(VoIPLink *link) { void SIPAccount::setVoIPLink() { diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 3828720885..807c674774 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -174,6 +174,10 @@ class SIPAccount : public Account virtual void unserialize(Conf::MappingNode *map); + virtual void setAccountDetails(const std::map<std::string, std::string>& details); + + virtual std::map<std::string, std::string> getAccountDetails(); + /** * Set route header to appears in sip messages for this account */ -- GitLab From 6f6df4c56d0a11785d10c28d221b9dcd95ad1e6d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 9 Jul 2010 17:29:54 -0400 Subject: [PATCH 151/197] [#3649] Fix sip account credential count --- sflphone-common/src/sip/sipaccount.cpp | 66 +++---------------------- sflphone-common/src/sip/sipvoiplink.cpp | 5 +- 2 files changed, 11 insertions(+), 60 deletions(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 75288b8d58..204fc845be 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -674,13 +674,15 @@ void SIPAccount::setVoIPLink() { int SIPAccount::initCredential (void) { + _debug("SipAccount: Init credential"); + int credentialCount = 0; - credentialCount = credentials.getCredentialCount();// Manager::instance().getConfigInt (_accountID, CONFIG_CREDENTIAL_NUMBER); + credentialCount = credentials.getCredentialCount(); credentialCount += 1; bool md5HashingEnabled = false; int dataType = 0; - md5HashingEnabled = Manager::instance().preferences.getMd5Hash(); // Manager::instance().getConfigBool (PREFERENCES, CONFIG_MD5HASH); + md5HashingEnabled = Manager::instance().preferences.getMd5Hash(); std::string digest; // Create the credential array @@ -758,7 +760,7 @@ int SIPAccount::initCredential (void) _debug ("Setting credential %d realm = %s passwd = %s username = %s data_type = %d", i, realm.c_str(), password.c_str(), username.c_str(), cred_info[i].data_type); } - _credentialCount = credentialCount; + credentials.setCredentialCount(credentialCount); _cred = cred_info; @@ -872,19 +874,6 @@ void SIPAccount::initTlsConfiguration (void) pjsip_tls_setting_default (_tlsSetting); - // std::string tlsCaListFile = Manager::instance().getConfigString (_accountID, TLS_CA_LIST_FILE); - // std::string tlsCertificateFile = Manager::instance().getConfigString (_accountID, TLS_CERTIFICATE_FILE); - // std::string tlsPrivateKeyFile = Manager::instance().getConfigString (_accountID, TLS_PRIVATE_KEY_FILE); - // std::string tlsPassword = Manager::instance().getConfigString (_accountID, TLS_PASSWORD); - // std::string tlsMethod = Manager::instance().getConfigString (_accountID, TLS_METHOD); - // std::string tlsCiphers = Manager::instance().getConfigString (_accountID, TLS_CIPHERS); - // std::string tlsServerName = Manager::instance().getConfigString (_accountID, TLS_SERVER_NAME); - // bool tlsVerifyServer = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_SERVER); - // bool tlsVerifyClient = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_CLIENT); - // bool tlsRequireClientCertificate = Manager::instance().getConfigBool (_accountID, TLS_REQUIRE_CLIENT_CERTIFICATE); - // std::string tlsNegotiationTimeoutSec = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_SEC); - // std::string tlsNegotiationTimeoutMsec = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_MSEC); - pj_cstr (&_tlsSetting->ca_list_file, _tlsCaListFile.c_str()); pj_cstr (&_tlsSetting->cert_file, _tlsCertificateFile.c_str()); pj_cstr (&_tlsSetting->privkey_file, _tlsPrivateKeyFile.c_str()); @@ -927,51 +916,10 @@ void SIPAccount::initStunConfiguration (void) void SIPAccount::loadConfig() { - // Load primary credential - setUsername (Manager::instance().getConfigString (_accountID, USERNAME)); - setRouteSet(Manager::instance().getConfigString(_accountID, ROUTESET)); - setPassword (Manager::instance().getConfigString (_accountID, PASSWORD)); - _authenticationUsername = Manager::instance().getConfigString (_accountID, AUTHENTICATION_USERNAME); - _realm = Manager::instance().getConfigString (_accountID, REALM); - _resolveOnce = Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_RESOLVE_ONCE) == "1" ? true : false; - - // Load general account settings - setHostname (Manager::instance().getConfigString (_accountID, HOSTNAME)); - - if (Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE).empty()) { + if (_registrationExpire.empty()) _registrationExpire = DFT_EXPIRE_VALUE; - } else { - _registrationExpire = Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE); - } - - // Load network settings - // Local parameters - - // Load local interface - setLocalInterface(Manager::instance().getConfigString (_accountID, LOCAL_INTERFACE)); - - std::string localPort = Manager::instance().getConfigString (_accountID, LOCAL_PORT); - setLocalPort (atoi (localPort.c_str())); - - // Published parameters - setPublishedSameasLocal (Manager::instance().getConfigString (_accountID, PUBLISHED_SAMEAS_LOCAL) == TRUE_STR ? true : false); - - std::string publishedPort = Manager::instance().getConfigString (_accountID, PUBLISHED_PORT); - - setPublishedPort (atoi (publishedPort.c_str())); - - setPublishedAddress (Manager::instance().getConfigString (_accountID, PUBLISHED_ADDRESS)); - - if(Manager::instance().getConfigString (_accountID, ACCOUNT_DTMF_TYPE) == OVERRTPSTR) - _dtmfType = OVERRTP; - else - _dtmfType = SIPINFO; - - // Init TLS settings if the user wants to use TLS - bool tlsEnabled = Manager::instance().getConfigBool (_accountID, TLS_ENABLE); - - if (tlsEnabled) { + if (_tlsEnabled) { initTlsConfiguration(); _transportType = PJSIP_TRANSPORT_TLS; } else { diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 4780e3582e..b89e7530f7 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -657,8 +657,11 @@ int SIPVoIPLink::sendRegister (AccountID id) pj_list_push_back (&hdr_list, (pjsip_hdr*) h); // pj_list_push_back (&hdr_list, (pjsip_hdr*) routing); + if (regc) + _debug("No regc ......"); + pjsip_regc_add_headers (regc, &hdr_list); - + status = pjsip_regc_register (regc, PJ_TRUE, &tdata); if (status != PJ_SUCCESS) { -- GitLab From 8e96589767eb00287c4c85c2e3d549a0ae4c4bf7 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 9 Jul 2010 18:48:09 -0400 Subject: [PATCH 152/197] [#3649] Migrate sip2ip details in configuration manager --- .../src/dbus/configurationmanager.cpp | 239 ++++++------------ 1 file changed, 78 insertions(+), 161 deletions(-) diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index 0984c2299f..a1b4268ba8 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -35,6 +35,7 @@ #include <sstream> #include "../manager.h" #include "sip/sipvoiplink.h" +#include "sip/sipaccount.h" const char* ConfigurationManager::SERVER_PATH = "/org/sflphone/SFLphone/ConfigurationManager"; @@ -59,8 +60,9 @@ std::map<std::string, std::string> ConfigurationManager::getTlsSettingsDefault( void) { std::map<std::string, std::string> tlsSettingsDefault; + tlsSettingsDefault.insert(std::pair<std::string, std::string>( - TLS_LISTENER_PORT, DEFAULT_SIP_TLS_PORT)); + TLS_LISTENER_PORT, DEFAULT_SIP_TLS_PORT)); tlsSettingsDefault.insert(std::pair<std::string, std::string>( TLS_CA_LIST_FILE, "")); tlsSettingsDefault.insert(std::pair<std::string, std::string>( @@ -93,34 +95,24 @@ std::map<std::string, std::string> ConfigurationManager::getIp2IpDetails(void) { std::map<std::string, std::string> ip2ipAccountDetails; - ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ACCOUNT_ID, - IP2IP_PROFILE)); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - SRTP_KEY_EXCHANGE, Manager::instance().getConfigString( - IP2IP_PROFILE, SRTP_KEY_EXCHANGE))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>(SRTP_ENABLE, - Manager::instance().getConfigString(IP2IP_PROFILE, SRTP_ENABLE))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - SRTP_RTP_FALLBACK, Manager::instance().getConfigString( - IP2IP_PROFILE, SRTP_RTP_FALLBACK))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - ZRTP_DISPLAY_SAS, Manager::instance().getConfigString( - IP2IP_PROFILE, ZRTP_DISPLAY_SAS))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - ZRTP_HELLO_HASH, Manager::instance().getConfigString(IP2IP_PROFILE, - ZRTP_HELLO_HASH))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - ZRTP_NOT_SUPP_WARNING, Manager::instance().getConfigString( - IP2IP_PROFILE, ZRTP_NOT_SUPP_WARNING))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - ZRTP_DISPLAY_SAS_ONCE, Manager::instance().getConfigString( - IP2IP_PROFILE, ZRTP_DISPLAY_SAS_ONCE))); - - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - LOCAL_INTERFACE, Manager::instance().getConfigString(IP2IP_PROFILE, - LOCAL_INTERFACE))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>(LOCAL_PORT, - Manager::instance().getConfigString(IP2IP_PROFILE, LOCAL_PORT))); + SIPAccount *sipaccount = (SIPAccount *)Manager::instance().getAccount(IP2IP_PROFILE); + + if(!sipaccount) { + _error("ConfigurationManager: could not find account"); + return ip2ipAccountDetails; + } + + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ACCOUNT_ID, IP2IP_PROFILE)); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(SRTP_KEY_EXCHANGE, sipaccount->getSrtpKeyExchange())); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(SRTP_ENABLE, sipaccount->getSrtpEnable() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(SRTP_RTP_FALLBACK, sipaccount->getSrtpFallback() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS, sipaccount->getZrtpDisplaySas() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ZRTP_HELLO_HASH, sipaccount->getZrtpHelloHash() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ZRTP_NOT_SUPP_WARNING, sipaccount->getZrtpNotSuppWarning() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS_ONCE, sipaccount->getZrtpDiaplaySasOnce() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(LOCAL_INTERFACE, sipaccount->getLocalInterface())); + std::stringstream portstr; portstr << sipaccount->getLocalPort(); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(LOCAL_PORT, portstr.str())); std::map<std::string, std::string> tlsSettings; tlsSettings = getTlsSettings(IP2IP_PROFILE); @@ -136,66 +128,39 @@ void ConfigurationManager::setIp2IpDetails(const std::map<std::string, std::map<std::string, std::string> map_cpy = details; std::map<std::string, std::string>::iterator it; - it = map_cpy.find(LOCAL_INTERFACE); + SIPAccount *sipaccount = (SIPAccount *)Manager::instance().getAccount(IP2IP_PROFILE); - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, LOCAL_INTERFACE, - it->second); + if(!sipaccount) { + _error("ConfigurationManager: could not find account"); } + - it = map_cpy.find(LOCAL_PORT); + it = map_cpy.find(LOCAL_INTERFACE); + if (it != details.end()) sipaccount->setLocalInterface(it->second); - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, LOCAL_PORT, it->second); - } + it = map_cpy.find(LOCAL_PORT); + if (it != details.end()) sipaccount->setLocalPort(atoi(it->second.data())); it = map_cpy.find(SRTP_ENABLE); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, SRTP_ENABLE, it->second); - } + if (it != details.end()) sipaccount->setSrtpEnable((it->second == "true")); it = map_cpy.find(SRTP_RTP_FALLBACK); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, SRTP_RTP_FALLBACK, - it->second); - } + if (it != details.end()) sipaccount->setSrtpFallback((it->second == "true")); it = map_cpy.find(SRTP_KEY_EXCHANGE); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, SRTP_KEY_EXCHANGE, - it->second); - } + if (it != details.end()) sipaccount->setSrtpKeyExchange(it->second); it = map_cpy.find(ZRTP_DISPLAY_SAS); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_DISPLAY_SAS, - it->second); - } + if (it != details.end()) sipaccount->setZrtpDisplaySas((it->second == "true")); it = map_cpy.find(ZRTP_NOT_SUPP_WARNING); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_NOT_SUPP_WARNING, - it->second); - } + if (it != details.end()) sipaccount->setZrtpNotSuppWarning((it->second == "true")); it = map_cpy.find(ZRTP_HELLO_HASH); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_HELLO_HASH, - it->second); - } + if (it != details.end()) sipaccount->setZrtpHelloHash((it->second == "true")); it = map_cpy.find(ZRTP_DISPLAY_SAS_ONCE); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_DISPLAY_SAS_ONCE, - it->second); - } + if (it != details.end()) sipaccount->setZrtpDiaplaySasOnce((it->second == "true")); setTlsSettings(IP2IP_PROFILE, details); @@ -214,129 +179,81 @@ std::map<std::string, std::string> ConfigurationManager::getTlsSettings( std::map<std::string, std::string> tlsSettings; - // SIPAccount *sipaccount - - tlsSettings.insert(std::pair<std::string, std::string>(TLS_LISTENER_PORT, - Manager::instance().getConfigString(section, TLS_LISTENER_PORT))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_ENABLE, - Manager::instance().getConfigString(section, TLS_ENABLE))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_CA_LIST_FILE, - Manager::instance().getConfigString(section, TLS_CA_LIST_FILE))); - tlsSettings.insert(std::pair<std::string, std::string>( - TLS_CERTIFICATE_FILE, Manager::instance().getConfigString(section, - TLS_CERTIFICATE_FILE))); - tlsSettings.insert(std::pair<std::string, std::string>( - TLS_PRIVATE_KEY_FILE, Manager::instance().getConfigString(section, - TLS_PRIVATE_KEY_FILE))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_PASSWORD, - Manager::instance().getConfigString(section, TLS_PASSWORD))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_METHOD, - Manager::instance().getConfigString(section, TLS_METHOD))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_CIPHERS, - Manager::instance().getConfigString(section, TLS_CIPHERS))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_SERVER_NAME, - Manager::instance().getConfigString(section, TLS_SERVER_NAME))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_VERIFY_SERVER, - Manager::instance().getConfigString(section, TLS_VERIFY_SERVER))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_VERIFY_CLIENT, - Manager::instance().getConfigString(section, TLS_VERIFY_CLIENT))); - tlsSettings.insert(std::pair<std::string, std::string>( - TLS_REQUIRE_CLIENT_CERTIFICATE, - Manager::instance().getConfigString(section, - TLS_REQUIRE_CLIENT_CERTIFICATE))); - tlsSettings.insert(std::pair<std::string, std::string>( - TLS_NEGOTIATION_TIMEOUT_SEC, Manager::instance().getConfigString( - section, TLS_NEGOTIATION_TIMEOUT_SEC))); - tlsSettings.insert(std::pair<std::string, std::string>( - TLS_NEGOTIATION_TIMEOUT_MSEC, Manager::instance().getConfigString( - section, TLS_NEGOTIATION_TIMEOUT_MSEC))); + SIPAccount *sipaccount = (SIPAccount *)Manager::instance().getAccount(IP2IP_PROFILE); + + if(!sipaccount) + return tlsSettings; + + std::stringstream portstr; portstr << sipaccount->getTlsListenerPort(); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_LISTENER_PORT, portstr.str())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_ENABLE, sipaccount->getTlsEnable())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_CA_LIST_FILE, sipaccount->getTlsCaListFile())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_CERTIFICATE_FILE, sipaccount->getTlsCertificateFile())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_PRIVATE_KEY_FILE, sipaccount->getTlsPrivateKeyFile())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_PASSWORD, sipaccount->getTlsPassword())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_METHOD, sipaccount->getTlsMethod())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_CIPHERS, sipaccount->getTlsCiphers())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_SERVER_NAME, sipaccount->getTlsServerName())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_VERIFY_SERVER, sipaccount->getTlsVerifyServer() ? "true" : "false")); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_VERIFY_CLIENT, sipaccount->getTlsVerifyClient() ? "true" : "false")); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_REQUIRE_CLIENT_CERTIFICATE, sipaccount->getTlsRequireClientCertificate() ? "true" : "false")); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_SEC, sipaccount->getTlsNegotiationTimeoutSec())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_MSEC, sipaccount->getTlsNegotiationTimeoutMsec())); + return tlsSettings; } void ConfigurationManager::setTlsSettings(const std::string& section, const std::map<std::string, std::string>& details) { + std::map<std::string, std::string> map_cpy = details; std::map<std::string, std::string>::iterator it; - it = map_cpy.find(TLS_LISTENER_PORT); - if (it != details.end()) { - Manager::instance().setConfig(section, TLS_LISTENER_PORT, it->second); + SIPAccount * sipaccount = (SIPAccount *)Manager::instance().getAccount(IP2IP_PROFILE); + + if(!sipaccount) { + _debug("ConfigurationManager: Error: No valid account in set TLS settings"); + return; } - it = map_cpy.find(TLS_ENABLE); + it = map_cpy.find(TLS_LISTENER_PORT); + if (it != details.end()) sipaccount->setTlsListenerPort(atoi(it->second.data())); - if (it != details.end()) { - Manager::instance().setConfig(section, TLS_ENABLE, it->second); - } + it = map_cpy.find(TLS_ENABLE); + if (it != details.end()) sipaccount->setTlsEnable(it->second); it = map_cpy.find(TLS_CA_LIST_FILE); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_CA_LIST_FILE, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsCaListFile(it->second); it = map_cpy.find(TLS_CERTIFICATE_FILE); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_CERTIFICATE_FILE, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsCertificateFile(it->second); it = map_cpy.find(TLS_PRIVATE_KEY_FILE); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_PRIVATE_KEY_FILE, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsPrivateKeyFile(it->second); it = map_cpy.find(TLS_PASSWORD); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_PASSWORD, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsPassword(it->second); it = map_cpy.find(TLS_METHOD); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_METHOD, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsMethod(it->second); it = map_cpy.find(TLS_CIPHERS); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_CIPHERS, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsCiphers(it->second); it = map_cpy.find(TLS_SERVER_NAME); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_SERVER_NAME, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsServerName(it->second); it = map_cpy.find(TLS_VERIFY_CLIENT); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_VERIFY_CLIENT, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsVerifyClient((it->second == "true") ? true : false); it = map_cpy.find(TLS_REQUIRE_CLIENT_CERTIFICATE); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_REQUIRE_CLIENT_CERTIFICATE, - it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsRequireClientCertificate((it->second == "true") ? true : false); it = map_cpy.find(TLS_NEGOTIATION_TIMEOUT_SEC); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_NEGOTIATION_TIMEOUT_SEC, - it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsNegotiationTimeoutSec(it->second); it = map_cpy.find(TLS_NEGOTIATION_TIMEOUT_MSEC); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_NEGOTIATION_TIMEOUT_MSEC, - it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsNegotiationTimeoutMsec(it->second); Manager::instance().saveConfig(); -- GitLab From 303c50f2495597ea6036e814751021085e455455 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 9 Jul 2010 18:56:21 -0400 Subject: [PATCH 153/197] [#3946] Fix credential count in configuration manager --- sflphone-common/src/dbus/configurationmanager.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index a1b4268ba8..9eb424f0e0 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -292,15 +292,17 @@ std::map<std::string, std::string> ConfigurationManager::getCredential( int32_t ConfigurationManager::getNumberOfCredential( const std::string& accountID) { - return Manager::instance().getConfigInt(accountID, CONFIG_CREDENTIAL_NUMBER); + + SIPAccount *sipaccount = (SIPAccount *)Manager::instance().getAccount(accountID); + return sipaccount->getCredentialCount(); } void ConfigurationManager::setNumberOfCredential(const std::string& accountID, const int32_t& number) { - if (accountID != AccountNULL || !accountID.empty()) { - Manager::instance().setConfig(accountID, CONFIG_CREDENTIAL_NUMBER, - number); - } + if (accountID != AccountNULL || !accountID.empty()) { + SIPAccount *sipaccount = (SIPAccount *)Manager::instance().getAccount(accountID); + sipaccount->setCredentialCount(number); + } } void ConfigurationManager::setCredential(const std::string& accountID, -- GitLab From 01f62b0266ef963ffcdb752263b6c82d567181e1 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 12 Jul 2010 08:46:45 -0400 Subject: [PATCH 154/197] [#3649] Remove gconf parameters from configuration manager --- .../dbus/configurationmanager-introspec.xml | 210 ------------------ .../src/dbus/configurationmanager.cpp | 80 +------ .../src/dbus/configurationmanager.h | 31 +-- 3 files changed, 13 insertions(+), 308 deletions(-) mode change 100644 => 100755 sflphone-common/src/dbus/configurationmanager-introspec.xml mode change 100644 => 100755 sflphone-common/src/dbus/configurationmanager.cpp mode change 100644 => 100755 sflphone-common/src/dbus/configurationmanager.h diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml old mode 100644 new mode 100755 index 19e0590b34..75b3413d66 --- a/sflphone-common/src/dbus/configurationmanager-introspec.xml +++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml @@ -633,21 +633,6 @@ </arg> </method> - <!-- - <method name="setNotify" tp:name-for-bindings="setNotify"> - <tp:docstring> - </tp:docstring> - </method> - - <method name="getNotify" tp:name-for-bindings="getNotify"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="level" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - --> <method name="setMailNotify" tp:name-for-bindings="setMailNotify"> <tp:docstring> </tp:docstring> @@ -661,71 +646,7 @@ </tp:docstring> </arg> </method> - <!-- - <method name="getDialpad" tp:name-for-bindings="getDialpad"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setDialpad" tp:name-for-bindings="setDialpad"> - <tp:docstring> - </tp:docstring> - <arg type="b" name="display" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getSearchbar" tp:name-for-bindings="getSearchbar"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setSearchbar" tp:name-for-bindings="setSearchbar"> - <tp:docstring> - </tp:docstring> - </method> - <method name="setHistoryEnabled" tp:name-for-bindings="setHistoryEnabled"> - <tp:docstring> - </tp:docstring> - </method> - - <method name="getHistoryEnabled" tp:name-for-bindings="getHistoryEnabled"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getVolumeControls" tp:name-for-bindings="getVolumeControls"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setVolumeControls" tp:name-for-bindings="setVolumeControls"> - <tp:docstring> - </tp:docstring> - <arg type="b" name="display" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - --> <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit"> <tp:docstring> @@ -744,137 +665,6 @@ </tp:docstring> </arg> </method> - <!-- - <method name="startHidden" tp:name-for-bindings="startHidden"> - <tp:docstring> - </tp:docstring> - </method> - - <method name="isStartHidden" tp:name-for-bindings="isStartHidden"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="popupMode" tp:name-for-bindings="popupMode"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="switchPopupMode" tp:name-for-bindings="switchPopupMode"> - <tp:docstring> - </tp:docstring> - </method> - --> - - <method name="getWindowWidth" tp:name-for-bindings="getWindowWidth"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="i" name="width" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getWindowHeight" tp:name-for-bindings="getWindowHeight"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="i" name="height" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setWindowWidth" tp:name-for-bindings="setWindowWidth"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="i" name="width" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setWindowHeight" tp:name-for-bindings="setWindowHeight"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="i" name="height" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getWindowPositionX" tp:name-for-bindings="getWindowPositionX"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="i" name="posX" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setWindowPositionX" tp:name-for-bindings="setWindowPositionX"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="i" name="posX" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getWindowPositionY" tp:name-for-bindings="getWindowPositionY"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="i" name="posY" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setWindowPositionY" tp:name-for-bindings="setWindowPositionY"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="i" name="posY" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="enableStatusIcon" tp:name-for-bindings="enableStatusIcon"> - <tp:docstring> - Allow SFLphone icon to be displayed in system tray - </tp:docstring> - <arg type="s" name="value" direction="in"> - <tp:docstring> - true/false - </tp:docstring> - </arg> - </method> - - <method name="isStatusIconEnabled" tp:name-for-bindings="isStatusIconEnabled"> - <tp:docstring> - Test if SFLphone icon is displayed in system tray. - </tp:docstring> - <arg type="s" name="value" direction="out"> - <tp:docstring> - true/false - </tp:docstring> - </arg> - </method> <!-- Addressbook configuration --> diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp old mode 100644 new mode 100755 index 9eb424f0e0..f09c743fbd --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -270,22 +270,20 @@ std::map<std::string, std::string> ConfigurationManager::getCredential( streamOut << index; credentialIndex = streamOut.str(); + SIPAccount *sipaccount = (SIPAccount *)Manager::instance().getAccount(accountID); + + std::string section = std::string("Credential") + std::string(":") + accountID + std::string(":") + credentialIndex; std::map<std::string, std::string> credentialInformation; - std::string username = Manager::instance().getConfigString(section, - USERNAME); - std::string password = Manager::instance().getConfigString(section, - PASSWORD); - std::string realm = Manager::instance().getConfigString(section, REALM); - - credentialInformation.insert(std::pair<std::string, std::string>(USERNAME, - username)); - credentialInformation.insert(std::pair<std::string, std::string>(PASSWORD, - password)); - credentialInformation.insert(std::pair<std::string, std::string>(REALM, - realm)); + std::string username = sipaccount->getUsername(); + std::string password = sipaccount->getPassword(); + std::string realm = sipaccount->getRealm(); + + credentialInformation.insert(std::pair<std::string, std::string>(USERNAME, username)); + credentialInformation.insert(std::pair<std::string, std::string>(PASSWORD, password)); + credentialInformation.insert(std::pair<std::string, std::string>(REALM, realm)); return credentialInformation; } @@ -520,17 +518,11 @@ std::vector<std::string> ConfigurationManager::getRecordDeviceList() { } bool ConfigurationManager::isMd5CredentialHashing(void) { - bool isEnabled = Manager::instance().getConfigBool(PREFERENCES, - CONFIG_MD5HASH); - return isEnabled; + return Manager::instance().preferences.getMd5Hash(); } void ConfigurationManager::setMd5CredentialHashing(const bool& enabled) { - if (enabled) { - Manager::instance().setConfig(PREFERENCES, CONFIG_MD5HASH, TRUE_STR); - } else { - Manager::instance().setConfig(PREFERENCES, CONFIG_MD5HASH, FALSE_STR); - } + Manager::instance().preferences.setMd5Hash(enabled); } int32_t ConfigurationManager::isIax2Enabled(void) { @@ -720,45 +712,6 @@ std::vector<std::string> ConfigurationManager::getAllIpInterfaceByName(void) { return vector; } -int32_t ConfigurationManager::getWindowWidth(void) { - - return Manager::instance().getConfigInt(PREFERENCES, WINDOW_WIDTH); -} - -int32_t ConfigurationManager::getWindowHeight(void) { - - return Manager::instance().getConfigInt(PREFERENCES, WINDOW_HEIGHT); -} - -void ConfigurationManager::setWindowWidth(const int32_t& width) { - - Manager::instance().setConfig(PREFERENCES, WINDOW_WIDTH, width); -} - -void ConfigurationManager::setWindowHeight(const int32_t& height) { - - Manager::instance().setConfig(PREFERENCES, WINDOW_HEIGHT, height); -} - -int32_t ConfigurationManager::getWindowPositionX(void) { - - return Manager::instance().getConfigInt(PREFERENCES, WINDOW_POSITION_X); -} - -int32_t ConfigurationManager::getWindowPositionY(void) { - - return Manager::instance().getConfigInt(PREFERENCES, WINDOW_POSITION_Y); -} - -void ConfigurationManager::setWindowPositionX(const int32_t& posX) { - - Manager::instance().setConfig(PREFERENCES, WINDOW_POSITION_X, posX); -} - -void ConfigurationManager::setWindowPositionY(const int32_t& posY) { - - Manager::instance().setConfig(PREFERENCES, WINDOW_POSITION_Y, posY); -} std::map<std::string, int32_t> ConfigurationManager::getShortcuts() { @@ -791,12 +744,3 @@ void ConfigurationManager::setShortcuts( Manager::instance().saveConfig(); } -void ConfigurationManager::enableStatusIcon (const std::string& value) { - - Manager::instance ().setConfig (PREFERENCES, SHOW_STATUSICON, value); -} - -std::string ConfigurationManager::isStatusIconEnabled (void) { - - return Manager::instance ().getConfigString (PREFERENCES, SHOW_STATUSICON); -} diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h old mode 100644 new mode 100755 index c33ae08296..9dc33d0591 --- a/sflphone-common/src/dbus/configurationmanager.h +++ b/sflphone-common/src/dbus/configurationmanager.h @@ -109,43 +109,14 @@ public: void setRingtoneChoice( const std::string& tone ); std::string getRecordPath( void ); void setRecordPath(const std::string& recPath ); - /* - int32_t getDialpad( void ); - void setDialpad (const bool& display); - int32_t getSearchbar( void ); - void setSearchbar( void ); - */ + void setHistoryLimit( const int32_t& days); int32_t getHistoryLimit (void); - /* - void setHistoryEnabled (void); - std::string getHistoryEnabled (void); - - int32_t getVolumeControls( void ); - void setVolumeControls (const bool& display); - int32_t isStartHidden( void ); - void startHidden( void ); - int32_t popupMode( void ); - void switchPopupMode( void ); - int32_t getNotify( void ); - void setNotify( void ); - */ int32_t getMailNotify( void ); void setMailNotify( void ); - int32_t getWindowWidth (void); - int32_t getWindowHeight (void); - void setWindowWidth (const int32_t& width); - void setWindowHeight (const int32_t& height); - int32_t getWindowPositionX (void); - int32_t getWindowPositionY (void); - void setWindowPositionX (const int32_t& posX); - void setWindowPositionY (const int32_t& posY); - - void enableStatusIcon (const std::string&); - std::string isStatusIconEnabled (void); std::map<std::string, int32_t> getAddressbookSettings (void); void setAddressbookSettings (const std::map<std::string, int32_t>& settings); -- GitLab From 6b5b63f1aea0bc71a57f67bdeafa3f48449c5e29 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 12 Jul 2010 08:47:35 -0400 Subject: [PATCH 155/197] [#3649] Update sipvoiplink with new configuration --- sflphone-common/src/sip/sipaccount.cpp | 40 +++++++++++++++---------- sflphone-common/src/sip/sipaccount.h | 19 ++++++++++-- sflphone-common/src/sip/sipvoiplink.cpp | 20 ++++++------- 3 files changed, 49 insertions(+), 30 deletions(-) mode change 100644 => 100755 sflphone-common/src/sip/sipaccount.cpp mode change 100644 => 100755 sflphone-common/src/sip/sipvoiplink.cpp diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp old mode 100644 new mode 100755 index 204fc845be..d9ee027aa9 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -36,10 +36,22 @@ #include <pwd.h> #include <sstream> +// CredentialItem::CredentialItem() {} + +// CredentialItem::~CredentialItem() {} + Credentials::Credentials() : credentialCount(0) {} Credentials::~Credentials() {} +CredentialItem *Credentials::getCredential(int index) +{ + if((index >= 0) && (index < credentialCount)) + return &(credentialArray[index]); + else + return NULL; +} + void Credentials::serialize(Conf::YamlEmitter *emitter) { @@ -97,7 +109,6 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _tlsEnabled(false) , _stunEnabled(false) // , _routeSet("") - // , _realm("") , _authenticationUsename("") // , _tlsListenerPort("5061") , _srtpEnabled(false) @@ -308,6 +319,8 @@ void SIPAccount::unserialize(Conf::MappingNode *map) credMap = (Conf::MappingNode *)(map->getValue(credKey)); credentials.unserialize(credMap); + _credentialCount = credentials.getCredentialCount(); + val = (Conf::ScalarNode *)(map->getValue(displayNameKey)); if(val) { _displayName = val->getValue(); val = NULL; } @@ -482,10 +495,6 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det find_in_map(AUTHENTICATION_USERNAME, authenticationName) find_in_map(USERAGENT, ua_name) - // setConfig(accountID, REALM, realm); - // setConfig(accountID, USERAGENT, ua_name); - // setConfig(accountID, AUTHENTICATION_USERNAME, authenticationName); - setUseragent(ua_name); // srtp settings @@ -557,8 +566,7 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det } else { hash = Manager::instance().computeMd5HashFromCredential(authenticationName, password, realm); } - - // setConfig(accountID, PASSWORD, hash); + setPassword(hash); } } @@ -613,9 +621,9 @@ std::map<std::string, std::string> SIPAccount::getAccountDetails() a.insert(std::pair<std::string, std::string>(ROUTESET, getRouteSet())); a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_RESOLVE_ONCE, isResolveOnce() ? "true" : "false")); - // a.insert(std::pair<std::string, std::string>(REALM, account-> + a.insert(std::pair<std::string, std::string>(REALM, _realm)); a.insert(std::pair<std::string, std::string>(USERAGENT, getUseragent())); - // a.insert(std::pair<std::string, std::string>(AUTHENTICATION_USERNAME, getConfigString(accountID, AUTHENTICATION_USERNAME))); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_REGISTRATION_EXPIRE, getRegistrationExpire())); a.insert(std::pair<std::string, std::string>(LOCAL_INTERFACE, getLocalInterface())); a.insert(std::pair<std::string, std::string>(PUBLISHED_SAMEAS_LOCAL, getPublishedSameasLocal() ? "true" : "false")); @@ -697,8 +705,10 @@ int SIPAccount::initCredential (void) // Use authentication username if provided if (!_authenticationUsername.empty()) { + _debug("Use credential authentication name -------------------------------------"); cred_info[0].username = pj_str (strdup (_authenticationUsername.c_str())); } else { + _debug("Use credential uername name -------------------------------------"); cred_info[0].username = pj_str (strdup (_username.c_str())); } @@ -727,6 +737,7 @@ int SIPAccount::initCredential (void) int i; for (i = 1; i < credentialCount; i++) { + _debug("--------------------------------------- Not supposed to have any credential"); std::string credentialIndex; std::stringstream streamOut; streamOut << i - 1; @@ -783,7 +794,7 @@ int SIPAccount::registerVoIPLink() initCredential(); // Init TLS settings if the user wants to use TLS - bool tlsEnabled = false;// Manager::instance().getConfigBool (_accountID, TLS_ENABLE); + bool tlsEnabled = false; if (tlsEnabled) { _transportType = PJSIP_TRANSPORT_TLS; @@ -791,7 +802,7 @@ int SIPAccount::registerVoIPLink() } // Init STUN settings for this account if the user selected it - bool stunEnabled = _stunEnabled; // Manager::instance().getConfigBool (_accountID, STUN_ENABLE); + bool stunEnabled = _stunEnabled; if (stunEnabled) { _transportType = PJSIP_TRANSPORT_START_OTHER; @@ -864,7 +875,7 @@ void SIPAccount::initTlsConfiguration (void) } // TLS listener is unique and should be only modified through IP2IP_PROFILE - // std::string tlsPortStr = Manager::instance().getConfigString(_accountID, TLS_LISTENER_PORT); + // setTlsListenerPort(atoi(tlsPortStr.c_str())); setTlsListenerPort(atoi(_tlsPortStr.c_str())); @@ -896,8 +907,7 @@ void SIPAccount::initStunConfiguration (void) size_t pos; std::string stunServer, serverName, serverPort; - stunServer = _stunServer; // Manager::instance().getConfigString (_accountID, STUN_SERVER); - + stunServer = _stunServer; // Init STUN socket pos = stunServer.find (':'); @@ -1116,8 +1126,6 @@ std::string SIPAccount::getContactHeader (const std::string& address, const std: transport = ""; } - // _displayName = Manager::instance().getConfigString (_accountID, DISPLAY_NAME); - _debug ("Display Name: %s", _displayName.c_str()); int len = pj_ansi_snprintf (contact, PJSIP_MAX_URL_SIZE, diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 807c674774..70cad3af78 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -123,13 +123,20 @@ class SipAccountException : public std::exception }; +class CredentialItem +{ + public: + + std::string username; + std::string password; + std::string realm; +}; + class Credentials : public Serializable { public: - typedef std::map<std::string, std::string> CredentialMap; - Credentials(); ~Credentials(); @@ -141,11 +148,14 @@ class Credentials : public Serializable int getCredentialCount(void) { return credentialCount; } void setCredentialCount(int count) { credentialCount = count; } + void setNewCredential(std::string username, std::string password, std::string realm); + CredentialItem *getCredential(int index); + private: int credentialCount; - CredentialMap credentialMap; + CredentialItem credentialArray[10]; }; @@ -463,6 +473,9 @@ class SIPAccount : public Account void setZrtpHelloHash(bool hellohash) { _zrtpHelloHash = hellohash; } // void setSrtpKeyExchange + std::string getRealm(void) { return _realm; } + void setRealm(std::string r) { _realm = r; } + std::string getTlsEnable(void) {return _tlsEnable; } void setTlsEnable(std::string enabl) { _tlsEnable = enabl; } diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp old mode 100644 new mode 100755 index b89e7530f7..5a92fcb49d --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -450,8 +450,7 @@ std::string SIPVoIPLink::get_useragent_name (const AccountID& id) SIPAccount *account = (SIPAccount *)Manager::instance().getAccount(id); std::ostringstream useragent; - - // useragent << Manager::instance ().getConfigString (id, USERAGENT); + useragent << account->getUseragent(); if (useragent.str() == "sflphone" || useragent.str() == "") useragent << "/" << SFLPHONED_VERSION; @@ -1346,7 +1345,6 @@ SIPVoIPLink::dtmfSipInfo(SIPCall *call, char code) duration = Manager::instance().voipPreferences.getPulseLength(); - // Manager::instance().getConfigInt (SIGNALISATION, PULSE_LENGTH); dtmf_body = new char[body_len]; @@ -2569,10 +2567,14 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_ return machineName; } - std::string localaddr(localAddress.ptr, localAddress.slen); - _debug ("SIP: Local address discovered from attached transport: %s", localaddr.c_str()); + std::string localaddr(localAddress.ptr, localAddress.slen); + + if(localaddr == "0.0.0.0") + loadSIPLocalIP (&localaddr); - return std::string (localAddress.ptr, localAddress.slen); + _debug ("SIP: Local address discovered from attached transport: %s", localaddr.c_str()); + + return localaddr; } @@ -3297,7 +3299,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) // if RTPFALLBACK, change RTP session AccountID accountID = Manager::instance().getAccountFromCall (call->getCallId()); SIPAccount *account = (SIPAccount *)Manager::instance().getAccount(accountID); - //if(Manager::instance().getConfigString (accountID, SRTP_RTP_FALLBACK) == "true") + if(account->getSrtpFallback()) call->getAudioRtp()->initAudioRtpSession(call); } @@ -3440,7 +3442,6 @@ void regc_cb (struct pjsip_regc_cbparam *param) out << (expire_value * 2); std::string s = out.str(); - // Manager::instance().setConfig(account->getAccountID(), CONFIG_ACCOUNT_REGISTRATION_EXPIRE, s); account->setRegistrationExpire(s); account->registerVoIPLink(); } @@ -3649,7 +3650,6 @@ mod_on_rx_request (pjsip_rx_data *rdata) /******************************************* URL HOOK *********************************************/ - // if (Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_ENABLED) == "1") { if (Manager::instance().hookPreference.getSipEnabled()) { _debug("UserAgent: Set sip url hooks"); @@ -3658,13 +3658,11 @@ mod_on_rx_request (pjsip_rx_data *rdata) header_value = fetch_header_value (rdata->msg_info.msg, Manager::instance().hookPreference.getUrlSipField()); - // Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_FIELD)); if (header_value.size () < header_value.max_size()) { if (header_value!="") { urlhook->addAction (header_value, Manager::instance().hookPreference.getUrlCommand()); - //Manager::instance().getConfigString (HOOKS, URLHOOK_COMMAND)); } } else throw length_error ("UserAgent: Url exceeds std::string max_size"); -- GitLab From 91ed7d012323e9ed8ca0e0a0edf2259b696aecc2 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 12 Jul 2010 08:48:23 -0400 Subject: [PATCH 156/197] [#3649] Update Managerimpl with new configuration --- sflphone-common/src/managerimpl.cpp | 294 +++--------------- .../src/managerimpl_registration.cpp | 9 +- 2 files changed, 49 insertions(+), 254 deletions(-) mode change 100644 => 100755 sflphone-common/src/managerimpl.cpp mode change 100644 => 100755 sflphone-common/src/managerimpl_registration.cpp diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp old mode 100644 new mode 100755 index 89a3be32c1..95d3e091bf --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -137,7 +137,7 @@ void ManagerImpl::init () { unsigned int sampleRate = audiolayer->getSampleRate(); _debugInit ("Manager: Load telephone tone"); - std::string country = preferences.getZoneToneChoice(); // getConfigString(PREFERENCES, ZONE_TONE); + std::string country = preferences.getZoneToneChoice(); _telephoneTone = new TelephoneTone(country, sampleRate); _debugInit ("Manager: Loading DTMF key"); @@ -145,7 +145,6 @@ void ManagerImpl::init () { } // Load the history - // _history->load_history(getConfigInt(PREFERENCES, CONFIG_HISTORY_LIMIT)); _history->load_history(preferences.getHistoryLimit()); } @@ -214,11 +213,6 @@ bool ManagerImpl::outgoingCall (const std::string& account_id, CallID current_call_id = getCurrentCallId(); - /* - if (getConfigString(HOOKS, PHONE_NUMBER_HOOK_ENABLED) == "1") - _cleaner->set_phone_number_prefix(getConfigString(HOOKS, - PHONE_NUMBER_HOOK_ADD_PREFIX)); - */ if(hookPreference.getNumberEnabled()) _cleaner->set_phone_number_prefix(hookPreference.getNumberAddPrefix()); else @@ -1413,8 +1407,8 @@ void ManagerImpl::removeStream (const CallID& call_id) { //THREAD=Main bool ManagerImpl::saveConfig (void) { _debug ("Saving Configuration to XDG directory %s ... ", _path.c_str()); - audioPreference.setVolumemic(getMicVolume()); // setConfig(AUDIO, VOLUME_SPKR, getSpkrVolume()); - audioPreference.setVolumespkr(getSpkrVolume()); // setConfig(AUDIO, VOLUME_MICRO, getMicVolume()); + audioPreference.setVolumemic(getMicVolume()); + audioPreference.setVolumespkr(getSpkrVolume()); AccountMap::iterator iter = _accountMap.begin(); @@ -1471,7 +1465,7 @@ bool ManagerImpl::playDtmf (char code) { stopTone(); - bool hasToPlayTone = voipPreferences.getPlayDtmf(); // getConfigBool(SIGNALISATION, PLAY_DTMF); + bool hasToPlayTone = voipPreferences.getPlayDtmf(); if (!hasToPlayTone) { _debug ("Manager: playDtmf: Do not have to play a tone..."); @@ -1479,7 +1473,7 @@ bool ManagerImpl::playDtmf (char code) { } // length in milliseconds - pulselen = voipPreferences.getPulseLength(); // getConfigInt(SIGNALISATION, PULSE_LENGTH); + pulselen = voipPreferences.getPulseLength(); if (!pulselen) { _debug ("Manager: playDtmf: Pulse length is not set..."); @@ -1822,7 +1816,7 @@ bool ManagerImpl::playATone (Tone::TONEID toneId) { // _debug ("Manager: Play tone %d", toneId); - hasToPlayTone = voipPreferences.getPlayTones(); // getConfigBool(SIGNALISATION, PLAY_TONES); + hasToPlayTone = voipPreferences.getPlayTones(); if (!hasToPlayTone) return false; @@ -1850,7 +1844,7 @@ bool ManagerImpl::playATone (Tone::TONEID toneId) { void ManagerImpl::stopTone () { bool hasToPlayTone; - hasToPlayTone = voipPreferences.getPlayTones();// getConfigBool(SIGNALISATION, PLAY_TONES); + hasToPlayTone = voipPreferences.getPlayTones(); if (!hasToPlayTone) return; @@ -1913,7 +1907,7 @@ void ManagerImpl::ringtone () { //TODO Comment this because it makes the daemon crashes since the main thread //synchronizes the ringtone thread. - ringchoice = audioPreference.getRingchoice();// getConfigString(AUDIO, RING_CHOICE); + ringchoice = audioPreference.getRingchoice(); //if there is no / inside the path if (ringchoice.find(DIR_SEPARATOR_CH) == std::string::npos) { @@ -2438,7 +2432,6 @@ void ManagerImpl::setAudioDevice (const int index, int streamType) { _audiodriver->getSampleRate(), _audiodriver->getFrameSize(), SFL_PCM_PLAYBACK, alsaplugin); audioPreference.setCardout(index); - // setConfig(AUDIO, ALSA_CARD_ID_OUT, index); break; case SFL_PCM_CAPTURE: _debug("Manager: Set input device"); @@ -2446,14 +2439,12 @@ void ManagerImpl::setAudioDevice (const int index, int streamType) { _audiodriver->getSampleRate(), _audiodriver->getFrameSize(), SFL_PCM_CAPTURE, alsaplugin); audioPreference.setCardin(index); - // setConfig(AUDIO, ALSA_CARD_ID_IN, index); break; case SFL_PCM_RINGTONE: _debug("Manager: Set ringtone device"); _audiodriver->openDevice(_audiodriver->getIndexOut(), _audiodriver->getIndexOut(), index, _audiodriver->getSampleRate(), _audiodriver->getFrameSize(), SFL_PCM_RINGTONE, alsaplugin); - // setConfig(AUDIO, ALSA_CARD_ID_RING, index); audioPreference.setCardring(index); break; default: @@ -2505,16 +2496,10 @@ int ManagerImpl::isIax2Enabled (void) { } int ManagerImpl::isRingtoneEnabled (void) { - // return (getConfigString(PREFERENCES, CONFIG_RINGTONE) == "true") ? 1 : 0; return preferences.getRingtoneEnabled() ? 1 : 0; } void ManagerImpl::ringtoneEnabled (void) { - /* - (getConfigString(PREFERENCES, CONFIG_RINGTONE) == RINGTONE_ENABLED) ? setConfig( - PREFERENCES, CONFIG_RINGTONE, FALSE_STR) - : setConfig(PREFERENCES, CONFIG_RINGTONE, TRUE_STR); - */ preferences.getRingtoneEnabled() ? preferences.setRingtoneEnabled(false) : preferences.setRingtoneEnabled(true); @@ -2522,7 +2507,7 @@ void ManagerImpl::ringtoneEnabled (void) { std::string ManagerImpl::getRingtoneChoice (void) { // we need the absolute path - std::string tone_name = audioPreference.getRingchoice(); // getConfigString(AUDIO, RING_CHOICE); + std::string tone_name = audioPreference.getRingchoice(); std::string tone_path; if (tone_name.find(DIR_SEPARATOR_CH) == std::string::npos) { @@ -2541,78 +2526,26 @@ std::string ManagerImpl::getRingtoneChoice (void) { void ManagerImpl::setRingtoneChoice (const std::string& tone) { // we save the absolute path - // setConfig(AUDIO, RING_CHOICE, tone); audioPreference.setRingchoice(tone); } std::string ManagerImpl::getRecordPath (void) { - return audioPreference.getRecordpath();// getConfigString(AUDIO, RECORD_PATH); + return audioPreference.getRecordpath(); } void ManagerImpl::setRecordPath (const std::string& recPath) { _debug ("ManagerImpl::setRecordPath(%s)! ", recPath.c_str()); audioPreference.setRecordpath(recPath); - // setConfig(AUDIO, RECORD_PATH, recPath); } bool ManagerImpl::getMd5CredentialHashing (void) { - return preferences.getMd5Hash(); // getConfigBool(PREFERENCES, CONFIG_MD5HASH); -} - - -/* -int ManagerImpl::getDialpad (void) { - if (getConfigString(PREFERENCES, CONFIG_DIALPAD) == TRUE_STR) { - return 1; - } else { - return 0; - } -} - - -void ManagerImpl::setDialpad (bool display) { - std::string set; - - display ? set = TRUE_STR : set = FALSE_STR; - // If the value we received is different from the one saved in the config file, save the new value - // Else do nothing - - if ((display && (getConfigString(PREFERENCES, CONFIG_DIALPAD) != TRUE_STR)) - || (!display && (getConfigString(PREFERENCES, CONFIG_DIALPAD) - != FALSE_STR))) - setConfig(PREFERENCES, CONFIG_DIALPAD, set); -} - - -int ManagerImpl::getVolumeControls (void) { - if (getConfigString(PREFERENCES, CONFIG_VOLUME) == TRUE_STR) { - return 1; - } else { - return 0; - } + return preferences.getMd5Hash(); } -void ManagerImpl::setVolumeControls (bool display) { - std::string set; - display ? set = TRUE_STR : set = FALSE_STR; - // If the value we received is different from the one saved in the config file, save the new value - // Else do nothing - - if ((display && (getConfigString(PREFERENCES, CONFIG_VOLUME) != TRUE_STR)) - || (!display && (getConfigString(PREFERENCES, CONFIG_VOLUME) - != FALSE_STR))) - setConfig(PREFERENCES, CONFIG_VOLUME, set); -} -*/ void ManagerImpl::setRecordingCall (const CallID& id) { - /* - _debug ("ManagerImpl::setRecording()! "); - AccountID accountid = getAccountFromCall (id); - - getAccountLink (accountid)->setRecording (id); - */ + AccountID accountid = getAccountFromCall(id); Recordable* rec = (Recordable *) getAccountLink(accountid)->getCall(id); @@ -2623,12 +2556,6 @@ void ManagerImpl::setRecordingCall (const CallID& id) { } bool ManagerImpl::isRecording (const CallID& id) { - /* - _debug ("ManagerImpl::isRecording()! "); - AccountID accountid = getAccountFromCall (id); - - return getAccountLink (accountid)->isRecording (id); - */ AccountID accountid = getAccountFromCall(id); Recordable* rec = (Recordable*) getAccountLink(accountid)->getCall(id); @@ -2636,78 +2563,20 @@ bool ManagerImpl::isRecording (const CallID& id) { return rec->isRecording(); } -/* -void ManagerImpl::startHidden (void) { - (getConfigString(PREFERENCES, CONFIG_START) == START_HIDDEN) ? setConfig( - PREFERENCES, CONFIG_START, FALSE_STR) : setConfig(PREFERENCES, - CONFIG_START, TRUE_STR); -} - -int ManagerImpl::isStartHidden (void) { - return (getConfigBool(PREFERENCES, CONFIG_START) == true) ? 1 : 0; -} - -void ManagerImpl::switchPopupMode (void) { - (getConfigString(PREFERENCES, CONFIG_POPUP) == WINDOW_POPUP) ? setConfig( - PREFERENCES, CONFIG_POPUP, FALSE_STR) : setConfig(PREFERENCES, - CONFIG_POPUP, TRUE_STR); -} -*/ void ManagerImpl::setHistoryLimit (const int& days) { - // setConfig(PREFERENCES, CONFIG_HISTORY_LIMIT, days); preferences.setHistoryLimit(days); } int ManagerImpl::getHistoryLimit (void) { - return preferences.getHistoryLimit(); // getConfigInt(PREFERENCES, CONFIG_HISTORY_LIMIT); -} - -/* -std::string ManagerImpl::getHistoryEnabled (void) { - return getConfigString(PREFERENCES, CONFIG_HISTORY_ENABLED); -} - -void ManagerImpl::setHistoryEnabled (void) { - (getConfigString(PREFERENCES, CONFIG_HISTORY_ENABLED) == TRUE_STR) ? setConfig( - PREFERENCES, CONFIG_HISTORY_ENABLED, FALSE_STR) - : setConfig(PREFERENCES, CONFIG_HISTORY_ENABLED, TRUE_STR); -} - -int ManagerImpl::getSearchbar (void) { - return getConfigInt(PREFERENCES, CONFIG_SEARCHBAR); -} - -void ManagerImpl::setSearchbar (void) { - (getConfigInt(PREFERENCES, CONFIG_SEARCHBAR) == 1) ? setConfig(PREFERENCES, - CONFIG_SEARCHBAR, FALSE_STR) : setConfig(PREFERENCES, - CONFIG_SEARCHBAR, TRUE_STR); -} - -int ManagerImpl::popupMode (void) { - return (getConfigBool(PREFERENCES, CONFIG_POPUP) == true) ? 1 : 0; -} - -int32_t ManagerImpl::getNotify (void) { - return (getConfigBool(PREFERENCES, CONFIG_NOTIFY) == true) ? 1 : 0; -} - -void ManagerImpl::setNotify (void) { - (getConfigString(PREFERENCES, CONFIG_NOTIFY) == NOTIFY_ALL) ? setConfig( - PREFERENCES, CONFIG_NOTIFY, FALSE_STR) : setConfig(PREFERENCES, - CONFIG_NOTIFY, TRUE_STR); + return preferences.getHistoryLimit(); } -*/ int32_t ManagerImpl::getMailNotify (void) { - // return getConfigInt(PREFERENCES, CONFIG_MAIL_NOTIFY); return preferences.getNotifyMails(); } void ManagerImpl::setMailNotify (void) { - // (getConfigString(PREFERENCES, CONFIG_MAIL_NOTIFY) == NOTIFY_ALL) ? setConfig( - // PREFERENCES, CONFIG_MAIL_NOTIFY, FALSE_STR) - // : setConfig(PREFERENCES, CONFIG_MAIL_NOTIFY, TRUE_STR); preferences.getNotifyMails() ? preferences.setNotifyMails(true) : preferences.setNotifyMails(false); } @@ -2728,7 +2597,6 @@ void ManagerImpl::setAudioManager (const int32_t& api) { return; } - // setConfig(PREFERENCES, CONFIG_AUDIO, api); preferences.setAudioApi(api); switchAudioManager(); @@ -2737,7 +2605,6 @@ void ManagerImpl::setAudioManager (const int32_t& api) { } int32_t ManagerImpl::getAudioManager (void) { - //return getConfigInt(PREFERENCES, CONFIG_AUDIO); return preferences.getAudioApi(); } @@ -2772,7 +2639,7 @@ std::string ManagerImpl::getCurrentAudioOutputPlugin (void) { if (alsalayer) return alsalayer -> getAudioPlugin(); else - return audioPreference.getPlugin();// getConfigString(AUDIO, ALSA_PLUGIN); + return audioPreference.getPlugin(); } @@ -2859,19 +2726,16 @@ bool ManagerImpl::initAudioDriver (void) { _debugInit ("AudioLayer Creation"); - // if (getConfigInt(PREFERENCES, CONFIG_AUDIO) == ALSA) { if (preferences.getAudioApi() == ALSA) { _audiodriver = new AlsaLayer(this); _audiodriver->setMainBuffer(&_mainBuffer); } - // } else if (getConfigInt(PREFERENCES, CONFIG_AUDIO) == PULSEAUDIO) { else if(preferences.getAudioApi() == PULSEAUDIO) { if (app_is_running("pulseaudio") == 0) { _audiodriver = new PulseLayer(this); _audiodriver->setMainBuffer(&_mainBuffer); } else { _audiodriver = new AlsaLayer(this); - // setConfig(PREFERENCES, CONFIG_AUDIO, ALSA); preferences.setAudioApi(ALSA); _audiodriver->setMainBuffer(&_mainBuffer); } @@ -2906,13 +2770,13 @@ void ManagerImpl::selectAudioDriver (void) { _debug ("Audio layer type: %i" , layer); /* Retrieve the global devices info from the user config */ - alsaPlugin = audioPreference.getPlugin(); // getConfigString(AUDIO, ALSA_PLUGIN); - numCardIn = audioPreference.getCardin(); //getConfigInt(AUDIO, ALSA_CARD_ID_IN); - numCardOut = audioPreference.getCardout(); //getConfigInt(AUDIO, ALSA_CARD_ID_OUT); - numCardRing = audioPreference.getCardring(); //getConfigInt(AUDIO, ALSA_CARD_ID_RING); - // sampleRate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE); + alsaPlugin = audioPreference.getPlugin(); + numCardIn = audioPreference.getCardin(); + numCardOut = audioPreference.getCardout(); + numCardRing = audioPreference.getCardring(); + sampleRate = _mainBuffer.getInternalSamplingRate(); - frameSize = audioPreference.getFramesize(); //getConfigInt(AUDIO, ALSA_FRAME_SIZE); + frameSize = audioPreference.getFramesize(); /* Only for the ALSA layer, we check the sound card information */ @@ -2922,13 +2786,13 @@ void ManagerImpl::selectAudioDriver (void) { if (!alsalayer -> soundCardIndexExist(numCardIn, SFL_PCM_CAPTURE)) { _debug (" Card with index %i doesn't exist or cannot capture. Switch to 0.", numCardIn); numCardIn = ALSA_DFT_CARD_ID; - audioPreference.setCardin(ALSA_DFT_CARD_ID); // setConfig(AUDIO, ALSA_CARD_ID_IN, ALSA_DFT_CARD_ID); + audioPreference.setCardin(ALSA_DFT_CARD_ID); } if (!alsalayer -> soundCardIndexExist(numCardOut, SFL_PCM_PLAYBACK)) { _debug (" Card with index %i doesn't exist or cannot playback. Switch to 0.", numCardOut); numCardOut = ALSA_DFT_CARD_ID; - audioPreference.setCardout(ALSA_DFT_CARD_ID); // setConfig(AUDIO, ALSA_CARD_ID_OUT, ALSA_DFT_CARD_ID); + audioPreference.setCardout(ALSA_DFT_CARD_ID); } if (!alsalayer->soundCardIndexExist(numCardRing, SFL_PCM_RINGTONE)) { @@ -2962,17 +2826,16 @@ void ManagerImpl::switchAudioManager (void) { type = _audiodriver->getLayerType(); - // samplerate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE); samplerate = _mainBuffer.getInternalSamplingRate(); - framesize = audioPreference.getFramesize();// getConfigInt(AUDIO, ALSA_FRAME_SIZE); + framesize = audioPreference.getFramesize(); _debug ("Mnager: samplerate: %i, framesize %i\n", samplerate, framesize); - alsaPlugin = audioPreference.getPlugin();//getConfigString(AUDIO, ALSA_PLUGIN); + alsaPlugin = audioPreference.getPlugin(); - numCardIn = audioPreference.getCardin();//getConfigInt(AUDIO, ALSA_CARD_ID_IN); - numCardOut = audioPreference.getCardout();// getConfigInt(AUDIO, ALSA_CARD_ID_OUT); - numCardRing = audioPreference.getCardring(); //getConfigInt(AUDIO, ALSA_CARD_ID_RING); + numCardIn = audioPreference.getCardin(); + numCardOut = audioPreference.getCardout(); + numCardRing = audioPreference.getCardring(); _debug ("Manager: Deleting current layer... "); @@ -3041,15 +2904,15 @@ void ManagerImpl::audioSamplingRateChanged (void) { type = _audiodriver->getLayerType(); samplerate = _mainBuffer.getInternalSamplingRate(); - framesize = audioPreference.getFramesize(); // getConfigInt(AUDIO, ALSA_FRAME_SIZE); + framesize = audioPreference.getFramesize(); _debug ("Mnager: samplerate: %i, framesize %i\n", samplerate, framesize); - alsaPlugin = getConfigString(AUDIO, ALSA_PLUGIN); + alsaPlugin = audioPreference.getPlugin(); - numCardIn = audioPreference.getCardin(); // getConfigInt(AUDIO, ALSA_CARD_ID_IN); - numCardOut = audioPreference.getCardout(); // getConfigInt(AUDIO, ALSA_CARD_ID_OUT); - numCardRing = audioPreference.getCardring(); // getConfigInt(AUDIO, ALSA_CARD_ID_RING); + numCardIn = audioPreference.getCardin(); + numCardOut = audioPreference.getCardout(); + numCardRing = audioPreference.getCardring(); _debug ("Manager: Deleting current layer... "); @@ -3097,7 +2960,7 @@ void ManagerImpl::audioSamplingRateChanged (void) { delete _telephoneTone; _debugInit ("Manager: Load telephone tone"); - std::string country = preferences.getZoneToneChoice(); // getConfigString(PREFERENCES, ZONE_TONE); + std::string country = preferences.getZoneToneChoice(); _telephoneTone = new TelephoneTone(country, sampleRate); @@ -3127,8 +2990,6 @@ void ManagerImpl::audioSamplingRateChanged (void) { */ void ManagerImpl::initVolume () { _debugInit ("Initiate Volume"); - // setSpkrVolume(getConfigInt(AUDIO, VOLUME_SPKR)); - // setMicVolume(getConfigInt(AUDIO, VOLUME_MICRO)); setSpkrVolume(audioPreference.getVolumespkr()); setMicVolume(audioPreference.getVolumemic()); } @@ -3156,7 +3017,7 @@ void ManagerImpl::setMicVolume (unsigned short mic_vol) { int ManagerImpl::getLocalIp2IpPort (void) { // The SIP port used for default account (IP to IP) calls= - return preferences.getPortNum(); // getConfigInt(IP2IP_PROFILE, LOCAL_PORT); + return preferences.getPortNum(); } @@ -3317,7 +3178,7 @@ std::string ManagerImpl::getConfigString (const std::string& section, //THREAD=Main bool ManagerImpl::setConfig (const std::string& section, const std::string& name, const std::string& value) { - // _debug ("ManagerImpl::setConfig %s %s %s", section.c_str(), name.c_str(), value.c_str()); + return _config.setConfigTreeItem(section, name, value); } @@ -3332,7 +3193,7 @@ bool ManagerImpl::setConfig (const std::string& section, void ManagerImpl::setAccountsOrder (const std::string& order) { _debug ("Setcreate accounts order : %s", order.c_str()); // Set the new config - // setConfig(PREFERENCES, CONFIG_ACCOUNTS_ORDER, order); + preferences.setAccountOrder(order); } @@ -3591,13 +3452,13 @@ std::string ManagerImpl::addAccount ( setAccountDetails(accountID.str(), details); // Add the newly created account in the account order list - account_list = preferences.getAccountOrder();// getConfigString(PREFERENCES, CONFIG_ACCOUNTS_ORDER); + account_list = preferences.getAccountOrder(); if (account_list != "") { newAccountID += "/"; // Prepend the new account account_list.insert(0, newAccountID); - // setConfig(PREFERENCES, CONFIG_ACCOUNTS_ORDER, account_list); + preferences.setAccountOrder(account_list); } @@ -3618,7 +3479,7 @@ void ManagerImpl::deleteAllCredential (const AccountID& accountID) { SIPAccount *sipaccount = (SIPAccount *)account; - int numberOfCredential = sipaccount->getCredentialCount(); // getConfigInt(accountID, CONFIG_CREDENTIAL_NUMBER); + int numberOfCredential = sipaccount->getCredentialCount(); for (int i = 0; i < numberOfCredential; i++) { std::string credentialIndex; @@ -3632,8 +3493,7 @@ void ManagerImpl::deleteAllCredential (const AccountID& accountID) { } if (accountID.empty() == false) { - // setConfig(accountID, CONFIG_CREDENTIAL_NUMBER, 0); - + sipaccount->setCredentialCount(0); } } @@ -3720,7 +3580,6 @@ std::vector<std::string> ManagerImpl::loadAccountOrder (void) { Conf::Key accountOrder("order"); - // account_list = getConfigString(PREFERENCES, CONFIG_ACCOUNTS_ORDER); account_list = preferences.getAccountOrder(); return unserialize(account_list); @@ -4055,24 +3914,6 @@ std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings () { settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_DISPLAY_PHONE_HOME", addressbookPreference.getHome() ? 1 : 0)); settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_DISPLAY_PHONE_MOBILE", addressbookPreference.getMobile() ? 1 : 0)); - /* - settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_ENABLE", - getConfigInt(ADDRESSBOOK, ADDRESSBOOK_ENABLE))); - settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_MAX_RESULTS", - getConfigInt(ADDRESSBOOK, ADDRESSBOOK_MAX_RESULTS))); - settings.insert(std::pair<std::string, int32_t>( - "ADDRESSBOOK_DISPLAY_CONTACT_PHOTO", getConfigInt(ADDRESSBOOK, - ADDRESSBOOK_DISPLAY_CONTACT_PHOTO))); - settings.insert(std::pair<std::string, int32_t>( - "ADDRESSBOOK_DISPLAY_PHONE_BUSINESS", getConfigInt(ADDRESSBOOK, - ADDRESSBOOK_DISPLAY_PHONE_BUSINESS))); - settings.insert(std::pair<std::string, int32_t>( - "ADDRESSBOOK_DISPLAY_PHONE_HOME", getConfigInt(ADDRESSBOOK, - ADDRESSBOOK_DISPLAY_PHONE_HOME))); - settings.insert(std::pair<std::string, int32_t>( - "ADDRESSBOOK_DISPLAY_PHONE_MOBILE", getConfigInt(ADDRESSBOOK, - ADDRESSBOOK_DISPLAY_PHONE_MOBILE))); - */ return settings; } @@ -4087,21 +3928,6 @@ void ManagerImpl::setAddressbookSettings ( addressbookPreference.setHone((settings.find("ADDRESSBOOK_DISPLAY_PHONE_HOME")->second == 1) ? true : false); addressbookPreference.setMobile((settings.find("ADDRESSBOOK_DISPLAY_PHONE_MOBILE")->second == 1) ? true : false); -/* - setConfig(ADDRESSBOOK, ADDRESSBOOK_ENABLE, (*settings.find( - "ADDRESSBOOK_ENABLE")).second); - setConfig(ADDRESSBOOK, ADDRESSBOOK_MAX_RESULTS, (*settings.find( - "ADDRESSBOOK_MAX_RESULTS")).second); - setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, (*settings.find( - "ADDRESSBOOK_DISPLAY_CONTACT_PHOTO")).second); - setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, (*settings.find( - "ADDRESSBOOK_DISPLAY_PHONE_BUSINESS")).second); - setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_HOME, (*settings.find( - "ADDRESSBOOK_DISPLAY_PHONE_HOME")).second); - setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_MOBILE, (*settings.find( - "ADDRESSBOOK_DISPLAY_PHONE_MOBILE")).second); -*/ - // Write it to the configuration file saveConfig(); } @@ -4110,12 +3936,12 @@ void ManagerImpl::setAddressbookList (const std::vector<std::string>& list) { std::string s = serialize(list); addressbookPreference.setList(s); - // setConfig(ADDRESSBOOK, ADDRESSBOOK_LIST, s); + } std::vector<std::string> ManagerImpl::getAddressbookList (void) { - std::string s = addressbookPreference.getList(); // getConfigString(ADDRESSBOOK, ADDRESSBOOK_LIST); + std::string s = addressbookPreference.getList(); return unserialize(s); } @@ -4131,24 +3957,6 @@ std::map<std::string, std::string> ManagerImpl::getHookSettings () { settings.insert(std::pair<std::string, std::string>("URLHOOK_COMMAND", hookPreference.getUrlCommand())); settings.insert(std::pair<std::string, std::string>("URLHOOK_SIP_FIELD", hookPreference.getUrlSipField())); - /* - settings.insert(std::pair<std::string, std::string>("URLHOOK_SIP_FIELD", - getConfigString(HOOKS, URLHOOK_SIP_FIELD))); - settings.insert(std::pair<std::string, std::string>("URLHOOK_COMMAND", - getConfigString(HOOKS, URLHOOK_COMMAND))); - settings.insert(std::pair<std::string, std::string>("URLHOOK_SIP_ENABLED", - getConfigString(HOOKS, URLHOOK_SIP_ENABLED))); - settings.insert(std::pair<std::string, std::string>("URLHOOK_IAX2_ENABLED", - getConfigString(HOOKS, URLHOOK_IAX2_ENABLED))); - settings.insert(std::pair<std::string, std::string>( - "PHONE_NUMBER_HOOK_ENABLED", getConfigString(HOOKS, - PHONE_NUMBER_HOOK_ENABLED))); - settings.insert(std::pair<std::string, std::string>( - "PHONE_NUMBER_HOOK_ADD_PREFIX", getConfigString(HOOKS, - PHONE_NUMBER_HOOK_ADD_PREFIX))); - - */ - return settings; } @@ -4161,21 +3969,6 @@ void ManagerImpl::setHookSettings (const std::map<std::string, std::string>& set hookPreference.setUrlCommand(settings.find("URLHOOK_COMMAND")->second); hookPreference.setUrlSipField(settings.find("URLHOOK_SIP_FIELD")->second); - /* - setConfig(HOOKS, URLHOOK_SIP_FIELD, - (*settings.find("URLHOOK_SIP_FIELD")).second); - setConfig(HOOKS, URLHOOK_COMMAND, - (*settings.find("URLHOOK_COMMAND")).second); - setConfig(HOOKS, URLHOOK_SIP_ENABLED, - (*settings.find("URLHOOK_SIP_ENABLED")).second); - setConfig(HOOKS, URLHOOK_IAX2_ENABLED, (*settings.find( - "URLHOOK_IAX2_ENABLED")).second); - setConfig(HOOKS, PHONE_NUMBER_HOOK_ENABLED, (*settings.find( - "PHONE_NUMBER_HOOK_ENABLED")).second); - setConfig(HOOKS, PHONE_NUMBER_HOOK_ADD_PREFIX, (*settings.find( - "PHONE_NUMBER_HOOK_ADD_PREFIX")).second); - */ - // Write it to the configuration file saveConfig(); } @@ -4279,8 +4072,7 @@ std::map<std::string, std::string> ManagerImpl::send_history_to_client (void) { void ManagerImpl::receive_history_from_client (std::map<std::string, std::string> history) { - // _history->set_serialized_history(history, Manager::instance().getConfigInt( - // PREFERENCES, CONFIG_HISTORY_LIMIT)); + _history->set_serialized_history(history, preferences.getHistoryLimit());; _history->save_history(); } diff --git a/sflphone-common/src/managerimpl_registration.cpp b/sflphone-common/src/managerimpl_registration.cpp old mode 100644 new mode 100755 index e0605aa936..1329aaa68b --- a/sflphone-common/src/managerimpl_registration.cpp +++ b/sflphone-common/src/managerimpl_registration.cpp @@ -248,13 +248,16 @@ ManagerImpl::sendRegister (const std::string& accountID , const int32_t& enable) { // Update the active field - setConfig (accountID, CONFIG_ACCOUNT_ENABLE, (enable == 1) ? TRUE_STR:FALSE_STR); - Account* acc = getAccount (accountID); + + if(enable == 1) + acc->setEnabled(true); + else + acc->setEnabled(false); + acc->loadConfig(); // Test on the freshly updated value - if (acc->isEnabled()) { // Verify we aren't already registered, then register _debug ("Send register for account %s\n" , accountID.c_str()); -- GitLab From de3706624ae6ecbbdc4270cd73e4cdb5ccc8c7e7 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 12 Jul 2010 08:48:54 -0400 Subject: [PATCH 157/197] [#3649] Update pulseaudio layer with new configuration --- .../src/audio/pulseaudio/pulselayer.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) mode change 100644 => 100755 sflphone-common/src/audio/pulseaudio/pulselayer.cpp diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp old mode 100644 new mode 100755 index 56c2ab8c7b..d86f159bf3 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -519,9 +519,9 @@ bool PulseLayer::createStreams (pa_context* c) // _debug("Device list size %d", getDevicelist()->size()); - std::string playbackDevice = _manager->getConfigString(AUDIO, PULSE_DEVICE_PLAYBACK); - std::string recordDevice = _manager->getConfigString(AUDIO, PULSE_DEVICE_PLAYBACK); - std::string ringtoneDevice = _manager->getConfigString(AUDIO, PULSE_DEVICE_PLAYBACK); + std::string playbackDevice = _manager->audioPreference.getDevicePlayback(); + std::string recordDevice = _manager->audioPreference.getDeviceRecord(); + std::string ringtoneDevice = _manager->audioPreference.getDeviceRingtone(); _debug("Audio: Device stored in config for playback: %s", playbackDevice.c_str()); _debug("Audio: Device stored in config for ringtone: %s", recordDevice.c_str()); @@ -615,8 +615,8 @@ void PulseLayer::closeCaptureStream (void) if (record) { std::string deviceName(pa_stream_get_device_name(record->pulseStream())); - _debug("record device to be stored in config: %s", deviceName.c_str()); - _manager->setConfig(AUDIO, PULSE_DEVICE_RECORD, deviceName); + _debug("Audio: record device to be stored in config: %s", deviceName.c_str()); + _manager->audioPreference.setDeviceRecord(deviceName); delete record; record=NULL; } @@ -627,16 +627,16 @@ void PulseLayer::closePlaybackStream (void) { if (playback) { std::string deviceName(pa_stream_get_device_name(playback->pulseStream())); - _debug("playback device to be stored in config: %s", deviceName.c_str()); - _manager->setConfig(AUDIO, PULSE_DEVICE_PLAYBACK, deviceName); + _debug("Audio: playback device to be stored in config: %s", deviceName.c_str()); + _manager->audioPreference.setDevicePlayback(deviceName); delete playback; playback=NULL; } if(ringtone) { std::string deviceName(pa_stream_get_device_name(ringtone->pulseStream())); - _debug("ringtone device to be stored in config: %s", deviceName.c_str()); - _manager->setConfig(AUDIO, PULSE_DEVICE_RINGTONE, deviceName); + _debug("Audio: ringtone device to be stored in config: %s", deviceName.c_str()); + _manager->audioPreference.setDeviceRingtone(deviceName); delete ringtone; ringtone = NULL; } -- GitLab From 57aba77976dcdb3a9c2e731e51746ea805268a6f Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Mon, 12 Jul 2010 08:49:29 -0400 Subject: [PATCH 158/197] [#3649] Change sample config parameters --- sflphone-common/sequenceParser.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-common/sequenceParser.yml b/sflphone-common/sequenceParser.yml index 88602a0125..48d5b8d777 100755 --- a/sflphone-common/sequenceParser.yml +++ b/sflphone-common/sequenceParser.yml @@ -94,8 +94,8 @@ accounts: alias: sfl-431 username: 431 password: alexandre - hostname: 192.168.50.3 - enable: true + hostname: mtl.savoirfairelinux.net + enable: false type: SIP expire: 3600 interface: default -- GitLab From 09bc72d770b65e8c7381cbb814e87449a0762d4e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 13 Jul 2010 09:09:43 -0400 Subject: [PATCH 159/197] [#3691] Resync buffer during a conference --- sflphone-common/src/audio/mainbuffer.cpp | 49 +++++++++++++++++-- sflphone-common/src/audio/mainbuffer.h | 2 + .../src/audio/pulseaudio/pulselayer.cpp | 17 ++++--- .../src/audio/pulseaudio/pulselayer.h | 2 + 4 files changed, 59 insertions(+), 11 deletions(-) diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 0e34493410..4c15008b0d 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -405,7 +405,9 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID while (iter_id != callid_set->end()) { - size = getDataByID (mixBuffer, toCopy, volume, (CallID) (*iter_id), call_id); + memset(mixBuffer, 0, toCopy); + + size = getDataByID(mixBuffer, toCopy, volume, (CallID) (*iter_id), call_id); if (size > 0) { for (int k = 0; k < nbSmplToCopy; k++) { @@ -462,6 +464,8 @@ int MainBuffer::availForGet (CallID call_id) int nb_bytes; CallIDSet::iterator iter_id = callid_set->begin(); + syncBuffers(call_id); + for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) { nb_bytes = availForGetByID (*iter_id, call_id); @@ -522,7 +526,6 @@ int MainBuffer::discard (int toDiscard, CallID call_id) return toDiscard; } - } @@ -599,6 +602,45 @@ void MainBuffer::flushAllBuffers() } } +void MainBuffer:: syncBuffers(CallID call_id) +{ + + CallIDSet* callid_set = getCallIDSet(call_id); + + if (callid_set == NULL) + return; + + if (callid_set->empty()) { + _debug ("MainBuffer: CallIDSet with ID: \"%s\" is empty!", call_id.c_str()); + return; + } + + if (callid_set->size() == 1) { + // no need to resync, only one session + return; + } + + int nbBuffers = 0; + float mean_nbBytes = 0.0; + + CallIDSet::iterator iter_id = callid_set->begin(); + + + // compute mean nb byte in buffers + for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) { + nbBuffers++; + mean_nbBytes += availForGetByID (*iter_id, call_id); + } + mean_nbBytes = mean_nbBytes / (float) nbBuffers; + + // resync buffers in this conference according to the computed mean + for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) { + + if(availForGetByID (*iter_id, call_id) > (mean_nbBytes + 640)) + discardByID (640, *iter_id, call_id); + } +} + void MainBuffer::stateInfo() { @@ -665,7 +707,4 @@ void MainBuffer::stateInfo() iter_buffer++; } - - - } diff --git a/sflphone-common/src/audio/mainbuffer.h b/sflphone-common/src/audio/mainbuffer.h index 95dd787ea4..9b97a88fc0 100644 --- a/sflphone-common/src/audio/mainbuffer.h +++ b/sflphone-common/src/audio/mainbuffer.h @@ -114,6 +114,8 @@ class MainBuffer { void flushAllBuffers(); void flushDefault(); + + void syncBuffers(CallID call_id); void stateInfo(); diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 56c2ab8c7b..e8294513e2 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -260,6 +260,8 @@ PulseLayer::PulseLayer (ManagerImpl* manager) AudioLayer::_echocancelstate = true; AudioLayer::_noisesuppressstate = true; + byteCounter = 0; + /* captureFile = new ofstream("captureFile", ofstream::binary); captureRsmplFile = new ofstream("captureRsmplFile", ofstream::binary); @@ -902,8 +904,9 @@ void PulseLayer::writeToSpeaker (void) } + // Copy far-end signal in echo canceller to adapt filter coefficient - AudioLayer::_echoCanceller->putData(out, byteToGet); + // AudioLayer::_echoCanceller->putData(out, byteToGet); pa_xfree (out); @@ -971,11 +974,12 @@ void PulseLayer::readFromMic (void) // captureFilterFile->write ((const char *)rsmpl_out, nbSample*sizeof(SFLDataFormat)); // echo cancellation processing - int sampleready = _echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); + // int sampleready = _echoCanceller->processAudio(rsmpl_out, echoCancelledMic, nbSample*sizeof(SFLDataFormat)); // getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); - if(sampleready) - getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); + // if(sampleready) + // getMainBuffer()->putData ( echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); + getMainBuffer()->putData ( rsmpl_out, nbSample*sizeof (SFLDataFormat), 100); pa_xfree (rsmpl_out); @@ -987,10 +991,11 @@ void PulseLayer::readFromMic (void) _audiofilter->processAudio((SFLDataFormat *)data, filter_out, r); // echo cancellation processing - int sampleready = _echoCanceller->processAudio((SFLDataFormat *)filter_out, echoCancelledMic, r); + // int sampleready = _echoCanceller->processAudio((SFLDataFormat *)filter_out, echoCancelledMic, r); // no resampling required - getMainBuffer()->putData (echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); + // getMainBuffer()->putData (echoCancelledMic, sampleready*sizeof (SFLDataFormat), 100); + getMainBuffer()->putData (filter_out, r, 100); pa_xfree(filter_out); } diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.h b/sflphone-common/src/audio/pulseaudio/pulselayer.h index d13c1e6938..047fe84093 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.h +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.h @@ -287,6 +287,8 @@ class PulseLayer : public AudioLayer { // private: + int byteCounter; + public: friend class AudioLayerTest; -- GitLab From aa6dcacae5b6abed847973c06ab4bd04b7b90f96 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 13 Jul 2010 10:56:25 -0400 Subject: [PATCH 160/197] [#2165] Add recording button, setRecording for conference --- sflphone-client-gnome/src/actions.c | 27 +-------- sflphone-client-gnome/src/dbus/dbus.c | 4 +- sflphone-client-gnome/src/uimanager.c | 80 +++++++++++---------------- 3 files changed, 37 insertions(+), 74 deletions(-) diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index 2f57ee5679..44c4a783e9 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -521,16 +521,6 @@ sflphone_off_hold () dbus_unhold_conference(selectedConf); } - /* - if(dbus_get_is_recording(selectedCall)) - { - DEBUG("Currently recording!"); - } - else - { - DEBUG("Not recording currently"); - } - */ } @@ -565,7 +555,7 @@ sflphone_current( callable_obj_t * c ) sflphone_record( callable_obj_t * c ) { if( c->_state != CALL_STATE_HOLD ) - set_timestamp (&c->_time_start); + set_timestamp (&c->_time_start); c->_state = CALL_STATE_RECORD; calltree_update_call(current_calls, c, NULL); update_actions(); @@ -1076,10 +1066,10 @@ sflphone_rec_call() switch(selectedConf->_state) { case CONFERENCE_STATE_ACTIVE_ATACHED: - selectedCall->_state = CONFERENCE_STATE_RECORD; + selectedConf->_state = CONFERENCE_STATE_RECORD; break; case CONFERENCE_STATE_RECORD: - selectedCall->_state = CONFERENCE_STATE_ACTIVE_ATACHED; + selectedConf->_state = CONFERENCE_STATE_ACTIVE_ATACHED; break; default: WARN("Should not happen in sflphone_off_hold ()!"); @@ -1088,9 +1078,6 @@ sflphone_rec_call() } calltree_update_call(current_calls, selectedCall, NULL); update_actions(); - - // gchar* codname = sflphone_get_current_codec_name(); - // DEBUG("sflphone_get_current_codec_name: %s",codname); } void sflphone_fill_codec_list () { @@ -1112,14 +1099,6 @@ void sflphone_fill_codec_list () { } } - /* - if (codec_list_get_size() == 0) { - - // Error message - ERROR ("No audio codecs found"); - dbus_unregister(getpid()); - exit(0); - }*/ } void sflphone_fill_codec_list_per_account (account_t **account) { diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index 9a3cc87dea..9265e1f53d 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -1810,7 +1810,7 @@ dbus_join_conference(const gchar* sel_confID, const gchar* drag_confID) void dbus_set_record(const gchar* id) { - DEBUG("dbus_set_record %s\n", id); + DEBUG("dbus_set_record %s", id); GError* error = NULL; org_sflphone_SFLphone_CallManager_set_recording(callManagerProxy, id, &error); @@ -1823,7 +1823,7 @@ dbus_set_record(const gchar* id) gboolean dbus_get_is_recording(const callable_obj_t * c) { - DEBUG("dbus_get_is_recording %s\n", c->_callID); + DEBUG("dbus_get_is_recording %s", c->_callID); GError* error = NULL; gboolean isRecording; org_sflphone_SFLphone_CallManager_get_is_recording(callManagerProxy, diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c index 8f3a41ca1e..44099f1943 100644 --- a/sflphone-client-gnome/src/uimanager.c +++ b/sflphone-client-gnome/src/uimanager.c @@ -217,52 +217,39 @@ update_actions() case CALL_STATE_DIALING: gtk_action_set_sensitive(GTK_ACTION(pickUpAction), TRUE); if (active_calltree == current_calls) - gtk_action_set_sensitive(GTK_ACTION(hangUpAction), TRUE); + gtk_action_set_sensitive(GTK_ACTION(hangUpAction), TRUE); //gtk_action_set_sensitive( GTK_ACTION(newCallMenu),TRUE); g_object_ref(newCallWidget); - gtk_container_remove(GTK_CONTAINER (toolbar), - GTK_WIDGET (newCallWidget)); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (pickUpWidget), - 0); + gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (newCallWidget)); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (pickUpWidget), 0); if (active_calltree == current_calls) - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), - GTK_TOOL_ITEM (hangUpWidget), 1); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1); break; case CALL_STATE_CURRENT: case CALL_STATE_RECORD: gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), - 1); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1); gtk_widget_set_sensitive(GTK_WIDGET (holdMenu), TRUE); gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE); gtk_widget_set_sensitive(GTK_WIDGET (transferToolbar), TRUE); gtk_action_set_sensitive(GTK_ACTION (recordAction), TRUE); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), - 2); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), - GTK_TOOL_ITEM (transferToolbar), 3); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), - 4); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), 2); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (transferToolbar), 3); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), 4); gtk_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId); - gtk_toggle_tool_button_set_active( - GTK_TOGGLE_TOOL_BUTTON (transferToolbar), FALSE); + gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON (transferToolbar), FALSE); gtk_signal_handler_unblock (transferToolbar, transfertButtonConnId); - break; case CALL_STATE_BUSY: case CALL_STATE_FAILURE: gtk_action_set_sensitive(GTK_ACTION(hangUpAction), TRUE); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), - 1); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1); break; case CALL_STATE_TRANSFERT: - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), - 1); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), - GTK_TOOL_ITEM (transferToolbar), 2); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (transferToolbar), 2); gtk_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId); - gtk_toggle_tool_button_set_active( - GTK_TOGGLE_TOOL_BUTTON (transferToolbar), TRUE); + gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON (transferToolbar), TRUE); gtk_signal_handler_unblock (transferToolbar, transfertButtonConnId); gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE); gtk_widget_set_sensitive(GTK_WIDGET (holdMenu), TRUE); @@ -270,8 +257,7 @@ update_actions() gtk_widget_set_sensitive(GTK_WIDGET (transferToolbar), TRUE); break; default: - WARN("Should not happen in update_actions()!") - ; + WARN("Should not happen in update_actions()!"); break; } } @@ -281,48 +267,46 @@ update_actions() // update icon in systray show_status_hangup_icon(); - switch (selectedConf->_state) - { + switch (selectedConf->_state) { case CONFERENCE_STATE_ACTIVE_ATACHED: gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE); gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), - 1); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), - 2); + gtk_action_set_sensitive(GTK_ACTION (recordAction), TRUE); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), 2); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), 3); break; case CONFERENCE_STATE_ACTIVE_DETACHED: gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE); gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), - 1); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), - 2); + gtk_action_set_sensitive(GTK_ACTION (recordAction), TRUE); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), 2); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), 3); break; case CONFERENCE_STATE_RECORD: gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE); gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), - 1); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), - 2); + gtk_action_set_sensitive(GTK_ACTION (recordAction), TRUE); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), 2); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), 3); break; case CONFERENCE_STATE_HOLD: gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE); gtk_widget_set_sensitive(GTK_WIDGET (offHoldToolbar), TRUE); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), - 1); - gtk_toolbar_insert(GTK_TOOLBAR (toolbar), - GTK_TOOL_ITEM (offHoldToolbar), 2); + gtk_widget_set_sensitive(GTK_ACTION (recordAction), TRUE); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (offHoldToolbar), 2); + gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), 3); break; default: - WARN("Should not happen in update_action()!") - ; + WARN("Should not happen in update_action()!"); break; } -- GitLab From 71f8c85de5639c5d6784ff1d2849d38ab77df9d1 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 13 Jul 2010 10:56:53 -0400 Subject: [PATCH 161/197] [#2165] Set recoding for conference --- sflphone-common/src/managerimpl.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index da9bbcf51f..d4000073ed 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2556,28 +2556,22 @@ void ManagerImpl::setVolumeControls (bool display) { } void ManagerImpl::setRecordingCall (const CallID& id) { - /* - _debug ("ManagerImpl::setRecording()! "); - AccountID accountid = getAccountFromCall (id); - - getAccountLink (accountid)->setRecording (id); - */ - AccountID accountid = getAccountFromCall(id); - Recordable* rec = (Recordable *) getAccountLink(accountid)->getCall(id); + Recordable* rec; + if(!isConference(id)) { + AccountID accountid = getAccountFromCall(id); + rec = (Recordable *) getAccountLink(accountid)->getCall(id); + } + else { + ConferenceMap::iterator it = _conferencemap.find(id); + rec = (Recordable *)it->second; + } rec->setRecording(); - } bool ManagerImpl::isRecording (const CallID& id) { - /* - _debug ("ManagerImpl::isRecording()! "); - AccountID accountid = getAccountFromCall (id); - - return getAccountLink (accountid)->isRecording (id); - */ AccountID accountid = getAccountFromCall(id); Recordable* rec = (Recordable*) getAccountLink(accountid)->getCall(id); -- GitLab From 7067bc09844e86ce3e721e73ac82959b94a6bf27 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 13 Jul 2010 11:12:34 -0400 Subject: [PATCH 162/197] [#2165] Fix conferences start/stop --- sflphone-common/src/conference.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/conference.cpp b/sflphone-common/src/conference.cpp index 20219fc592..8ac1ce3282 100644 --- a/sflphone-common/src/conference.cpp +++ b/sflphone-common/src/conference.cpp @@ -55,7 +55,7 @@ Conference::Conference() _nbParticipant = 0; _id = conf.append (s); - + Recordable::initRecFileName(); } @@ -182,6 +182,8 @@ bool Conference::setRecording() { mbuffer->bindHalfDuplexOut(process_id); + Recordable::recorder.start(); + } // stop recording else { @@ -199,10 +201,9 @@ bool Conference::setRecording() { mbuffer->unBindHalfDuplexOut(process_id); - } + // Recordable::recorder.start(); - - Recordable::recorder.start(); + } return recordStatus; -- GitLab From 62b53b973755b5cd6c0afc01202317990b19f5ca Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 13 Jul 2010 15:52:35 -0400 Subject: [PATCH 163/197] [#3649] Remove setnumber of credential --- sflphone-common/src/dbus/configurationmanager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index f09c743fbd..db8111ef98 100755 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -297,10 +297,12 @@ int32_t ConfigurationManager::getNumberOfCredential( void ConfigurationManager::setNumberOfCredential(const std::string& accountID, const int32_t& number) { + /* if (accountID != AccountNULL || !accountID.empty()) { SIPAccount *sipaccount = (SIPAccount *)Manager::instance().getAccount(accountID); sipaccount->setCredentialCount(number); } + */ } void ConfigurationManager::setCredential(const std::string& accountID, -- GitLab From 0b1e168faef3d233ca3e88b7f9d7b2382f3d0fc2 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 13 Jul 2010 15:53:00 -0400 Subject: [PATCH 164/197] [#3649] Reimplement deleteAllCredential --- sflphone-common/src/managerimpl.cpp | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index a84cf49134..72ef41378d 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3484,19 +3484,6 @@ void ManagerImpl::deleteAllCredential (const AccountID& accountID) { SIPAccount *sipaccount = (SIPAccount *)account; - int numberOfCredential = sipaccount->getCredentialCount(); - - for (int i = 0; i < numberOfCredential; i++) { - std::string credentialIndex; - std::stringstream streamOut; - streamOut << i; - credentialIndex = streamOut.str(); - std::string section = "Credential" + std::string(":") + accountID - + std::string(":") + credentialIndex; - - _config.removeSection(section); - } - if (accountID.empty() == false) { sipaccount->setCredentialCount(0); } -- GitLab From a661f4e741bf73ab6490ad894a6d5ee6b6a9bef8 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 13 Jul 2010 15:53:36 -0400 Subject: [PATCH 165/197] [#3649] Reimplement initCredential in sipaccount --- sflphone-common/src/sip/sipaccount.cpp | 50 +++++++++++--------------- sflphone-common/src/sip/sipaccount.h | 3 +- 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index d9ee027aa9..7f39dd394d 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -44,6 +44,14 @@ Credentials::Credentials() : credentialCount(0) {} Credentials::~Credentials() {} +void Credentials::setNewCredential(std::string username, std::string password, std::string realm) +{ + credentialArray[credentialCount].username = username; + credentialArray[credentialCount].password = password; + credentialArray[credentialCount].realm = realm; + +} + CredentialItem *Credentials::getCredential(int index) { if((index >= 0) && (index < credentialCount)) @@ -84,7 +92,6 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _transportType (PJSIP_TRANSPORT_UNSPECIFIED) , _transport (NULL) , _resolveOnce (false) - , _credentialCount (0) , _cred (NULL) , _realm (DEFAULT_REALM) , _authenticationUsername ("") @@ -178,8 +185,8 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { Conf::ScalarNode displayName(_displayName); Conf::ScalarNode dtmfType(_dtmfType==0 ? "overrtp" : "sipinfo"); - std::stringstream countstr; countstr << _credentialCount; - Conf::ScalarNode count(countstr.str()); + // std::stringstream countstr; countstr << _credentialCount; + // Conf::ScalarNode count(countstr.str()); Conf::ScalarNode srtpenabled(_srtpEnabled ? "true" : "false"); Conf::ScalarNode keyExchange(_srtpKeyExchange); @@ -235,7 +242,7 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { zrtpmap.setKeyValue(notSuppWarningKey, ¬SuppWarning); accountmap.setKeyValue(credKey, &credentialmap); - credentialmap.setKeyValue(credentialCountKey, &count); + //credentialmap.setKeyValue(credentialCountKey, &count); accountmap.setKeyValue(tlsKey, &tlsmap); tlsmap.setKeyValue(tlsPortKey, &tlsport); @@ -319,8 +326,6 @@ void SIPAccount::unserialize(Conf::MappingNode *map) credMap = (Conf::MappingNode *)(map->getValue(credKey)); credentials.unserialize(credMap); - _credentialCount = credentials.getCredentialCount(); - val = (Conf::ScalarNode *)(map->getValue(displayNameKey)); if(val) { _displayName = val->getValue(); val = NULL; } @@ -684,33 +689,26 @@ int SIPAccount::initCredential (void) { _debug("SipAccount: Init credential"); - int credentialCount = 0; - credentialCount = credentials.getCredentialCount(); - credentialCount += 1; - bool md5HashingEnabled = false; int dataType = 0; md5HashingEnabled = Manager::instance().preferences.getMd5Hash(); std::string digest; // Create the credential array - pjsip_cred_info * cred_info = (pjsip_cred_info *) malloc (sizeof (pjsip_cred_info) * (credentialCount)); + pjsip_cred_info * cred_info = (pjsip_cred_info *) malloc (sizeof (pjsip_cred_info) * (getCredentialCount())); if (cred_info == NULL) { _error ("SipAccount: Error: Failed to set cred_info for account %s", _accountID.c_str()); return !SUCCESS; } - pj_bzero (cred_info, sizeof (pjsip_cred_info) *credentialCount); + pj_bzero (cred_info, sizeof (pjsip_cred_info) * getCredentialCount()); // Use authentication username if provided - if (!_authenticationUsername.empty()) { - _debug("Use credential authentication name -------------------------------------"); + if (!_authenticationUsername.empty()) cred_info[0].username = pj_str (strdup (_authenticationUsername.c_str())); - } else { - _debug("Use credential uername name -------------------------------------"); + else cred_info[0].username = pj_str (strdup (_username.c_str())); - } // Set password cred_info[0].data = pj_str (strdup (_password.c_str())); @@ -736,18 +734,12 @@ int SIPAccount::initCredential (void) int i; - for (i = 1; i < credentialCount; i++) { - _debug("--------------------------------------- Not supposed to have any credential"); - std::string credentialIndex; - std::stringstream streamOut; - streamOut << i - 1; - credentialIndex = streamOut.str(); + // Default credential already initialized, use credentials.getCredentialCount() + for (i = 0; i < credentials.getCredentialCount(); i++) { - std::string section = std::string ("Credential") + std::string (":") + _accountID + std::string (":") + credentialIndex; - - std::string username = Manager::instance().getConfigString (section, USERNAME); - std::string password = Manager::instance().getConfigString (section, PASSWORD); - std::string realm = Manager::instance().getConfigString (section, REALM); + std::string username = _username; // Manager::instance().getConfigString (section, USERNAME); + std::string password = _password;// Manager::instance().getConfigString (section, PASSWORD); + std::string realm = _realm;// Manager::instance().getConfigString (section, REALM); cred_info[i].username = pj_str (strdup (username.c_str())); cred_info[i].data = pj_str (strdup (password.c_str())); @@ -771,8 +763,6 @@ int SIPAccount::initCredential (void) _debug ("Setting credential %d realm = %s passwd = %s username = %s data_type = %d", i, realm.c_str(), password.c_str(), username.c_str(), cred_info[i].data_type); } - credentials.setCredentialCount(credentialCount); - _cred = cred_info; return SUCCESS; diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 70cad3af78..30e0f1681a 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -276,7 +276,7 @@ class SIPAccount : public Account * @param none * @return int The number of credentials set for this account. */ - inline int getCredentialCount(void) { return credentials.getCredentialCount(); } + inline int getCredentialCount(void) { return credentials.getCredentialCount() + 1; } inline void setCredentialCount(int count) { return credentials.setCredentialCount(count); } /** @@ -596,7 +596,6 @@ class SIPAccount : public Account bool _resolveOnce; //Credential information - int _credentialCount; pjsip_cred_info *_cred; std::string _realm; std::string _authenticationUsername; -- GitLab From 13cdbbd8444f90be67db8484db0ce4ee58cfbba9 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 13 Jul 2010 16:11:39 -0400 Subject: [PATCH 166/197] [#3649] Fix credentials in managerimpl and in configurationmanager --- .../src/dbus/configurationmanager.cpp | 27 +++++++++++++------ sflphone-common/src/managerimpl.cpp | 8 +++++- sflphone-common/src/sip/sipvoiplink.cpp | 6 ++--- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index db8111ef98..8c8b0fdca1 100755 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -265,18 +265,17 @@ void ConfigurationManager::setTlsSettings(const std::string& section, std::map<std::string, std::string> ConfigurationManager::getCredential( const std::string& accountID, const int32_t& index) { - std::string credentialIndex; - std::stringstream streamOut; - streamOut << index; - credentialIndex = streamOut.str(); + Account *account = Manager::instance().getAccount(accountID); - SIPAccount *sipaccount = (SIPAccount *)Manager::instance().getAccount(accountID); + std::map<std::string, std::string> credentialInformation; + if(account->getType() != "SIP") + return credentialInformation; - std::string section = std::string("Credential") + std::string(":") - + accountID + std::string(":") + credentialIndex; + SIPAccount *sipaccount = (SIPAccount *)account; + - std::map<std::string, std::string> credentialInformation; + if(index == 0) { std::string username = sipaccount->getUsername(); std::string password = sipaccount->getPassword(); std::string realm = sipaccount->getRealm(); @@ -284,6 +283,18 @@ std::map<std::string, std::string> ConfigurationManager::getCredential( credentialInformation.insert(std::pair<std::string, std::string>(USERNAME, username)); credentialInformation.insert(std::pair<std::string, std::string>(PASSWORD, password)); credentialInformation.insert(std::pair<std::string, std::string>(REALM, realm)); + } + else { + + // TODO: implement for extra credentials + std::string username = sipaccount->getUsername(); + std::string password = sipaccount->getPassword(); + std::string realm = sipaccount->getRealm(); + + credentialInformation.insert(std::pair<std::string, std::string>(USERNAME, username)); + credentialInformation.insert(std::pair<std::string, std::string>(PASSWORD, password)); + credentialInformation.insert(std::pair<std::string, std::string>(REALM, realm)); + } return credentialInformation; } diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 72ef41378d..66d1b3af0b 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3330,6 +3330,9 @@ std::string ManagerImpl::computeMd5HashFromCredential ( void ManagerImpl::setCredential (const std::string& accountID, const int32_t& index, const std::map<std::string, std::string>& details) { + + _debug("Manager: set credential"); + /* std::map<std::string, std::string>::iterator it; std::map<std::string, std::string> credentialInformation = details; @@ -3390,6 +3393,7 @@ void ManagerImpl::setCredential (const std::string& accountID, } Manager::instance().setConfig(section, PASSWORD, password); + */ } // method to reduce the if/else mess. @@ -3398,7 +3402,7 @@ void ManagerImpl::setCredential (const std::string& accountID, void ManagerImpl::setAccountDetails (const std::string& accountID, const std::map<std::string, std::string>& details) { - _debug("----------------------- Manager: Set account details %s", accountID.c_str()); + _debug("Manager: Set account details %s", accountID.c_str()); Account* account; if(!(account = getAccount(accountID))) { @@ -3477,6 +3481,8 @@ std::string ManagerImpl::addAccount ( void ManagerImpl::deleteAllCredential (const AccountID& accountID) { + _debug("Manager: delete all credential"); + Account *account = getAccount(accountID); if(account->getType() != "SIP") diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 5a92fcb49d..f9dba9c401 100755 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -643,7 +643,7 @@ int SIPVoIPLink::sendRegister (AccountID id) pjsip_cred_info *cred = account->getCredInfo(); int credential_count = account->getCredentialCount(); - _debug ("setting %d credentials in sendRegister", credential_count); + _debug ("UserAgent: setting %d credentials in sendRegister", credential_count); pjsip_regc_set_credentials (regc, credential_count, cred); // Add User-Agent Header @@ -657,7 +657,7 @@ int SIPVoIPLink::sendRegister (AccountID id) // pj_list_push_back (&hdr_list, (pjsip_hdr*) routing); if (regc) - _debug("No regc ......"); + _debug("UserAgent: Error: No regc ......"); pjsip_regc_add_headers (regc, &hdr_list); @@ -681,7 +681,7 @@ int SIPVoIPLink::sendRegister (AccountID id) // managed when acquiring transport pjsip_transport_dec_ref(account->getAccountTransport ()); - _debug("After setting the transport in account registration using transport: %s %s (refcnt=%d)", + _debug("UserAgent: After setting the transport in account registration using transport: %s %s (refcnt=%d)", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); -- GitLab From 1b135a9ce28504a0e2233c5918e9955d3c18b1fe Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 13 Jul 2010 17:00:49 -0400 Subject: [PATCH 167/197] [#3649] Do not set number of credential in client --- sflphone-client-gnome/src/config/accountconfigdialog.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index b4a75d272c..591fee77ee 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -217,7 +217,7 @@ static GPtrArray* getNewCredential (GHashTable * properties) { COLUMN_CREDENTIAL_PASSWORD, &password, -1); - DEBUG ("Row %d: %s %s %s", row_count, username, password, realm); + DEBUG ("------------------------------------------------- Row %d: %s %s %s", row_count, username, password, realm); new_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); g_hash_table_insert(new_table, g_strdup(ACCOUNT_REALM), realm); @@ -1494,9 +1494,10 @@ void show_account_window (account_t * a) { if(currentAccount->credential_information != NULL) { int i; for(i = 0; i < currentAccount->credential_information->len; i++) { + DEBUG("---------------------------------- Create new credential"); dbus_set_credential(currentAccount, i); } - dbus_set_number_of_credential(currentAccount, currentAccount->credential_information->len); + // dbus_set_number_of_credential(currentAccount, currentAccount->credential_information->len); } } } -- GitLab From 5d79bb271219095489ef2024558b7adc52902435 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 13 Jul 2010 17:35:21 -0400 Subject: [PATCH 168/197] [#3649] Fix account registration for new configuration file --- sflphone-common/src/managerimpl.cpp | 4 +--- sflphone-common/src/sip/sipaccount.cpp | 6 +++--- sflphone-common/src/sip/sipvoiplink.cpp | 8 ++++++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 66d1b3af0b..b01eb7e5a1 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3761,14 +3761,12 @@ short ManagerImpl::buildConfiguration() { _debug("accountid: %s", accountid.c_str()); if (accountType == "SIP" && accountid != "IP2IP") { - _debug("Account is SIP!!!"); tmpAccount = AccountCreator::createAccount(AccountCreator::SIP_ACCOUNT, accountid); } else if (accountType == "IAX" && accountid != "IP2IP") { tmpAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT, accountid); } - _debug("ok"); if (tmpAccount != NULL) { @@ -3781,7 +3779,7 @@ short ManagerImpl::buildConfiguration() { _debug ("Manager: Loading account %s ", accountid.c_str()); _accountMap[accountid] = tmpAccount; - // tmpAccount->setVoIPLink(SIPVoIPLink::instance ("")); + tmpAccount->setVoIPLink(); nbAccount++; } diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 7f39dd394d..e22796f54d 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -185,8 +185,8 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { Conf::ScalarNode displayName(_displayName); Conf::ScalarNode dtmfType(_dtmfType==0 ? "overrtp" : "sipinfo"); - // std::stringstream countstr; countstr << _credentialCount; - // Conf::ScalarNode count(countstr.str()); + std::stringstream countstr; countstr << 0; + Conf::ScalarNode count(countstr.str()); Conf::ScalarNode srtpenabled(_srtpEnabled ? "true" : "false"); Conf::ScalarNode keyExchange(_srtpKeyExchange); @@ -242,7 +242,7 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { zrtpmap.setKeyValue(notSuppWarningKey, ¬SuppWarning); accountmap.setKeyValue(credKey, &credentialmap); - //credentialmap.setKeyValue(credentialCountKey, &count); + credentialmap.setKeyValue(credentialCountKey, &count); accountmap.setKeyValue(tlsKey, &tlsmap); tlsmap.setKeyValue(tlsPortKey, &tlsport); diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index f9dba9c401..5c4e6bae80 100755 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -657,7 +657,7 @@ int SIPVoIPLink::sendRegister (AccountID id) // pj_list_push_back (&hdr_list, (pjsip_hdr*) routing); if (regc) - _debug("UserAgent: Error: No regc ......"); + _error("UserAgent: Error: No regc ......"); pjsip_regc_add_headers (regc, &hdr_list); @@ -3405,7 +3405,11 @@ void regc_cb (struct pjsip_regc_cbparam *param) //_debug("Received client registration callback wiht code: %i, %s\n", param->code, descriptionprint.c_str()); DBusManager::instance().getCallManager()->registrationStateChanged (account->getAccountID(), std::string (description->ptr, description->slen), param->code); std::pair<int, std::string> details (param->code, std::string (description->ptr, description->slen)); - account->setRegistrationStateDetailed (details); + + + // there a race condition for this ressource when closing the application + if(account) + account->setRegistrationStateDetailed (details); } if (param->status == PJ_SUCCESS) { -- GitLab From acbb879673e406dcabc32e3a4c1f8a5f7d3b51d9 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 13 Jul 2010 18:01:52 -0400 Subject: [PATCH 169/197] [#3946] A little cleanup --- sflphone-common/src/sip/sipaccount.cpp | 2 -- sflphone-common/src/sip/sipvoiplink.cpp | 1 - 2 files changed, 3 deletions(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index e22796f54d..d7d79f6521 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -1076,8 +1076,6 @@ std::string SIPAccount::getServerUri (void) // UDP does not require the transport specification - _debug("---------------------------- _hostname %s", _hostname.c_str()); - if (_transportType == PJSIP_TRANSPORT_TLS) { scheme = "sips:"; transport = ";transport=" + std::string (pjsip_transport_get_type_name (_transportType)); diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 5c4e6bae80..62b9357036 100755 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -580,7 +580,6 @@ int SIPVoIPLink::sendRegister (AccountID id) std::string fromUri = account->getFromUri(); std::string srvUri = account->getServerUri(); - _debug("----------------------------------------------- srvUri %s, %s", account->getAccountID().c_str(), srvUri.c_str()); std::string address = findLocalAddressFromUri (srvUri, account->getAccountTransport ()); int port = findLocalPortFromUri (srvUri, account->getAccountTransport ()); -- GitLab From 5bed346fe3c415c9c469a232ddf23b72f24c3c13 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 09:40:16 -0400 Subject: [PATCH 170/197] [#3649] Fix wrong Via header bug --- sflphone-common/src/sip/sipvoiplink.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 62b9357036..f6dda53016 100755 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2372,7 +2372,7 @@ int SIPVoIPLink::createUdpTransport (AccountID id) pjsip_host_port a_name; // char tmpIP[32]; pjsip_transport *transport; - std::string listeningAddress = "127.0.0.1"; + std::string listeningAddress = "0.0.0.0"; int listeningPort = _regPort; /* Use my local address as default value */ @@ -2417,6 +2417,7 @@ int SIPVoIPLink::createUdpTransport (AccountID id) // Init bound address to ANY bound_addr.sin_addr.s_addr = pj_htonl (PJ_INADDR_ANY); + loadSIPLocalIP (&listeningAddress); } else { @@ -2431,22 +2432,29 @@ int SIPVoIPLink::createUdpTransport (AccountID id) // Create UDP-Server (default port: 5060) // Use here either the local information or the published address - if (account != NULL && !account->getPublishedSameasLocal ()) { + if (account && !account->getPublishedSameasLocal ()) { // Set the listening address to the published address listeningAddress = account->getPublishedAddress (); + // Set the listening port to the published port listeningPort = account->getPublishedPort (); _debug ("UserAgent: Creating UDP transport published %s:%i", listeningAddress.c_str (), listeningPort); } + // We must specify this here to avoid the IP2IP_PROFILE + // to create a transport with name 0.0.0.0 to appear in the via header + if(id == IP2IP_PROFILE) + loadSIPLocalIP (&listeningAddress); + if(listeningAddress == "" || listeningPort == 0) { _error("UserAgent: Error invalid address for new udp transport"); return !PJ_SUCCESS; } //strcpy (tmpIP, listeningAddress.data()); /* Init published name */ + _debug("------------------------------------------------------------ The listening address is: %s", listeningAddress.c_str()); pj_bzero (&a_name, sizeof (pjsip_host_port)); pj_cstr (&a_name.host, listeningAddress.c_str()); a_name.port = listeningPort; -- GitLab From f3c0b8cd91a7296866855398c314369c660b7246 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 09:41:18 -0400 Subject: [PATCH 171/197] [#3649] Remove test account --- sflphone-common/sequenceParser.yml | 47 +----------------------------- 1 file changed, 1 insertion(+), 46 deletions(-) diff --git a/sflphone-common/sequenceParser.yml b/sflphone-common/sequenceParser.yml index 48d5b8d777..1ace826ad3 100755 --- a/sflphone-common/sequenceParser.yml +++ b/sflphone-common/sequenceParser.yml @@ -90,51 +90,6 @@ accounts: verifyClient: true verifyServer: true - - id: Account:1278432440 - alias: sfl-431 - username: 431 - password: alexandre - hostname: mtl.savoirfairelinux.net - enable: false - type: SIP - expire: 3600 - interface: default - port: 5060 - mailbox: 97 - publishAddr: 0.0.0.0 - publishPort: 5060 - sameasLocal: true - resolveOnce: false - codecs: 0/9/110/111/112/ - stunServer: stun.sflphone.org - stunEnabled: false - displayName: Alexandre Savard - credential: - count: 0 - srtp: - enable: false - keyExchange: sdes - rtpFallback: false - zrtp: - displaySas: false - displaySasOnce: false - helloHashEnabled: false - notSuppWarning: false - tls: - tlsPort: 5061 - certificate: /home/msavard/Development/sflphone/sflphone-client-gnome/config.guess - calist: /home/msavard/Development/sflphone/sflphone-client-gnome/aclocal.m4 - ciphers: - enable: false - method: TLSv1 - timeout: 0 - password: - privateKey: /home/msavard/Development/sflphone/sflphone-client-gnome/config.log - requireCertif: true - server: - verifyClient: false - verifyServer: false - addressbook: photo: true enabled: true @@ -170,7 +125,7 @@ hooks: urlSipField: X-sflphone-url preferences: - order: Account:1278432440/Account:1278432417/ + order: Account:1278432417/ audioApi: 0 dialpadDisplay: 0 historyEnabled: 1 -- GitLab From 234008597faf4e634b225cadaf01d49298a28991 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 09:43:00 -0400 Subject: [PATCH 172/197] [#3649] Maker accounts enabled by default (for IP2IP account) --- sflphone-common/src/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/account.cpp b/sflphone-common/src/account.cpp index 329166a30d..100308a717 100644 --- a/sflphone-common/src/account.cpp +++ b/sflphone-common/src/account.cpp @@ -36,7 +36,7 @@ Account::Account (const AccountID& accountID, std::string type) : _accountID (accountID) , _link (NULL) - , _enabled (false) + , _enabled (true) , _type (type) , _codecOrder () , _startupCodecStr("") -- GitLab From 99478ea09abfec3a3051223cfd911a3a87b5c267 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 09:44:06 -0400 Subject: [PATCH 173/197] [#3649] Cleanup manager & sipvoiplink --- sflphone-common/src/managerimpl.cpp | 6 +++--- sflphone-common/src/sip/sipaccount.cpp | 12 +++++++----- sflphone-common/src/sip/sipvoiplink.cpp | 3 +-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index b01eb7e5a1..5eacb2d2e8 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2298,8 +2298,8 @@ void ManagerImpl::initAudioCodec (void) { */ std::vector<std::string> ManagerImpl::retrieveActiveCodecs () { - // This property is now set per account basis - std::string s = getConfigString(AUDIO, "ActiveCodecs"); + // This property is now set per account basis so we should remove it... + std::string s = ""; _info("Manager: Retrieve active codecs: %s", s.c_str ()); return unserialize(s); } @@ -3267,7 +3267,7 @@ std::vector<std::string> ManagerImpl::getAccountList () { std::map<std::string, std::string> ManagerImpl::getAccountDetails ( const AccountID& accountID) { - _debug("------------------------ Manager: get account details %s", accountID.c_str()); + _debug("Manager: get account details %s", accountID.c_str()); Account * account; if(!(account = _accountMap[accountID])) { diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index d7d79f6521..498f565338 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -79,7 +79,7 @@ void Credentials::unserialize(Conf::MappingNode *map) SIPAccount::SIPAccount (const AccountID& accountID) - : Account (accountID, "sip") + : Account (accountID, "SIP") , _routeSet("") , _regc (NULL) , _bRegister (false) @@ -221,6 +221,7 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { accountmap.setKeyValue(mailboxKey, &mailbox); accountmap.setKeyValue(expireKey, &expire); accountmap.setKeyValue(interfaceKey, &interface); + _debug("-------------- INTERFACE %s", _interface.c_str()); accountmap.setKeyValue(portKey, &port); accountmap.setKeyValue(publishAddrKey, &publishAddr); accountmap.setKeyValue(publishPortKey, &publishPort); @@ -301,6 +302,7 @@ void SIPAccount::unserialize(Conf::MappingNode *map) if(val) { _registrationExpire = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(interfaceKey)); if(val) { _interface = val->getValue(); val = NULL; } + _debug("------------ INTERFACE: %s", _interface.c_str()); val = (Conf::ScalarNode *)(map->getValue(portKey)); if(val) { _localPort = atoi(val->getValue().data()); val = NULL; } // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); @@ -580,7 +582,7 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det std::map<std::string, std::string> SIPAccount::getAccountDetails() { - _debug("--------------------------- SipAccount: get account details %s", _accountID.c_str()); + _debug("SipAccount: get account details %s", _accountID.c_str()); std::map<std::string, std::string> a; @@ -737,9 +739,9 @@ int SIPAccount::initCredential (void) // Default credential already initialized, use credentials.getCredentialCount() for (i = 0; i < credentials.getCredentialCount(); i++) { - std::string username = _username; // Manager::instance().getConfigString (section, USERNAME); - std::string password = _password;// Manager::instance().getConfigString (section, PASSWORD); - std::string realm = _realm;// Manager::instance().getConfigString (section, REALM); + std::string username = _username; + std::string password = _password; + std::string realm = _realm; cred_info[i].username = pj_str (strdup (username.c_str())); cred_info[i].data = pj_str (strdup (password.c_str())); diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index f6dda53016..74f6874706 100755 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2443,7 +2443,7 @@ int SIPVoIPLink::createUdpTransport (AccountID id) } - // We must specify this here to avoid the IP2IP_PROFILE + // We must specify this here to avoid the IP2IP_PROFILE // to create a transport with name 0.0.0.0 to appear in the via header if(id == IP2IP_PROFILE) loadSIPLocalIP (&listeningAddress); @@ -2454,7 +2454,6 @@ int SIPVoIPLink::createUdpTransport (AccountID id) } //strcpy (tmpIP, listeningAddress.data()); /* Init published name */ - _debug("------------------------------------------------------------ The listening address is: %s", listeningAddress.c_str()); pj_bzero (&a_name, sizeof (pjsip_host_port)); pj_cstr (&a_name.host, listeningAddress.c_str()); a_name.port = listeningPort; -- GitLab From eb44ba48ffaa2e4fc7a30cb7c6e9037c233f559b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 09:57:53 -0400 Subject: [PATCH 174/197] [#3649] Remove unusefull credential handling from client --- .../src/config/accountconfigdialog.c | 13 +++++++------ sflphone-common/src/sip/sipvoiplink.cpp | 3 --- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 591fee77ee..ecb67b07c2 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -217,7 +217,7 @@ static GPtrArray* getNewCredential (GHashTable * properties) { COLUMN_CREDENTIAL_PASSWORD, &password, -1); - DEBUG ("------------------------------------------------- Row %d: %s %s %s", row_count, username, password, realm); + DEBUG ("Row %d: %s %s %s", row_count, username, password, realm); new_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); g_hash_table_insert(new_table, g_strdup(ACCOUNT_REALM), realm); @@ -442,9 +442,10 @@ static void fill_treeview_with_credential (GtkListStore * credentialStore, accou { GtkTreeIter iter; gtk_list_store_clear(credentialStore); - gtk_list_store_append (credentialStore, &iter); - + /* This is the default, undeletable credential */ + /* + // gtk_list_store_append (credentialStore, &iter); gchar * authentication_name = g_hash_table_lookup(account->properties, ACCOUNT_AUTHENTICATION_USERNAME); gchar * realm = g_hash_table_lookup(account->properties, ACCOUNT_REALM); if (realm == NULL || (g_strcmp0(realm, "") == 0)) { @@ -473,6 +474,7 @@ static void fill_treeview_with_credential (GtkListStore * credentialStore, accou DEBUG("No credential defined"); return; } + */ unsigned int i; for(i = 0; i < account->credential_information->len; i++) @@ -483,8 +485,7 @@ static void fill_treeview_with_credential (GtkListStore * credentialStore, accou COLUMN_CREDENTIAL_REALM, g_hash_table_lookup(element, ACCOUNT_REALM), COLUMN_CREDENTIAL_USERNAME, g_hash_table_lookup(element, ACCOUNT_USERNAME), COLUMN_CREDENTIAL_PASSWORD, g_hash_table_lookup(element, ACCOUNT_PASSWORD), - COLUMN_CREDENTIAL_DATA, element, // Pointer - -1); + COLUMN_CREDENTIAL_DATA, element, -1); } } @@ -1494,7 +1495,7 @@ void show_account_window (account_t * a) { if(currentAccount->credential_information != NULL) { int i; for(i = 0; i < currentAccount->credential_information->len; i++) { - DEBUG("---------------------------------- Create new credential"); + DEBUG("Create new credential"); dbus_set_credential(currentAccount, i); } // dbus_set_number_of_credential(currentAccount, currentAccount->credential_information->len); diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 74f6874706..d04257a6b5 100755 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -655,9 +655,6 @@ int SIPVoIPLink::sendRegister (AccountID id) pj_list_push_back (&hdr_list, (pjsip_hdr*) h); // pj_list_push_back (&hdr_list, (pjsip_hdr*) routing); - if (regc) - _error("UserAgent: Error: No regc ......"); - pjsip_regc_add_headers (regc, &hdr_list); status = pjsip_regc_register (regc, PJ_TRUE, &tdata); -- GitLab From e3b54d89eac7a22c5646bbbbe01cf4d6fa7ce55c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 10:11:26 -0400 Subject: [PATCH 175/197] [#3649] Fix audio device ringtone key in preferences --- sflphone-common/sequenceParser.yml | 2 +- sflphone-common/src/preferences.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-common/sequenceParser.yml b/sflphone-common/sequenceParser.yml index 1ace826ad3..7bd7f793a5 100755 --- a/sflphone-common/sequenceParser.yml +++ b/sflphone-common/sequenceParser.yml @@ -103,7 +103,7 @@ audio: alsa: cardin: 0 cardout: 0 - cardout: 0 + cardring: 0 framesize: 20 plugin: default smplrate: 44100 diff --git a/sflphone-common/src/preferences.h b/sflphone-common/src/preferences.h index c9fda93479..9ef4de1edf 100755 --- a/sflphone-common/src/preferences.h +++ b/sflphone-common/src/preferences.h @@ -83,7 +83,7 @@ const Conf::Key pluginKey("plugin"); //: default const Conf::Key smplrateKey("smplrate");//: 44100 const Conf::Key devicePlaybackKey("devicePlayback");//: const Conf::Key deviceRecordKey("deviceRecord");// : -const Conf::Key deviceRingtoneKey("deviceRecord");// : +const Conf::Key deviceRingtoneKey("deviceRingtone");// : const Conf::Key recordpathKey("recordpath");//: /home/msavard/Bureau const Conf::Key ringchoiceKey("ringchoice");//: /usr/share/sflphone/ringtones/konga.ul const Conf::Key volumemicKey("volumemic");//: 100 -- GitLab From 83bdf20b2d55664dba97b04a5b15925e5a12edc3 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 10:58:27 -0400 Subject: [PATCH 176/197] [#3649] Implement set/get account details and serialize/unserialize for IAX --- sflphone-common/src/account.cpp | 2 + sflphone-common/src/account.h | 12 +++ sflphone-common/src/iax/iaxaccount.cpp | 126 ++++++++++++++++++++++++- sflphone-common/src/sip/sipaccount.cpp | 4 +- sflphone-common/src/sip/sipaccount.h | 13 --- 5 files changed, 140 insertions(+), 17 deletions(-) diff --git a/sflphone-common/src/account.cpp b/sflphone-common/src/account.cpp index 100308a717..ca278d3caf 100644 --- a/sflphone-common/src/account.cpp +++ b/sflphone-common/src/account.cpp @@ -40,6 +40,8 @@ Account::Account (const AccountID& accountID, std::string type) : , _type (type) , _codecOrder () , _startupCodecStr("") + , _displayName("") + , _useragent("SFLphone") { setRegistrationState (Unregistered); } diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h index 5120bfd829..4180918cbe 100644 --- a/sflphone-common/src/account.h +++ b/sflphone-common/src/account.h @@ -143,6 +143,7 @@ const Conf::Key accountEnableKey("enable"); const Conf::Key mailboxKey("mailbox"); const Conf::Key codecsKey("codecs"); // 0/9/110/111/112/ +const Conf::Key displayNameKey("displayName"); #define find_in_map(X, Y) if((iter = map_cpy.find(X)) != map_cpy.end()) { Y = iter->second; } @@ -262,6 +263,12 @@ class Account : public Serializable{ void setActiveCodecs (const std::vector <std::string>& list); + inline std::string getDisplayName(void) { return _displayName; } + inline void setDisplayName(std::string name) { _displayName = name; } + + std::string getUseragent(void) { return _useragent; } + void setUseragent(std::string ua) { _useragent = ua; } + private: // copy constructor Account(const Account& rh); @@ -338,6 +345,11 @@ class Account : public Serializable{ */ std::string _startupCodecStr; + // Display Name that can be used in SIP URI. + std::string _displayName; + + std::string _useragent; + }; #endif diff --git a/sflphone-common/src/iax/iaxaccount.cpp b/sflphone-common/src/iax/iaxaccount.cpp index 42ca92abb1..5b75b8dd69 100644 --- a/sflphone-common/src/iax/iaxaccount.cpp +++ b/sflphone-common/src/iax/iaxaccount.cpp @@ -49,16 +49,113 @@ IAXAccount::~IAXAccount() void IAXAccount::serialize(Conf::YamlEmitter *emitter) { - + _debug("IaxAccount: serialize %s", _accountID.c_str()); + + Conf::MappingNode accountmap(NULL); + + Conf::ScalarNode id(Account::_accountID); + Conf::ScalarNode username(Account::_username); + Conf::ScalarNode password(Account::_password); + Conf::ScalarNode alias(Account::_alias); + Conf::ScalarNode hostname(Account::_hostname); + Conf::ScalarNode enable(_enabled ? "true" : "false"); + Conf::ScalarNode type(Account::_type); + Conf::ScalarNode mailbox("97"); + + Conf::ScalarNode codecs(_startupCodecStr); + Conf::ScalarNode displayName(_displayName); + + accountmap.setKeyValue(aliasKey, &alias); + accountmap.setKeyValue(typeKey, &type); + accountmap.setKeyValue(idKey, &id); + accountmap.setKeyValue(usernameKey, &username); + accountmap.setKeyValue(passwordKey, &password); + accountmap.setKeyValue(hostnameKey, &hostname); + accountmap.setKeyValue(accountEnableKey, &enable); + accountmap.setKeyValue(mailboxKey, &mailbox); + + accountmap.setKeyValue(displayNameKey, &displayName); + accountmap.setKeyValue(codecsKey, &codecs); + + try{ + emitter->serializeAccount(&accountmap); + } + catch (Conf::YamlEmitterException &e) { + _error("ConfigTree: %s", e.what()); + } } void IAXAccount::unserialize(Conf::MappingNode *map) { - + Conf::ScalarNode *val; + + _debug("IaxAccount: Unserialize"); + + val = (Conf::ScalarNode *)(map->getValue(aliasKey)); + if(val) { _alias = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(typeKey)); + if(val) { _type = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(idKey)); + if(val) { _accountID = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(usernameKey)); + if(val) { _username = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(passwordKey)); + if(val) { _password = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(hostnameKey)); + if(val) { _hostname = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(accountEnableKey)); + if(val) { _enabled = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); + + val = (Conf::ScalarNode *)(map->getValue(codecsKey)); + if(val) { _startupCodecStr = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(displayNameKey)); + if(val) { _displayName = val->getValue(); val = NULL; } + } void IAXAccount::setAccountDetails(const std::map<std::string, std::string>& details) { + std::map<std::string, std::string> map_cpy; + std::map<std::string, std::string>::iterator iter; + + _debug("IaxAccount: Set account details: %s", _accountID.c_str()); + + // Work on a copy + map_cpy = details; + + std::string alias; + std::string type; + std::string hostname; + std::string username; + std::string password; + std::string mailbox; + std::string accountEnable; + + std::string ua_name; + + // Account setting common to SIP and IAX + find_in_map(CONFIG_ACCOUNT_ALIAS, alias) + find_in_map(CONFIG_ACCOUNT_TYPE, type) + find_in_map(HOSTNAME, hostname) + find_in_map(USERNAME, username) + find_in_map(PASSWORD, password) + find_in_map(CONFIG_ACCOUNT_MAILBOX, mailbox); + find_in_map(CONFIG_ACCOUNT_ENABLE, accountEnable); + + setAlias(alias); + setType(type); + setUsername(username); + setHostname(hostname); + setPassword(password); + setEnabled((accountEnable.compare("true") == 0) ? true : false); + + std::string displayName; + find_in_map(DISPLAY_NAME, displayName) + setDisplayName(displayName); + + find_in_map(USERAGENT, ua_name) + setUseragent(ua_name); } @@ -66,6 +163,31 @@ std::map<std::string, std::string> IAXAccount::getAccountDetails() { std::map<std::string, std::string> a; + _debug("IaxAccount: get account details %s", _accountID.c_str()); + + a.insert(std::pair<std::string, std::string>(ACCOUNT_ID, _accountID)); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ALIAS, getAlias())); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ENABLE, isEnabled() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_TYPE, getType())); + a.insert(std::pair<std::string, std::string>(HOSTNAME, getHostname())); + a.insert(std::pair<std::string, std::string>(USERNAME, getUsername())); + a.insert(std::pair<std::string, std::string>(PASSWORD, getPassword())); + + RegistrationState state = Unregistered; + std::string registrationStateCode; + std::string registrationStateDescription; + + state = getRegistrationState(); + int code = getRegistrationStateDetailed().first; + std::stringstream out; out << code; + registrationStateCode = out.str(); + registrationStateDescription = getRegistrationStateDetailed().second; + + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATUS, Manager::instance().mapStateNumberToString(state))); + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_CODE, registrationStateCode)); + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_DESCRIPTION, registrationStateDescription)); + a.insert(std::pair<std::string, std::string>(USERAGENT, getUseragent())); + return a; } diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 498f565338..c23cf1f45a 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -97,7 +97,6 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _authenticationUsername ("") , _tlsSetting (NULL) , _dtmfType(OVERRTP) - , _displayName ("") , _tlsEnable("") , _tlsPortStr("") , _tlsCaListFile("") @@ -125,7 +124,6 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _zrtpDisplaySasOnce(false) , _zrtpHelloHash(false) , _zrtpNotSuppWarning(false) - , _useragent("SFLphone") { _debug("Sip account constructor called"); @@ -399,6 +397,8 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det std::map<std::string, std::string> map_cpy; std::map<std::string, std::string>::iterator iter; + _debug("SipAccount: set account details %s", _accountID.c_str()); + // Work on a copy map_cpy = details; diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 30e0f1681a..fb47d8812d 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -96,8 +96,6 @@ const Conf::Key stunServerKey("stunServer"); const Conf::Key credKey("credential"); const Conf::Key credentialCountKey("count"); -const Conf::Key displayNameKey("displayName"); - class SIPVoIPLink; /** @@ -448,9 +446,6 @@ class SIPAccount : public Account DtmfType getDtmfType(void) { return _dtmfType; } void setDtmfType(DtmfType type) { _dtmfType = type; } - std::string getDisplayName(void) { return _displayName; } - void setDisplayName(std::string name) { _displayName = name ;} - bool getSrtpEnable(void) { return _srtpEnabled; } void setSrtpEnable(bool enabl) { _srtpEnabled = enabl; } @@ -515,9 +510,6 @@ class SIPAccount : public Account std::string getTlsNegotiationTimeoutMsec(void) { return _tlsNegotiationTimeoutMsec; } void setTlsNegotiationTimeoutMsec(std::string timeout) { _tlsNegotiationTimeoutMsec = timeout; } - std::string getUseragent(void) { return _useragent; } - void setUseragent(std::string ua) { _useragent = ua; } - private: /* Maps a string description of the SSL method @@ -612,9 +604,6 @@ class SIPAccount : public Account pj_uint16_t _stunPort; DtmfType _dtmfType; - - // Display Name that can be used in SIP URI. - std::string _displayName; std::string _tlsEnable; std::string _tlsPortStr; @@ -655,8 +644,6 @@ class SIPAccount : public Account bool _zrtpHelloHash; bool _zrtpNotSuppWarning; - std::string _useragent; - }; -- GitLab From da8c5f52d55a79bd94753ef38c27a6d1f0d1ff03 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 11:00:40 -0400 Subject: [PATCH 177/197] [#3649] Some small cleanup --- sflphone-common/src/sip/sipaccount.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index c23cf1f45a..5b7ef192c2 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -219,7 +219,6 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { accountmap.setKeyValue(mailboxKey, &mailbox); accountmap.setKeyValue(expireKey, &expire); accountmap.setKeyValue(interfaceKey, &interface); - _debug("-------------- INTERFACE %s", _interface.c_str()); accountmap.setKeyValue(portKey, &port); accountmap.setKeyValue(publishAddrKey, &publishAddr); accountmap.setKeyValue(publishPortKey, &publishPort); @@ -300,7 +299,6 @@ void SIPAccount::unserialize(Conf::MappingNode *map) if(val) { _registrationExpire = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(interfaceKey)); if(val) { _interface = val->getValue(); val = NULL; } - _debug("------------ INTERFACE: %s", _interface.c_str()); val = (Conf::ScalarNode *)(map->getValue(portKey)); if(val) { _localPort = atoi(val->getValue().data()); val = NULL; } // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); -- GitLab From 8d4bc24c385524acfbe1a724fb50749cabca9fe3 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 13:46:18 -0400 Subject: [PATCH 178/197] [#3649] Fix getAccount details for default parameters --- .../src/config/accountconfigdialog.c | 3 +- sflphone-common/src/managerimpl.cpp | 9 +++--- sflphone-common/src/sip/sipaccount.cpp | 29 ++++++++++--------- sflphone-common/src/sip/sipaccount.h | 10 +++---- 4 files changed, 28 insertions(+), 23 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index ecb67b07c2..97c0bb1344 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -271,12 +271,13 @@ static GtkWidget* create_basic_tab (account_t **a) { int row = 0; + DEBUG("Config: Create basic account tab"); + // Load from SIP/IAX/Unknown ? if(currentAccount) { curAccountID = currentAccount->accountID; curAccountType = g_hash_table_lookup(currentAccount->properties, ACCOUNT_TYPE); - DEBUG("Config: Current accountType %s", curAccountType); curAccountEnabled = g_hash_table_lookup(currentAccount->properties, ACCOUNT_ENABLED); curAlias = g_hash_table_lookup(currentAccount->properties, ACCOUNT_ALIAS); curHostname = g_hash_table_lookup(currentAccount->properties, ACCOUNT_HOSTNAME); diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 5eacb2d2e8..1912b82f3f 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -72,6 +72,8 @@ #define MD5_APPEND(pms,buf,len) pj_md5_update(pms, (const pj_uint8_t*)buf, len) +SIPAccount defaultAccount("default"); + ManagerImpl::ManagerImpl (void) : _hasTriedToRegister(false), _config(), _currentCallId2(), _currentCallMutex(), _codecBuilder(NULL), _audiodriver(NULL), @@ -3271,10 +3273,9 @@ std::map<std::string, std::string> ManagerImpl::getAccountDetails ( Account * account; if(!(account = _accountMap[accountID])) { - _warn("Manager: Cannot getAccountDetails on a non-existing accountID %s.", accountID.c_str()); - // return an empty map - std::map<std::string, std::string> a; - return a; + _debug("Manager: Get account details on a non-existing accountID %s. Returning default", accountID.c_str()); + // return a default map + return defaultAccount.getAccountDetails(); } else return account->getAccountDetails(); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 5b7ef192c2..d2cb0e0178 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -84,6 +84,7 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _regc (NULL) , _bRegister (false) , _registrationExpire ("") + , _interface("default") , _publishedSameasLocal (true) , _publishedIpAddress ("") , _localPort (atoi (DEFAULT_SIP_PORT)) @@ -115,7 +116,6 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _tlsEnabled(false) , _stunEnabled(false) // , _routeSet("") - , _authenticationUsename("") // , _tlsListenerPort("5061") , _srtpEnabled(false) , _srtpKeyExchange("") @@ -128,6 +128,10 @@ SIPAccount::SIPAccount (const AccountID& accountID) _debug("Sip account constructor called"); + _stunServerName.ptr = NULL; + _stunServerName.slen = 0; + _stunPort = 0; + // IP2IP settings must be loaded before singleton instanciation, cannot call it here... // _link = SIPVoIPLink::instance (""); @@ -178,7 +182,7 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { Conf::ScalarNode sameasLocal(_publishedSameasLocal ? "true" : "false"); Conf::ScalarNode resolveOnce(_resolveOnce ? "true" : "false"); Conf::ScalarNode codecs(_startupCodecStr); - Conf::ScalarNode stunServer(std::string(_stunServerName.ptr, _stunServerName.slen)); + Conf::ScalarNode stunServer(_stunServer); Conf::ScalarNode stunEnabled(_stunEnabled ? "true" : "false"); Conf::ScalarNode displayName(_displayName); Conf::ScalarNode dtmfType(_dtmfType==0 ? "overrtp" : "sipinfo"); @@ -489,9 +493,8 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det setPublishedAddress(publishedAddress); setLocalPort(atoi(localPort.data())); setPublishedPort(atoi(publishedPort.data())); - // sipaccount->setStunServerName - // sipaccount->setStunServer(); - // sipaccount->setStunEnable(); + setStunServer(stunServer); + setStunEnabled((stunEnable == "true")); setResolveOnce((resolveOnce.compare("true")==0) ? true : false); setRegistrationExpire(registrationExpire); @@ -580,12 +583,11 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det std::map<std::string, std::string> SIPAccount::getAccountDetails() { - _debug("SipAccount: get account details %s", _accountID.c_str()); + _debug("SipAccount: get account details %s", _accountID.c_str()); std::map<std::string, std::string> a; a.insert(std::pair<std::string, std::string>(ACCOUNT_ID, _accountID)); - // The IP profile does not allow to set an alias (_accountID == IP2IP_PROFILE) ? a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ALIAS, IP2IP_PROFILE)) : @@ -621,6 +623,8 @@ std::map<std::string, std::string> SIPAccount::getAccountDetails() a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_CODE, registrationStateCode)); a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_DESCRIPTION, registrationStateDescription)); + _debug("OK for default"); + // Add sip specific details if(getType() == "SIP") { @@ -639,7 +643,7 @@ std::map<std::string, std::string> SIPAccount::getAccountDetails() std::stringstream publishedport; publishedport << getPublishedPort(); a.insert(std::pair<std::string, std::string>(PUBLISHED_PORT, publishedport.str())); a.insert(std::pair<std::string, std::string>(STUN_ENABLE, isStunEnabled() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(STUN_SERVER, std::string(getStunServerName().ptr, getStunServerName().slen))); + a.insert(std::pair<std::string, std::string>(STUN_SERVER, getStunServer())); a.insert(std::pair<std::string, std::string>(ACCOUNT_DTMF_TYPE, (getDtmfType() == 0) ? "0" : "1")); a.insert(std::pair<std::string, std::string>(SRTP_KEY_EXCHANGE, getSrtpKeyExchange())); @@ -651,6 +655,8 @@ std::map<std::string, std::string> SIPAccount::getAccountDetails() a.insert(std::pair<std::string, std::string>(ZRTP_HELLO_HASH, getZrtpHelloHash() ? "true" : "false")); a.insert(std::pair<std::string, std::string>(ZRTP_NOT_SUPP_WARNING, getZrtpNotSuppWarning() ? "true" : "false")); + _debug("OK for default again"); + // TLS listener is unique and parameters are modified through IP2IP_PROFILE std::stringstream tlslistenerport; tlslistenerport << getTlsListenerPort(); @@ -784,17 +790,14 @@ int SIPAccount::registerVoIPLink() initCredential(); // Init TLS settings if the user wants to use TLS - bool tlsEnabled = false; - - if (tlsEnabled) { + if (_tlsEnabled) { _transportType = PJSIP_TRANSPORT_TLS; initTlsConfiguration(); } // Init STUN settings for this account if the user selected it - bool stunEnabled = _stunEnabled; - if (stunEnabled) { + if (_stunEnabled) { _transportType = PJSIP_TRANSPORT_START_OTHER; initStunConfiguration (); } diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index fb47d8812d..cf5a81c491 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -289,8 +289,10 @@ class SIPAccount : public Account * file, that can be used directly by PJSIP to initialize * an alternate UDP transport. */ - inline pj_str_t getStunServerName(void) { return _stunServerName; } - inline void setStunServerName (pj_str_t srv) { _stunServerName = srv; } + inline std::string getStunServer(void) { return _stunServer; } + inline void setStunServer (std::string srv) { _stunServer = srv; } + + inline pj_str_t getStunServerName(void) { return _stunServerName; } /** * @return pj_uint8_t structure, filled from the configuration @@ -597,7 +599,7 @@ class SIPAccount : public Account // a sip transport. pjsip_tls_setting * _tlsSetting; - // The STUN server name, if applicable + // The STUN server name, if applicable for internal use only pj_str_t _stunServerName; // The STUN server port, if applicable @@ -628,8 +630,6 @@ class SIPAccount : public Account // std::string _routeset; // std::string _realm; - std::string _authenticationUsename; - // std::string _tlsListenerPort; // std::string _routeSet; // std::string _dtmfType; -- GitLab From 665bac7dab8387a84575c9f8ac70d9bb9534a641 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 14:00:56 -0400 Subject: [PATCH 179/197] [#3649] Fix new account configuration dialog loading --- sflphone-client-gnome/src/config/accountconfigdialog.c | 8 +++++--- sflphone-common/src/sip/sipaccount.cpp | 4 ---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 97c0bb1344..7323ba0b4c 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -443,7 +443,7 @@ static void fill_treeview_with_credential (GtkListStore * credentialStore, accou { GtkTreeIter iter; gtk_list_store_clear(credentialStore); - + /* This is the default, undeletable credential */ /* // gtk_list_store_append (credentialStore, &iter); @@ -471,11 +471,11 @@ static void fill_treeview_with_credential (GtkListStore * credentialStore, accou g_signal_handlers_disconnect_by_func (G_OBJECT(entryUsername), G_CALLBACK(update_credential_cb), NULL); } - if(account->credential_information == NULL) { + */ + if(account->credential_information == NULL) { DEBUG("No credential defined"); return; } - */ unsigned int i; for(i = 0; i < account->credential_information->len; i++) @@ -816,7 +816,9 @@ GtkWidget* create_credential_widget (account_t **a) { gtk_container_add(GTK_CONTAINER(scrolledWindowCredential), treeViewCredential); + DEBUG("Credential pas ok"); fill_treeview_with_credential(credentialStore, *a); + DEBUG("Credential ok"); /* Credential Buttons */ hbox = gtk_hbox_new(FALSE, 10); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index d2cb0e0178..8549bb95c9 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -623,8 +623,6 @@ std::map<std::string, std::string> SIPAccount::getAccountDetails() a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_CODE, registrationStateCode)); a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_DESCRIPTION, registrationStateDescription)); - _debug("OK for default"); - // Add sip specific details if(getType() == "SIP") { @@ -655,8 +653,6 @@ std::map<std::string, std::string> SIPAccount::getAccountDetails() a.insert(std::pair<std::string, std::string>(ZRTP_HELLO_HASH, getZrtpHelloHash() ? "true" : "false")); a.insert(std::pair<std::string, std::string>(ZRTP_NOT_SUPP_WARNING, getZrtpNotSuppWarning() ? "true" : "false")); - _debug("OK for default again"); - // TLS listener is unique and parameters are modified through IP2IP_PROFILE std::stringstream tlslistenerport; tlslistenerport << getTlsListenerPort(); -- GitLab From c501dfe217238aab01a7bacd972fc9c9509afe91 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 14:51:54 -0400 Subject: [PATCH 180/197] [#3649] Fix account's codec configuration list save --- sflphone-common/src/account.cpp | 12 ++++-------- sflphone-common/src/account.h | 5 ++--- sflphone-common/src/dbus/configurationmanager.cpp | 3 +-- sflphone-common/src/iax/iaxaccount.cpp | 4 ++-- sflphone-common/src/sip/sipaccount.cpp | 6 +++--- 5 files changed, 12 insertions(+), 18 deletions(-) diff --git a/sflphone-common/src/account.cpp b/sflphone-common/src/account.cpp index ca278d3caf..df26904f5b 100644 --- a/sflphone-common/src/account.cpp +++ b/sflphone-common/src/account.cpp @@ -39,7 +39,7 @@ Account::Account (const AccountID& accountID, std::string type) : , _enabled (true) , _type (type) , _codecOrder () - , _startupCodecStr("") + , _codecStr("") , _displayName("") , _useragent("SFLphone") { @@ -75,7 +75,7 @@ void Account::setRegistrationState (RegistrationState state) { void Account::loadAudioCodecs (void) { // if the user never set the codec list, use the default configuration for this account - if(_startupCodecStr == "") { + if(_codecStr == "") { _info ("Account: use the default order"); Manager::instance ().getCodecDescriptorMap ().setDefaultOrder(); } @@ -84,7 +84,7 @@ void Account::loadAudioCodecs (void) { std::vector<std::string> active_list = Manager::instance ().retrieveActiveCodecs(); // This property is now set per account basis // std::string s = Manager::instance ().getConfigString (_accountID, "ActiveCodecs"); - setActiveCodecs (Manager::instance ().unserialize (_startupCodecStr)); + setActiveCodecs (Manager::instance ().unserialize (_codecStr)); } } @@ -107,10 +107,6 @@ void Account::setActiveCodecs (const std::vector <std::string> &list) { } // setConfig - std::string s = Manager::instance ().serialize (list); - - // Set the config per account - Manager::instance().setConfig (_accountID, "ActiveCodecs", s); - + _codecStr = Manager::instance ().serialize (list); } diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h index 4180918cbe..183b6789b1 100644 --- a/sflphone-common/src/account.h +++ b/sflphone-common/src/account.h @@ -260,7 +260,6 @@ class Account : public Serializable{ * @return CodecOrder& The list that reflects the user's choice */ inline CodecOrder& getActiveCodecs() { return _codecOrder; } - void setActiveCodecs (const std::vector <std::string>& list); inline std::string getDisplayName(void) { return _displayName; } @@ -341,9 +340,9 @@ class Account : public Serializable{ /** * List of codec obtained when parsing configuration and used - * to generate codec order list, should not be used elsewhere. + * to generate codec order list */ - std::string _startupCodecStr; + std::string _codecStr; // Display Name that can be used in SIP URI. std::string _displayName; diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index 8c8b0fdca1..6226376896 100755 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -374,8 +374,7 @@ std::vector<std::string> ConfigurationManager::getCodecList(void) { std::vector<std::string> list; - CodecsMap codecs = - Manager::instance().getCodecDescriptorMap().getCodecsMap(); + CodecsMap codecs = Manager::instance().getCodecDescriptorMap().getCodecsMap(); CodecsMap::iterator iter = codecs.begin(); while (iter != codecs.end()) { diff --git a/sflphone-common/src/iax/iaxaccount.cpp b/sflphone-common/src/iax/iaxaccount.cpp index 5b75b8dd69..73c04ca0e5 100644 --- a/sflphone-common/src/iax/iaxaccount.cpp +++ b/sflphone-common/src/iax/iaxaccount.cpp @@ -62,7 +62,7 @@ void IAXAccount::serialize(Conf::YamlEmitter *emitter) Conf::ScalarNode type(Account::_type); Conf::ScalarNode mailbox("97"); - Conf::ScalarNode codecs(_startupCodecStr); + Conf::ScalarNode codecs(_codecStr); Conf::ScalarNode displayName(_displayName); accountmap.setKeyValue(aliasKey, &alias); @@ -108,7 +108,7 @@ void IAXAccount::unserialize(Conf::MappingNode *map) // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); val = (Conf::ScalarNode *)(map->getValue(codecsKey)); - if(val) { _startupCodecStr = val->getValue(); val = NULL; } + if(val) { _codecStr = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(displayNameKey)); if(val) { _displayName = val->getValue(); val = NULL; } diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 8549bb95c9..105aedbaf5 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -180,8 +180,8 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { std::stringstream publicportstr; publicportstr << _publishedPort; Conf::ScalarNode publishPort(publicportstr.str()); Conf::ScalarNode sameasLocal(_publishedSameasLocal ? "true" : "false"); - Conf::ScalarNode resolveOnce(_resolveOnce ? "true" : "false"); - Conf::ScalarNode codecs(_startupCodecStr); + Conf::ScalarNode resolveOnce(_resolveOnce ? "true" : "false"); + Conf::ScalarNode codecs(_codecStr); Conf::ScalarNode stunServer(_stunServer); Conf::ScalarNode stunEnabled(_stunEnabled ? "true" : "false"); Conf::ScalarNode displayName(_displayName); @@ -297,7 +297,7 @@ void SIPAccount::unserialize(Conf::MappingNode *map) // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); val = (Conf::ScalarNode *)(map->getValue(codecsKey)); - if(val) { _startupCodecStr = val->getValue(); val = NULL; } + if(val) { _codecStr = val->getValue(); val = NULL; } val = (Conf::ScalarNode *)(map->getValue(expireKey)); if(val) { _registrationExpire = val->getValue(); val = NULL; } -- GitLab From c4ba568f9572e5c23bbdccf952fe698eb4d443f2 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 15:16:50 -0400 Subject: [PATCH 181/197] [#3649] Fix credential in client for new accounts --- .../src/config/accountconfigdialog.c | 53 +++++++++++-------- sflphone-common/src/managerimpl.cpp | 3 ++ 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 7323ba0b4c..922b4a9aed 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -190,45 +190,51 @@ static GPtrArray* getNewCredential (GHashTable * properties) { gchar *password; GHashTable * new_table; + DEBUG("shit"); + + if(valid == FALSE) { + DEBUG("Gtk tree model iter is not valid") + return NULL; + } + gtk_tree_model_get (GTK_TREE_MODEL(credentialStore), &iter, - COLUMN_CREDENTIAL_REALM, &realm, - COLUMN_CREDENTIAL_USERNAME, &username, - COLUMN_CREDENTIAL_PASSWORD, &password, - -1); + COLUMN_CREDENTIAL_REALM, &realm, + COLUMN_CREDENTIAL_USERNAME, &username, + COLUMN_CREDENTIAL_PASSWORD, &password, + -1); + DEBUG("shit"); g_hash_table_insert(properties, g_strdup(ACCOUNT_REALM), realm); // better use the current_username as it is the account username in the // g_hash_table_insert(properties, g_strdup(ACCOUNT_AUTHENTICATION_USERNAME), username); g_hash_table_insert(properties, g_strdup(ACCOUNT_AUTHENTICATION_USERNAME), current_username); - + // Do not change the password if nothing has been changed by the user if (g_strcasecmp (password, PW_HIDDEN) != 0) - g_hash_table_insert(properties, g_strdup(ACCOUNT_PASSWORD), password); - - + g_hash_table_insert(properties, g_strdup(ACCOUNT_PASSWORD), password); valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(credentialStore), &iter); - + while (valid) { - gtk_tree_model_get (GTK_TREE_MODEL(credentialStore), &iter, - COLUMN_CREDENTIAL_REALM, &realm, - COLUMN_CREDENTIAL_USERNAME, &username, - COLUMN_CREDENTIAL_PASSWORD, &password, - -1); - - DEBUG ("Row %d: %s %s %s", row_count, username, password, realm); + gtk_tree_model_get (GTK_TREE_MODEL(credentialStore), &iter, + COLUMN_CREDENTIAL_REALM, &realm, + COLUMN_CREDENTIAL_USERNAME, &username, + COLUMN_CREDENTIAL_PASSWORD, &password, + -1); - new_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); - g_hash_table_insert(new_table, g_strdup(ACCOUNT_REALM), realm); - g_hash_table_insert(new_table, g_strdup(ACCOUNT_USERNAME), username); - g_hash_table_insert(new_table, g_strdup(ACCOUNT_PASSWORD), password); + DEBUG ("Row %d: %s %s %s", row_count, username, password, realm); - g_ptr_array_add (credential_array, new_table); + new_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); + g_hash_table_insert(new_table, g_strdup(ACCOUNT_REALM), realm); + g_hash_table_insert(new_table, g_strdup(ACCOUNT_USERNAME), username); + g_hash_table_insert(new_table, g_strdup(ACCOUNT_PASSWORD), password); - row_count ++; + g_ptr_array_add (credential_array, new_table); + + row_count ++; - valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(credentialStore), &iter); + valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(credentialStore), &iter); } return credential_array; @@ -1493,6 +1499,7 @@ void show_account_window (account_t * a) { */ dbus_delete_all_credential(currentAccount); + DEBUG("Config: Get new credentials"); GPtrArray * credential = getNewCredential(currentAccount->properties); currentAccount->credential_information = credential; if(currentAccount->credential_information != NULL) { diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 1912b82f3f..a87c5ffb54 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3485,6 +3485,9 @@ void ManagerImpl::deleteAllCredential (const AccountID& accountID) { _debug("Manager: delete all credential"); Account *account = getAccount(accountID); + + if(!account) + return; if(account->getType() != "SIP") return; -- GitLab From a5a5d9b8fbe3ae313242b5a6d4b56d19ed8d9cba Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 15:42:59 -0400 Subject: [PATCH 182/197] [#3649] Fix manager's addAccount method --- sflphone-common/src/managerimpl.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index a87c5ffb54..dbe1284aa3 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1418,6 +1418,11 @@ bool ManagerImpl::saveConfig (void) { emitter = new Conf::YamlEmitter("sequenceEmitter.yml"); while(iter != _accountMap.end()) { + _debug("Saving account: %s", iter->first.c_str()); + if(iter->first == "") { + iter++; + continue; + } iter->second->serialize(emitter); iter++; } @@ -3441,7 +3446,7 @@ std::string ManagerImpl::addAccount ( // Get the type accountType = (*details.find(CONFIG_ACCOUNT_TYPE)).second; - _debug ("%s", newAccountID.c_str()); + _debug ("Manager: Adding account %s", newAccountID.c_str()); /** @todo Verify the uniqueness, in case a program adds accounts, two in a row. */ @@ -3459,7 +3464,7 @@ std::string ManagerImpl::addAccount ( _accountMap[newAccountID] = newAccount; - setAccountDetails(accountID.str(), details); + newAccount->setAccountDetails(details); // Add the newly created account in the account order list account_list = preferences.getAccountOrder(); -- GitLab From bb9135b9e909906d1de78f9167e04f8b3e2a7f0f Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 15:47:31 -0400 Subject: [PATCH 183/197] [#3649] Remove old load account configuration method --- sflphone-common/src/managerimpl.cpp | 79 ----------------------------- 1 file changed, 79 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index dbe1284aa3..c84a3c206e 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3597,85 +3597,6 @@ short ManagerImpl::loadAccountMap () { _debug ("Manager: Loading account map"); int nbAccount = buildConfiguration(); - - /* - short nbAccount = 0; - TokenList sections = _config.getSections(); - std::string accountType; - Account *tmpAccount = 0; - std::vector<std::string> account_order; - - TokenList::iterator iter = sections.begin(); - - // Those calls that are placed to an uri that cannot be - // associated to an account are using that special account. - // An account, that is not account, in the sense of - // registration. This is useful since the Account object - // provides a handful of method that simplifies URI creation - // and loading of various settings. - _directIpAccount = AccountCreator::createAccount( - AccountCreator::SIP_DIRECT_IP_ACCOUNT, ""); - - _debug ("Create default \"account\" (used as default UDP transport)"); - if (_directIpAccount == NULL) { - - _debug ("Failed to create default \"account\""); - } else { - - _accountMap[IP2IP_PROFILE] = _directIpAccount; - - // Force IP2IP settings to be loaded to be loaded - // No registration in the sense of the REGISTER method is performed. - _directIpAccount->registerVoIPLink(); - - // SIPVoIPlink is used as a singleton, it is the first call to instance here - // The SIP library initialization is done in the SIPVoIPLink constructor - // We need the IP2IP settings to be loaded at this time as they are used - // for default sip transport - - // _directIpAccount->setVoIPLink(SIPVoIPLink::instance ("")); - _directIpAccount->setVoIPLink(); - - } - - // initialize other accounts - while (iter != sections.end()) { - // Check if it starts with "Account:" (SIP and IAX pour le moment) - if ((int) (iter->find("Account:")) != 0) { - iter++; - continue; - } - - accountType = getConfigString(*iter, CONFIG_ACCOUNT_TYPE); - - if (accountType == "SIP") { - tmpAccount = AccountCreator::createAccount( - AccountCreator::SIP_ACCOUNT, *iter); - } - - else if (accountType == "IAX") { - tmpAccount = AccountCreator::createAccount( - AccountCreator::IAX_ACCOUNT, *iter); - } - - else { - _error ("Unknown %s param in config file (%s)", CONFIG_ACCOUNT_TYPE, accountType.c_str()); - } - - if (tmpAccount != NULL) { - _debug ("Loading account %s ", iter->c_str()); - _accountMap[iter->c_str()] = tmpAccount; - // tmpAccount->setVoIPLink(SIPVoIPLink::instance ("")); - tmpAccount->setVoIPLink(); - nbAccount++; - } - - iter++; - } - - _debug ("nb account loaded %i \n", nbAccount); - */ - return nbAccount; } short ManagerImpl::buildConfiguration() { -- GitLab From dd294a6cc7702ed8ed11d951143724cc9699f6e0 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 15:49:39 -0400 Subject: [PATCH 184/197] [#3649] Remove okd buildConfiguration from yaml parser --- sflphone-common/src/config/yamlparser.cpp | 58 ----------------------- 1 file changed, 58 deletions(-) diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index a132d08f7c..62f9ee23a4 100644 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -467,62 +467,4 @@ void YamlParser::mainNativeDataMapping(MappingNode *map) { _debug("Done"); } - /* -void YamlParser::buildAccounts(SequenceNode *seq) { - - // Each element in sequence is a new account to create - Sequence::iterator iterSeq = seq->getSequence()->begin(); - - MappingNode *map; - - Key accTypeKey("type"); - while(iterSeq != seq->getSequence()->end()) { - - map = (MappingNode *)(*iterSeq); - - ScalarNode * val = (ScalarNode *)(map->getValue(accTypeKey)); - Value accountType = val->getValue(); - - iterSeq++; - - if (accountType == "sip") { - // tmpAccount = AccountCreator::createAccount(AccountCreator::SIP_ACCOUNT, *iter); - _debug("Account is SIP!!!"); - } - else if (accountType == "iax") { - // tmpAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT, *iter); - } - - - std::string accountType; - - accountType = getConfigString(*iter, CONFIG_ACCOUNT_TYPE); - - if (accountType == "SIP") { - tmpAccount = AccountCreator::createAccount( - AccountCreator::SIP_ACCOUNT, *iter); - } - - else if (accountType == "IAX") { - tmpAccount = AccountCreator::createAccount( - AccountCreator::IAX_ACCOUNT, *iter); - } - - else { - _error ("Unknown %s param in config file (%s)", CONFIG_ACCOUNT_TYPE, accountType.c_str()); - } - - if (tmpAccount != NULL) { - _debug ("Loading account %s ", iter->c_str()); - _accountMap[iter->c_str()] = tmpAccount; - // tmpAccount->setVoIPLink(SIPVoIPLink::instance ("")); - tmpAccount->setVoIPLink(); - nbAccount++; - } - - iter++; - */ -// } - -//} } -- GitLab From 74016d29d9377b380180a9f16c8659043a75b269 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 21:57:39 -0400 Subject: [PATCH 185/197] [#3649] Fix configuration loading sequence --- sflphone-common/src/accountcreator.cpp | 17 +- sflphone-common/src/managerimpl.cpp | 265 +++++++++++++++++-------- sflphone-common/src/managerimpl.h | 3 +- sflphone-common/src/preferences.cpp | 6 + sflphone-common/src/sip/sipaccount.cpp | 4 +- 5 files changed, 203 insertions(+), 92 deletions(-) diff --git a/sflphone-common/src/accountcreator.cpp b/sflphone-common/src/accountcreator.cpp index 91adfdb390..8bf74f3cb3 100644 --- a/sflphone-common/src/accountcreator.cpp +++ b/sflphone-common/src/accountcreator.cpp @@ -51,22 +51,25 @@ AccountCreator::createAccount (AccountType type, AccountID accountID) switch (type) { case SIP_ACCOUNT: { - _debug("createaccount accountID %s", accountID.c_str()); + _debug("AccountCreator: create account %s", accountID.c_str()); return new SIPAccount (accountID); - } break; - + } case SIP_DIRECT_IP_ACCOUNT: { - _debug("createaccount accountID IP2IP_PROFILE"); + _debug("AccountCreator: create account IP2IP_PROFILE"); return new SIPAccount (IP2IP_PROFILE); break; } #ifdef USE_IAX - case IAX_ACCOUNT: - return new IAXAccount (accountID); - break; + case IAX_ACCOUNT: { + _debug("AccountCreator: create account %s", accountID.c_str()); + return new IAXAccount (accountID); + break; + } #endif + default: + _error("AccountCreator: Error: unknown account type"); } return 0; diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index c84a3c206e..f657216217 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -113,10 +113,10 @@ ManagerImpl::~ManagerImpl (void) { void ManagerImpl::init () { - _debug("Manager: Init"); + _debug("Manager: Init"); // Load accounts, init map - loadAccountMap(); + buildConfiguration(); _debug("Manager: account map loaded"); @@ -1408,17 +1408,18 @@ void ManagerImpl::removeStream (const CallID& call_id) { //THREAD=Main bool ManagerImpl::saveConfig (void) { - _debug ("Saving Configuration to XDG directory %s ... ", _path.c_str()); + _debug ("Manager: Saving Configuration to XDG directory %s ... ", _path.c_str()); audioPreference.setVolumemic(getMicVolume()); audioPreference.setVolumespkr(getSpkrVolume()); AccountMap::iterator iter = _accountMap.begin(); try{ - emitter = new Conf::YamlEmitter("sequenceEmitter.yml"); + // emitter = new Conf::YamlEmitter("sequenceEmitter.yml"); + emitter = new Conf::YamlEmitter(_path.c_str()); while(iter != _accountMap.end()) { - _debug("Saving account: %s", iter->first.c_str()); + _debug("Manager: Saving account: %s", iter->first.c_str()); if(iter->first == "") { iter++; continue; @@ -1441,7 +1442,7 @@ bool ManagerImpl::saveConfig (void) { _error("ConfigTree: %s", e.what()); } - _setupLoaded = _config.saveConfigTree(_path.data()); + // _setupLoaded = _config.saveConfigTree(_path.data()); return _setupLoaded; } @@ -2039,6 +2040,8 @@ int ManagerImpl::createSettingsPath (void) { // Load user's configuration _path = _path + DIR_SEPARATOR_STR + PROGNAME + "rc"; + _path = "configurationexample.yml"; + return 1; } @@ -2046,12 +2049,14 @@ int ManagerImpl::createSettingsPath (void) { * Initialization: Main Thread */ void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) { - _debug ("Manager: InitConfigFile"); + + _debug ("Manager: Init config file"); // Default values, that will be overwritten by the call to // 'populateFromFile' below. // Peer to peer settings + /* _config.addDefaultValue(std::pair<std::string, std::string>(SRTP_ENABLE, FALSE_STR), IP2IP_PROFILE); _config.addDefaultValue(std::pair<std::string, std::string>( @@ -2110,6 +2115,7 @@ void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) { DFT_STUN_SERVER), IP2IP_PROFILE); _config.addDefaultValue(std::pair<std::string, std::string>( CONFIG_ACCOUNT_ALIAS, EMPTY_FIELD), IP2IP_PROFILE); + */ // Init display name to the username under which // this sflphone instance is running. @@ -2123,6 +2129,7 @@ void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) { diplayName = user_info->pw_name; } + /* _config.addDefaultValue(std::pair<std::string, std::string>(DISPLAY_NAME, diplayName), IP2IP_PROFILE); @@ -2235,16 +2242,81 @@ void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) { PHONE_NUMBER_HOOK_ENABLED, FALSE_STR), HOOKS); _config.addDefaultValue(std::pair<std::string, std::string>( PHONE_NUMBER_HOOK_ADD_PREFIX, EMPTY_FIELD), HOOKS); + */ - std::string path; + std::string path; // = "configurationexample.yml"; // Loads config from ~/.sflphone/sflphonedrc or so.. if (createSettingsPath() == 1 && load_user_value) { + (alternate == "") ? path = _path : path = alternate; std::cout << path << std::endl; _exist = _config.populateFromFile(path); } + _debug("Manager: configuration file path: %s", path.c_str()); + + + bool fileExist = true; + bool out = false; + + if (path.empty()) { + _error("Manager: Error: XDG config file path is empty!"); + fileExist = false; + } + + std::fstream file; + + file.open (path.data(), std::fstream::in); + + if (!file.is_open()) { + _debug("Manager: File %s not opened, create new one", path.c_str()); + file.open (path.data(), std::fstream::out); + out = true; + + if (!file.is_open()) { + _error("Manager: Error: could not create empty configurationfile!"); + fileExist = false; + } + + file.close(); + + fileExist = false; + } + + // get length of file: + file.seekg (0, std::ios::end); + int length = file.tellg(); + + file.seekg (0, std::ios::beg); + + if (length <= 0) { + _debug("Manager: Configuration file length is empty", length); + file.close(); + fileExist = false; // should load config + } + if(fileExist) { + try { + + // parser = new Conf::YamlParser("sequenceParser.yml"); + parser = new Conf::YamlParser(_path.c_str()); + + parser->serializeEvents(); + + parser->composeEvents(); + + parser->constructNativeData(); + + _setupLoaded = true; + + _debug("Manager: Configuration file parsed successfully"); + } + catch (Conf::YamlParserException &e) { + _error("Manager: %s", e.what()); + } + } + + /* // Globally shared default values (not to be populated from file) _config.addDefaultValue(std::pair<std::string, std::string>(HOSTNAME, EMPTY_FIELD)); @@ -2284,8 +2356,11 @@ void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) { _config.addDefaultValue(std::pair<std::string, std::string>( CONFIG_ACCOUNT_TYPE, DEFAULT_ACCOUNT_TYPE)); + */ - _setupLoaded = (_exist == 2) ? false : true; + // _setupLoaded = (fileExist != 1) ? false : true; + + // _setupLoaded = (_exist == 2) ? false : true; } /** @@ -3203,7 +3278,7 @@ bool ManagerImpl::setConfig (const std::string& section, } void ManagerImpl::setAccountsOrder (const std::string& order) { - _debug ("Setcreate accounts order : %s", order.c_str()); + _debug ("----------------------------------------- Manager: Set accounts order : %s", order.c_str()); // Set the new config preferences.setAccountOrder(order); @@ -3458,7 +3533,7 @@ std::string ManagerImpl::addAccount ( newAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT, newAccountID); } else { - _debug ("Unknown %s param when calling addAccount(): %s", CONFIG_ACCOUNT_TYPE, accountType.c_str()); + _error("Unknown %s param when calling addAccount(): %s", CONFIG_ACCOUNT_TYPE, accountType.c_str()); return ""; } @@ -3476,6 +3551,15 @@ std::string ManagerImpl::addAccount ( preferences.setAccountOrder(account_list); } + else { + newAccountID += "/"; + account_list = newAccountID; + preferences.setAccountOrder(account_list); + } + + _debug("AccountMap: %s", account_list.c_str()); + + newAccount->setVoIPLink(); saveConfig(); @@ -3585,43 +3669,96 @@ std::vector<std::string> ManagerImpl::loadAccountOrder (void) { std::string account_list; std::vector<std::string> account_vect; - Conf::Key accountOrder("order"); - account_list = preferences.getAccountOrder(); + _debug("Manager: Load sccount order %s", account_list.c_str()); + return unserialize(account_list); } -short ManagerImpl::loadAccountMap () { +short ManagerImpl::buildConfiguration () { + + _debug ("Manager: Loading account map"); - _debug ("Manager: Loading account map"); + loadIptoipProfile(); - int nbAccount = buildConfiguration(); + int nbAccount = loadAccountMap(); + + return nbAccount; } -short ManagerImpl::buildConfiguration() { +void ManagerImpl::loadIptoipProfile() { - _debug("Manager: Build Accounts"); + _debug ("Manager: Create default \"account\" (used as default UDP transport)"); - // Conf::YamlParser *parser; - Account *tmpAccount = NULL; - int nbAccount = 0; + // build a default IP2IP account with default parameters + _directIpAccount = AccountCreator::createAccount(AccountCreator::SIP_DIRECT_IP_ACCOUNT, ""); + _accountMap[IP2IP_PROFILE] = _directIpAccount; - try { + if (_directIpAccount == NULL) { + _error("Manager: Failed to create default \"account\""); + return; + } - parser = new Conf::YamlParser("sequenceParser.yml"); - - parser->serializeEvents(); + // If configuration file parsed, load saved preferences + if (_setupLoaded) { - parser->composeEvents(); + _debug("Manager: Loading IP2IP profile preferences from config"); - parser->constructNativeData(); - - } - catch (Conf::YamlParserException &e) { - _error("Manager: %s", e.what()); + Conf::SequenceNode *seq = parser->getAccountSequence(); + + Conf::Sequence::iterator iterIP2IP = seq->getSequence()->begin(); + Conf::Key accID("id"); + + // Iterate over every account maps + while(iterIP2IP != seq->getSequence()->end()) { + + Conf::MappingNode *map = (Conf::MappingNode *)(*iterIP2IP); + + // Get the account id + Conf::ScalarNode * val = (Conf::ScalarNode *)(map->getValue(accID)); + Conf::Value accountid = val->getValue(); + + // if ID is IP2IP, unserialize + if(accountid == "IP2IP") { + + try { + _directIpAccount->unserialize(map); + } + catch(SipAccountException &e) { + _error("Manager: %s", e.what()); + } + break; + } + + iterIP2IP++; + } } + // Force IP2IP settings to be loaded to be loaded + // No registration in the sense of the REGISTER method is performed. + _directIpAccount->registerVoIPLink(); + + // SIPVoIPlink is used as a singleton, it is the first call to instance here + // The SIP library initialization is done in the SIPVoIPLink constructor + // We need the IP2IP settings to be loaded at this time as they are used + // for default sip transport + + // _directIpAccount->setVoIPLink(SIPVoIPLink::instance ("")); + _directIpAccount->setVoIPLink(); + +} + +short ManagerImpl::loadAccountMap() { + + _debug("Manager: Load account map"); + + // Conf::YamlParser *parser; + int nbAccount = 0; + + if(!_setupLoaded) + return 0; + // build preferences preferences.unserialize((Conf::MappingNode *)(parser->getPreferenceSequence())); voipPreferences.unserialize((Conf::MappingNode *)(parser->getVoipPreferenceSequence())); @@ -3633,86 +3770,50 @@ short ManagerImpl::buildConfiguration() { // Each element in sequence is a new account to create Conf::Sequence::iterator iterSeq = seq->getSequence()->begin(); - Conf::Sequence::iterator iterIP2IP = seq->getSequence()->begin(); - - Conf::MappingNode *map; - + Conf::Key accTypeKey("type"); Conf::Key accID("id"); - // Build IP2IP first - Conf::Key iptoipID("IP2IP"); - - while(iterIP2IP != seq->getSequence()->end()) { - - map = (Conf::MappingNode *)(*iterSeq); - - Conf::ScalarNode * val = (Conf::ScalarNode *)(map->getValue(accID)); - Conf::Value accountid = val->getValue(); - - if(accountid == "IP2IP") { - - _directIpAccount = AccountCreator::createAccount(AccountCreator::SIP_DIRECT_IP_ACCOUNT, ""); - - _debug ("Manager: Create default \"account\" (used as default UDP transport)"); - if (_directIpAccount == NULL) { - _debug ("Manager: Failed to create default \"account\""); - } else { - - _accountMap[IP2IP_PROFILE] = _directIpAccount; - - // Force IP2IP settings to be loaded to be loaded - // No registration in the sense of the REGISTER method is performed. - _directIpAccount->registerVoIPLink(); - - // SIPVoIPlink is used as a singleton, it is the first call to instance here - // The SIP library initialization is done in the SIPVoIPLink constructor - // We need the IP2IP settings to be loaded at this time as they are used - // for default sip transport - - // _directIpAccount->setVoIPLink(SIPVoIPLink::instance ("")); - _directIpAccount->setVoIPLink(); - - break; - } - } - - iterIP2IP++; - } while(iterSeq != seq->getSequence()->end()) { - map = (Conf::MappingNode *)(*iterSeq); - + Account *tmpAccount = NULL; + Conf::MappingNode *map = (Conf::MappingNode *)(*iterSeq); + Conf::ScalarNode * val = (Conf::ScalarNode *)(map->getValue(accTypeKey)); Conf::Value accountType = val->getValue(); - + val = (Conf::ScalarNode *)(map->getValue(accID)); Conf::Value accountid = val->getValue(); - _debug("accountid: %s", accountid.c_str()); + _warn("Debug: %s", accountid.c_str()); if (accountType == "SIP" && accountid != "IP2IP") { + _debug("Manager: Create SIP account: %s", accountid.c_str()); tmpAccount = AccountCreator::createAccount(AccountCreator::SIP_ACCOUNT, accountid); } else if (accountType == "IAX" && accountid != "IP2IP") { + _debug("Manager: Create IAX account: %s", accountid.c_str()); tmpAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT, accountid); } if (tmpAccount != NULL) { - + try { tmpAccount->unserialize(map); } catch(SipAccountException &e) { _error("Manager: %s", e.what()); } - - _debug ("Manager: Loading account %s ", accountid.c_str()); + _accountMap[accountid] = tmpAccount; + _debug ("Manager: Loading account %s (size %d)", accountid.c_str(), _accountMap.size()); tmpAccount->setVoIPLink(); nbAccount++; } + else { + _error("Manager: Error: created account was NULL"); + } iterSeq++; } @@ -3721,7 +3822,7 @@ short ManagerImpl::buildConfiguration() { delete parser; } catch (Conf::YamlParserException &e) { - _error("AccountCreator: %s", e.what()); + _error("Manager: %s", e.what()); } parser = NULL; diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index 68bf3b84a7..a03bde90cb 100755 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -1242,13 +1242,14 @@ class ManagerImpl { Account * _directIpAccount; + void loadIptoipProfile(); + /** * Load the account from configuration * @return short Number of account */ short loadAccountMap(); - /** * Unload the account (delete them) */ diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp index 2c08c9cd12..2f7573c287 100644 --- a/sflphone-common/src/preferences.cpp +++ b/sflphone-common/src/preferences.cpp @@ -144,6 +144,8 @@ VoipPreference::~VoipPreference() {} void VoipPreference::serialize(Conf::YamlEmitter *emitter) { + _debug("VoipPreference: Serialize configuration"); + Conf::MappingNode preferencemap(NULL); Conf::ScalarNode playDtmf(_playDtmf ? "true" : "false"); @@ -333,6 +335,8 @@ AudioPreference::~AudioPreference() {} void AudioPreference::serialize(Conf::YamlEmitter *emitter) { + _debug("AudioPreference: Serialize configuration"); + Conf::MappingNode preferencemap(NULL); Conf::MappingNode alsapreferencemap(NULL); Conf::MappingNode pulsepreferencemap(NULL); @@ -387,6 +391,8 @@ void AudioPreference::serialize(Conf::YamlEmitter *emitter) void AudioPreference::unserialize(Conf::MappingNode *map) { + _debug("AudioPreference: Unserialize configuration"); + Conf::ScalarNode *val = NULL; val = (Conf::ScalarNode *)(map->getValue(cardinKey)); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 105aedbaf5..2b846b0393 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -112,7 +112,7 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _tlsRequireClientCertificate(false) , _tlsNegotiationTimeoutSec("") , _tlsNegotiationTimeoutMsec("") - , _stunServer("") + , _stunServer("stun.sflphone.org") , _tlsEnabled(false) , _stunEnabled(false) // , _routeSet("") @@ -278,7 +278,7 @@ void SIPAccount::unserialize(Conf::MappingNode *map) Conf::MappingNode *zrtpMap; Conf::MappingNode *credMap; - _debug("SipAccount: Unserialize"); + _debug("SipAccount: Unserialize %s", _accountID.c_str()); val = (Conf::ScalarNode *)(map->getValue(aliasKey)); if(val) { _alias = val->getValue(); val = NULL; } -- GitLab From 613da5236d86ea0ca6606b8ed41ea970633db71a Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Wed, 14 Jul 2010 22:04:15 -0400 Subject: [PATCH 186/197] [#3649] Use ~/.config as a file path for configuration file --- sflphone-common/sequenceParser.yml | 157 ---------------------------- sflphone-common/src/managerimpl.cpp | 5 +- 2 files changed, 2 insertions(+), 160 deletions(-) delete mode 100755 sflphone-common/sequenceParser.yml diff --git a/sflphone-common/sequenceParser.yml b/sflphone-common/sequenceParser.yml deleted file mode 100755 index 7bd7f793a5..0000000000 --- a/sflphone-common/sequenceParser.yml +++ /dev/null @@ -1,157 +0,0 @@ ---- -accounts: - - id: IP2IP - alias: - username: - password: - hostname: - enable: true - type: SIP - expire: 3600 - interface: default - port: 5060 - mailbox: - publishAddr: 0.0.0.0 - publishPort: 5060 - sameasLocal: true - resolveOnce: false - codecs: 0/9/110/111/112/ - stunServer: stun.sflphone.org - stunEnabled: false - displayName: Alexandre Savard - credential: - count: 0 - srtp: - enable: false - keyExchange: sdes - rtpFallback: false - zrtp: - displaySas: false - displaySasOnce: false - helloHashEnabled: false - notSuppWarning: false - tls: - tlsPort: 5061 - certificate: - calist: - ciphers: - enable: false - method: TLSv1 - timeout: 0 - password: - privateKey: - requireCertif: false - server: - verifyClient: false - verifyServer: false - - - id: Account:1278432417 - alias: sfl-181 - username: 181 - password: sfl-181pw - hostname: 192.168.50.3 - enable: true - type: SIP - expire: 3600 - interface: default - port: 5060 - mailbox: 97 - publishAddr: 192.168.50.182 - publishPort: 5060 - sameasLocal: true - resolveOnce: false - codecs: 0/9/110/111/112/ - stunServer: stun.sflphone.org - stunEnabled: false - displayName: Alexandre Savard - credential: - count: 0 - srtp: - enable: false - keyExchange: sdes - rtpFallback: false - zrtp: - displaySas: false - displaySasOnce: false - helloHashEnabled: false - notSuppWarning: false - tls: - tlsPort: 5061 - certificate: /home/msavard/Development/sflphone/sflphone-client-gnome/config.guess - calist: /home/msavard/Development/sflphone/sflphone-client-gnome/aclocal.m4 - ciphers: - enable: false - method: TLSv1 - timeout: 0 - password: - privateKey: /home/msavard/Development/sflphone/sflphone-client-gnome/config.log - requireCertif: true - server: - verifyClient: true - verifyServer: true - -addressbook: - photo: true - enabled: true - list: 1243608768.30329.0@emilou-desktop/1243456917.15690.23@emilou-desktop/ - maxResults: 25 - business: true - home: false - mobile: false - -audio: - alsa: - cardin: 0 - cardout: 0 - cardring: 0 - framesize: 20 - plugin: default - smplrate: 44100 - pulse: - devicePlayback: - deviceRecord: - deviceRingtone: - recordpath: /home/msavard/Bureau - ringchoice: /usr/share/sflphone/ringtones/konga.ul - volumemic: 100 - volumespkr: 100 - -hooks: - iax2Enabled: false - numberAddPrefix: false - numberEnabled: false - sipEnabled: false - urlCommand: x-www-browser - urlSipField: X-sflphone-url - -preferences: - order: Account:1278432417/ - audioApi: 0 - dialpadDisplay: 0 - historyEnabled: 1 - historyLimit: 30 - historyMaxCalls: 20 - notifyAll: true - notifyMails: false - zoneToneChoice: North America - registrationExpire: 180 - ringtoneEnabled: true - portNum: 5060 - searchBarDisplay: true - startHidden: 0 - volumeDisplay: 0 - windowHeight: 332 - windowPopup: 0 - windowPosition: 0 - windowWidth: 240 - zeroConfenable: false - md5Hash: false - -voipPreferences: - playDtmf: true - playTones: true - pulseLength: 250 - sendDtmfAs: 0 - symmetric: true - zidFile: sfl.zid -... \ No newline at end of file diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index f657216217..9d7b31a202 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2038,9 +2038,7 @@ int ManagerImpl::createSettingsPath (void) { } // Load user's configuration - _path = _path + DIR_SEPARATOR_STR + PROGNAME + "rc"; - - _path = "configurationexample.yml"; + _path = _path + DIR_SEPARATOR_STR + PROGNAME + ".yml"; return 1; } @@ -2269,6 +2267,7 @@ void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) { file.open (path.data(), std::fstream::in); if (!file.is_open()) { + _debug("Manager: File %s not opened, create new one", path.c_str()); file.open (path.data(), std::fstream::out); out = true; -- GitLab From 0780b0544897b1db4771e6da4a1a94003e8e6568 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 15 Jul 2010 09:07:50 -0400 Subject: [PATCH 187/197] [#3946] Add dependencies --- .../launchpad/sflphone-common/debian/control.jaunty | 4 ++-- .../launchpad/sflphone-common/debian/control.karmic | 4 ++-- .../launchpad/sflphone-common/debian/control.lucid | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/build-system/launchpad/sflphone-common/debian/control.jaunty b/tools/build-system/launchpad/sflphone-common/debian/control.jaunty index 8700719c00..246bf4f56c 100644 --- a/tools/build-system/launchpad/sflphone-common/debian/control.jaunty +++ b/tools/build-system/launchpad/sflphone-common/debian/control.jaunty @@ -2,13 +2,13 @@ Source: sflphone-common Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com> Section: gnome Priority: optional -Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev +Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev, libyaml-dev Standards-Version: 3.7.3 Package: sflphone-common Priority: optional Architecture: any -Depends: libsamplerate0, libexpat1 , libc6, libcommoncpp2-1.6-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.6-1, libspeexdsp1, libzrtpcpp-1.3-0, libssl0.9.8, libpcre3 +Depends: libsamplerate0, libexpat1 , libc6, libcommoncpp2-1.6-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.6-1, libspeexdsp1, libzrtpcpp-1.3-0, libssl0.9.8, libpcre3, libyaml-0-2 Replaces: sflphone Conflicts: sflphone Homepage: http://www.sflphone.org diff --git a/tools/build-system/launchpad/sflphone-common/debian/control.karmic b/tools/build-system/launchpad/sflphone-common/debian/control.karmic index 177306ed35..9b1561ed74 100644 --- a/tools/build-system/launchpad/sflphone-common/debian/control.karmic +++ b/tools/build-system/launchpad/sflphone-common/debian/control.karmic @@ -2,13 +2,13 @@ Source: sflphone-common Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com> Section: gnome Priority: optional -Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev +Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev, libyaml-dev Standards-Version: 3.7.3 Package: sflphone-common Priority: optional Architecture: any -Depends: libsamplerate0, libexpat1 , libc6, libccgnu2-1.7-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.7-0, libspeexdsp1, libzrtpcpp-1.4-0, libssl0.9.8, libpcre3 +Depends: libsamplerate0, libexpat1 , libc6, libccgnu2-1.7-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.7-0, libspeexdsp1, libzrtpcpp-1.4-0, libssl0.9.8, libpcre3, libyaml-0-2 Replaces: sflphone Conflicts: sflphone Homepage: http://www.sflphone.org diff --git a/tools/build-system/launchpad/sflphone-common/debian/control.lucid b/tools/build-system/launchpad/sflphone-common/debian/control.lucid index 177306ed35..9b1561ed74 100644 --- a/tools/build-system/launchpad/sflphone-common/debian/control.lucid +++ b/tools/build-system/launchpad/sflphone-common/debian/control.lucid @@ -2,13 +2,13 @@ Source: sflphone-common Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com> Section: gnome Priority: optional -Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev +Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev, libyaml-dev Standards-Version: 3.7.3 Package: sflphone-common Priority: optional Architecture: any -Depends: libsamplerate0, libexpat1 , libc6, libccgnu2-1.7-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.7-0, libspeexdsp1, libzrtpcpp-1.4-0, libssl0.9.8, libpcre3 +Depends: libsamplerate0, libexpat1 , libc6, libccgnu2-1.7-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.7-0, libspeexdsp1, libzrtpcpp-1.4-0, libssl0.9.8, libpcre3, libyaml-0-2 Replaces: sflphone Conflicts: sflphone Homepage: http://www.sflphone.org -- GitLab From 0b4e9f6e4d3e62b54af2ce36730ec43fa464c9fe Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 15 Jul 2010 09:27:04 -0400 Subject: [PATCH 188/197] [#3649] Remove useless debug info --- sflphone-common/src/config/yamlnode.cpp | 2 +- sflphone-common/src/config/yamlparser.cpp | 28 +++++++++++------------ sflphone-common/src/managerimpl.cpp | 14 ++++-------- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/sflphone-common/src/config/yamlnode.cpp b/sflphone-common/src/config/yamlnode.cpp index c494ea0443..7a28a6cfa6 100755 --- a/sflphone-common/src/config/yamlnode.cpp +++ b/sflphone-common/src/config/yamlnode.cpp @@ -79,7 +79,7 @@ YamlNode *MappingNode::getValue(Key key) return it->second; } else { - _debug("Could not fine %s", key.c_str()); + _debug("MappingNode: Could not find %s", key.c_str()); return NULL; } } diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index 62f9ee23a4..1274ddbf4d 100644 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -250,14 +250,14 @@ void YamlParser::processDocument() void YamlParser::processScalar(YamlNode *topNode) { - _debug("YamlParser: process scalar"); + // _debug("YamlParser: process scalar"); if(!topNode) throw YamlParserException("No container for scalar"); char buffer[1000]; snprintf(buffer, 1000, "%s", events[eventIndex].data.scalar.value); - _debug("and the scalar is: %s", buffer); + // _debug("and the scalar is: %s", buffer); ScalarNode *sclr = new ScalarNode(buffer, topNode); @@ -328,7 +328,7 @@ void YamlParser::processSequence(YamlNode *topNode) void YamlParser::processMapping(YamlNode *topNode) { - _debug("YamlParser: process mapping -----------------------------------------"); + // _debug("YamlParser: process mapping"); if(!topNode) throw YamlParserException("No container for mapping"); @@ -359,7 +359,7 @@ void YamlParser::processMapping(YamlNode *topNode) char buffer[1000]; snprintf(buffer, 1000, "%s", events[eventIndex].data.scalar.value); map->setTmpKey(Key(buffer)); - _debug("KEY %s", buffer); + // _debug("KEY %s", buffer); eventIndex++; @@ -396,15 +396,15 @@ void YamlParser::constructNativeData() { switch((*iter)->getType()){ case SCALAR: - _debug("construct scalar"); + // _debug("construct scalar"); throw YamlParserException("No scalar allowed at document level, expect a mapping"); break; case SEQUENCE: - _debug("construct sequence"); + // _debug("construct sequence"); throw YamlParserException("No sequence allowed at document level, expect a mapping"); break; case MAPPING: { - _debug("construct mapping"); + // _debug("construct mapping"); MappingNode *map = (MappingNode *)(*iter); mainNativeDataMapping(map); break; @@ -436,27 +436,27 @@ void YamlParser::mainNativeDataMapping(MappingNode *map) { _debug("Iterating: %s", iter->first.c_str()); if(accounts.compare(iter->first) == 0) { - _debug("Adding voip account sequence"); + _debug("YamlParser: Adding voip account preferences"); accountSequence = (SequenceNode *)(iter->second); } else if(addressbook.compare(iter->first) == 0) { - _debug("Adding voip addressbook sequence"); + _debug("YamlParser: Adding voip addressbook preference"); addressbookSequence = (SequenceNode *)(iter->second); } else if(audio.compare(iter->first) == 0) { - _debug("Adding voip audio sequence"); + _debug("YamlParser: Adding voip audio preference"); audioSequence = (SequenceNode *)(iter->second); } else if(hooks.compare(iter->first) == 0) { - _debug("Adding voip hooks sequence"); + _debug("YamlParser: Adding voip hooks preference"); hooksSequence = (SequenceNode *)(iter->second); } else if(preferences.compare(iter->first) == 0) { - _debug("Adding voip preference sequence"); + _debug("YamlParser: Adding voip preference preference"); preferenceSequence = (SequenceNode *)(iter->second); } else if(voiplink.compare(iter->first) == 0) { - _debug("Adding voip voip sequence"); + _debug("YamlParser: Adding voip voip preference"); voiplinkSequence = (SequenceNode *)(iter->second); } else @@ -464,7 +464,7 @@ void YamlParser::mainNativeDataMapping(MappingNode *map) { iter++; } - _debug("Done"); + // _debug("Done"); } } diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 9d7b31a202..371bf3026d 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -625,7 +625,7 @@ bool ManagerImpl::transferCall (const CallID& call_id, const std::string& to) { AccountID accountid; bool returnValue; - _info("Manager: Transfer call %s\n", call_id.c_str()); + _info("Manager: Transfer call %s", call_id.c_str()); CallID current_call_id = getCurrentCallId(); @@ -2915,7 +2915,7 @@ void ManagerImpl::switchAudioManager (void) { samplerate = _mainBuffer.getInternalSamplingRate(); framesize = audioPreference.getFramesize(); - _debug ("Mnager: samplerate: %i, framesize %i\n", samplerate, framesize); + _debug ("Manager: samplerate: %i, framesize %i", samplerate, framesize); alsaPlugin = audioPreference.getPlugin(); @@ -2992,7 +2992,7 @@ void ManagerImpl::audioSamplingRateChanged (void) { samplerate = _mainBuffer.getInternalSamplingRate(); framesize = audioPreference.getFramesize(); - _debug ("Mnager: samplerate: %i, framesize %i\n", samplerate, framesize); + _debug ("Mnager: samplerate: %i, framesize %i", samplerate, framesize); alsaPlugin = audioPreference.getPlugin(); @@ -3297,7 +3297,7 @@ std::vector<std::string> ManagerImpl::getAccountList () { // The IP2IP profile is always available, and first in the list iter = _accountMap.find(IP2IP_PROFILE); if (iter->second != NULL) { - _debug("PUSHING BACK %s", iter->first.c_str()); + // _debug("PUSHING BACK %s", iter->first.c_str()); // v.push_back(iter->first.data()); v.push_back(iter->second->getAccountID()); } @@ -3334,7 +3334,7 @@ std::vector<std::string> ManagerImpl::getAccountList () { != _accountMap.end()) { // If the account is valid if (iter->second != NULL && iter->first != IP2IP_PROFILE) { - _debug("PUSHING BACK %s\n", iter->first.c_str()); + //_debug("PUSHING BACK %s", iter->first.c_str()); // v.push_back(iter->first.data()); v.push_back(iter->second->getAccountID()); } @@ -3784,7 +3784,6 @@ short ManagerImpl::loadAccountMap() { val = (Conf::ScalarNode *)(map->getValue(accID)); Conf::Value accountid = val->getValue(); - _warn("Debug: %s", accountid.c_str()); if (accountType == "SIP" && accountid != "IP2IP") { _debug("Manager: Create SIP account: %s", accountid.c_str()); tmpAccount = AccountCreator::createAccount(AccountCreator::SIP_ACCOUNT, accountid); @@ -3810,9 +3809,6 @@ short ManagerImpl::loadAccountMap() { tmpAccount->setVoIPLink(); nbAccount++; } - else { - _error("Manager: Error: created account was NULL"); - } iterSeq++; } -- GitLab From e7518eb39812371f409a12a40f8b5ac33d4f0c8c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 15 Jul 2010 09:43:53 -0400 Subject: [PATCH 189/197] [#3649] Fix sipvoip client decrementation for default account --- sflphone-common/src/managerimpl.cpp | 1 + sflphone-common/src/sip/sipaccount.cpp | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 371bf3026d..355844ecde 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -72,6 +72,7 @@ #define MD5_APPEND(pms,buf,len) pj_md5_update(pms, (const pj_uint8_t*)buf, len) +// Default account used to get default parametersa if requested by client (to build ne account) SIPAccount defaultAccount("default"); ManagerImpl::ManagerImpl (void) : diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 2b846b0393..3ed3adbf5b 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -144,7 +144,8 @@ SIPAccount::SIPAccount (const AccountID& accountID) SIPAccount::~SIPAccount() { /* One SIP account less connected to the sip voiplink */ - dynamic_cast<SIPVoIPLink*> (_link)->decrementClients(); + if(_accountID != "default") + dynamic_cast<SIPVoIPLink*> (_link)->decrementClients(); /* Delete accounts-related information */ _regc = NULL; -- GitLab From 10c22dbe9d1ec4f06848e26956d854ef3b008897 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 15 Jul 2010 10:27:40 -0400 Subject: [PATCH 190/197] [#3946] Remove unusefull comments --- sflphone-common/src/managerimpl.cpp | 243 +------------------------ sflphone-common/src/preferences.cpp | 30 +-- sflphone-common/src/sip/sipaccount.cpp | 24 +-- 3 files changed, 33 insertions(+), 264 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 355844ecde..8eafb6212d 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2051,206 +2051,21 @@ void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) { _debug ("Manager: Init config file"); - // Default values, that will be overwritten by the call to - // 'populateFromFile' below. - - // Peer to peer settings - /* - _config.addDefaultValue(std::pair<std::string, std::string>(SRTP_ENABLE, - FALSE_STR), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - SRTP_RTP_FALLBACK, FALSE_STR), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - SRTP_KEY_EXCHANGE, "1"), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - ZRTP_HELLO_HASH, TRUE_STR), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - ZRTP_DISPLAY_SAS, TRUE_STR), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - ZRTP_DISPLAY_SAS_ONCE, FALSE_STR), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - ZRTP_NOT_SUPP_WARNING, TRUE_STR), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - TLS_LISTENER_PORT, DEFAULT_SIP_TLS_PORT), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>(TLS_ENABLE, - FALSE_STR), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - TLS_CA_LIST_FILE, EMPTY_FIELD), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - TLS_CERTIFICATE_FILE, EMPTY_FIELD), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - TLS_PRIVATE_KEY_FILE, EMPTY_FIELD), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>(TLS_PASSWORD, - EMPTY_FIELD), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>(TLS_METHOD, - "TLSv1"), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>(TLS_CIPHERS, - EMPTY_FIELD), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - TLS_SERVER_NAME, EMPTY_FIELD), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - TLS_VERIFY_SERVER, TRUE_STR), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - TLS_VERIFY_CLIENT, TRUE_STR), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - TLS_REQUIRE_CLIENT_CERTIFICATE, TRUE_STR), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - TLS_NEGOTIATION_TIMEOUT_SEC, "2"), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - TLS_NEGOTIATION_TIMEOUT_MSEC, "0"), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - LOCAL_INTERFACE, "default"), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - PUBLISHED_SAMEAS_LOCAL, TRUE_STR), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>(LOCAL_PORT, - DEFAULT_SIP_PORT), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>(PUBLISHED_PORT, - DEFAULT_SIP_PORT), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - PUBLISHED_ADDRESS, DEFAULT_ADDRESS), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>(STUN_ENABLE, - DFT_STUN_ENABLE), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>(STUN_SERVER, - DFT_STUN_SERVER), IP2IP_PROFILE); - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_ACCOUNT_ALIAS, EMPTY_FIELD), IP2IP_PROFILE); - */ - // Init display name to the username under which // this sflphone instance is running. - std::string diplayName(""); uid_t uid = getuid(); struct passwd * user_info = NULL; user_info = getpwuid(uid); - if (user_info != NULL) { - diplayName = user_info->pw_name; - } - - /* - _config.addDefaultValue(std::pair<std::string, std::string>(DISPLAY_NAME, - diplayName), IP2IP_PROFILE); - - // Signalisation settings - _config.addDefaultValue(std::pair<std::string, std::string>(SYMMETRIC, - TRUE_STR), SIGNALISATION); - _config.addDefaultValue(std::pair<std::string, std::string>(PLAY_DTMF, - TRUE_STR), SIGNALISATION); - _config.addDefaultValue(std::pair<std::string, std::string>(PLAY_TONES, - TRUE_STR), SIGNALISATION); - _config.addDefaultValue(std::pair<std::string, std::string>(PULSE_LENGTH, - DFT_PULSE_LENGTH_STR), SIGNALISATION); - _config.addDefaultValue(std::pair<std::string, std::string>(SEND_DTMF_AS, - SIP_INFO_STR), SIGNALISATION); - _config.addDefaultValue(std::pair<std::string, std::string>(ZRTP_ZIDFILE, - ZRTP_ZID_FILENAME), SIGNALISATION); - - // Audio settings - _config.addDefaultValue(std::pair<std::string, std::string>( - ALSA_CARD_ID_IN, ALSA_DFT_CARD), AUDIO); - _config.addDefaultValue(std::pair<std::string, std::string>( - ALSA_CARD_ID_OUT, ALSA_DFT_CARD), AUDIO); - _config.addDefaultValue(std::pair<std::string, std::string>( - ALSA_CARD_ID_RING, ALSA_DFT_CARD), AUDIO); - _config.addDefaultValue(std::pair<std::string, std::string>( - AUDIO_SAMPLE_RATE, DFT_SAMPLE_RATE), AUDIO); - _config.addDefaultValue(std::pair<std::string, std::string>( - ALSA_FRAME_SIZE, DFT_FRAME_SIZE), AUDIO); - _config.addDefaultValue(std::pair<std::string, std::string>(ALSA_PLUGIN, - PCM_DEFAULT), AUDIO); - _config.addDefaultValue(std::pair<std::string, std::string>(RING_CHOICE, - DFT_RINGTONE), AUDIO); - _config.addDefaultValue(std::pair<std::string, std::string>(VOLUME_SPKR, - DFT_VOL_SPKR_STR), AUDIO); - _config.addDefaultValue(std::pair<std::string, std::string>(VOLUME_MICRO, - DFT_VOL_MICRO_STR), AUDIO); - _config.addDefaultValue(std::pair<std::string, std::string>(RECORD_PATH, - DFT_RECORD_PATH), AUDIO); - - // Pulseaudio stream device - _config.addDefaultValue(std::pair<std::string, std::string>(PULSE_DEVICE_PLAYBACK, ""), AUDIO); - _config.addDefaultValue(std::pair<std::string, std::string>(PULSE_DEVICE_RECORD, ""), AUDIO); - _config.addDefaultValue(std::pair<std::string, std::string>(PULSE_DEVICE_RINGTONE, ""), AUDIO); - - - // General settings - _config.addDefaultValue(std::pair<std::string, std::string>(ZONE_TONE, - DFT_ZONE), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_RINGTONE, TRUE_STR), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_DIALPAD, - TRUE_STR), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_SEARCHBAR, TRUE_STR), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_START, - FALSE_STR), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_POPUP, - TRUE_STR), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_NOTIFY, - TRUE_STR), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_MAIL_NOTIFY, FALSE_STR), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_VOLUME, - TRUE_STR), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_HISTORY_LIMIT, DFT_HISTORY_LIMIT), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_HISTORY_ENABLED, TRUE_STR), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_AUDIO, - DFT_AUDIO_MANAGER), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_SIP_PORT, DFT_SIP_PORT), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_ACCOUNTS_ORDER, EMPTY_FIELD), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_MD5HASH, - FALSE_STR), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>(WINDOW_WIDTH, - DFT_WINDOW_WIDTH), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>(WINDOW_HEIGHT, - DFT_WINDOW_HEIGHT), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>( - WINDOW_POSITION_X, "0"), PREFERENCES); - _config.addDefaultValue(std::pair<std::string, std::string>( - WINDOW_POSITION_Y, "0"), PREFERENCES); - - // Addressbook settings - _config.addDefaultValue(std::pair<std::string, std::string>( - ADDRESSBOOK_ENABLE, TRUE_STR), ADDRESSBOOK); - _config.addDefaultValue(std::pair<std::string, std::string>( - ADDRESSBOOK_MAX_RESULTS, "25"), ADDRESSBOOK); - _config.addDefaultValue(std::pair<std::string, std::string>( - ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, FALSE_STR), ADDRESSBOOK); - _config.addDefaultValue(std::pair<std::string, std::string>( - ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, TRUE_STR), ADDRESSBOOK); - _config.addDefaultValue(std::pair<std::string, std::string>( - ADDRESSBOOK_DISPLAY_PHONE_HOME, FALSE_STR), ADDRESSBOOK); - _config.addDefaultValue(std::pair<std::string, std::string>( - ADDRESSBOOK_DISPLAY_PHONE_MOBILE, FALSE_STR), ADDRESSBOOK); - - // Hooks settings - _config.addDefaultValue(std::pair<std::string, std::string>( - URLHOOK_SIP_FIELD, HOOK_DEFAULT_SIP_FIELD), HOOKS); - _config.addDefaultValue(std::pair<std::string, std::string>( - URLHOOK_COMMAND, HOOK_DEFAULT_URL_COMMAND), HOOKS); - _config.addDefaultValue(std::pair<std::string, std::string>( - URLHOOK_SIP_ENABLED, FALSE_STR), HOOKS); - _config.addDefaultValue(std::pair<std::string, std::string>( - URLHOOK_IAX2_ENABLED, FALSE_STR), HOOKS); - _config.addDefaultValue(std::pair<std::string, std::string>( - PHONE_NUMBER_HOOK_ENABLED, FALSE_STR), HOOKS); - _config.addDefaultValue(std::pair<std::string, std::string>( - PHONE_NUMBER_HOOK_ADD_PREFIX, EMPTY_FIELD), HOOKS); - */ - - std::string path; // = "configurationexample.yml"; - // Loads config from ~/.sflphone/sflphonedrc or so.. + std::string path; + // Loads config from ~/.sflphone/sflphoned.yml or so.. if (createSettingsPath() == 1 && load_user_value) { - (alternate == "") ? path = _path : path = alternate; - std::cout << path << std::endl; - _exist = _config.populateFromFile(path); + (alternate == "") ? path = _path : path = alternate; + std::cout << path << std::endl; + _exist = _config.populateFromFile(path); } _debug("Manager: configuration file path: %s", path.c_str()); @@ -2315,52 +2130,6 @@ void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) { _error("Manager: %s", e.what()); } } - - /* - // Globally shared default values (not to be populated from file) - _config.addDefaultValue(std::pair<std::string, std::string>(HOSTNAME, - EMPTY_FIELD)); - - _config.addDefaultValue(std::pair<std::string, std::string>( - AUTHENTICATION_USERNAME, EMPTY_FIELD)); - - _config.addDefaultValue(std::pair<std::string, std::string>(USERNAME, - EMPTY_FIELD)); - - _config.addDefaultValue(std::pair<std::string, std::string>(PASSWORD, - EMPTY_FIELD)); - - _config.addDefaultValue(std::pair<std::string, std::string>(REALM, - DEFAULT_REALM)); - - _config.addDefaultValue(std::pair<std::string, std::string>(USERAGENT, - DFT_USERAGENT)); - - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_ACCOUNT_REGISTRATION_EXPIRE, DFT_EXPIRE_VALUE)); - - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_ACCOUNT_RESOLVE_ONCE, FALSE_STR)); - - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_ACCOUNT_ALIAS, EMPTY_FIELD)); - - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_ACCOUNT_MAILBOX, EMPTY_FIELD)); - - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_ACCOUNT_ENABLE, TRUE_STR)); - - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_CREDENTIAL_NUMBER, "0")); - - _config.addDefaultValue(std::pair<std::string, std::string>( - CONFIG_ACCOUNT_TYPE, DEFAULT_ACCOUNT_TYPE)); - */ - - // _setupLoaded = (fileExist != 1) ? false : true; - - // _setupLoaded = (_exist == 2) ? false : true; } /** @@ -3278,7 +3047,7 @@ bool ManagerImpl::setConfig (const std::string& section, } void ManagerImpl::setAccountsOrder (const std::string& order) { - _debug ("----------------------------------------- Manager: Set accounts order : %s", order.c_str()); + _debug ("Manager: Set accounts order : %s", order.c_str()); // Set the new config preferences.setAccountOrder(order); diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp index 2f7573c287..2663346ded 100644 --- a/sflphone-common/src/preferences.cpp +++ b/sflphone-common/src/preferences.cpp @@ -37,9 +37,9 @@ Preferences::Preferences() : _accountOrder("") , _historyLimit(30) , _historyMaxCalls(20) , _notifyMails(false) - , _zoneToneChoice("North America") + , _zoneToneChoice("North America") // DFT_ZONE , _registrationExpire(180) - , _ringtoneEnabled(true) + , _ringtoneEnabled(true) // CONFIG_RINGTONE , _portNum(5060) , _searchBarDisplay(true) , _zeroConfenable(false) @@ -131,10 +131,10 @@ void Preferences::unserialize(Conf::MappingNode *map) VoipPreference::VoipPreference() : _playDtmf(true) , _playTones(true) - , _pulseLength(250) + , _pulseLength(250)// DFT_PULSE_LENGTH_STR , _sendDtmfAs(0) , _symmetricRtp(true) - , _zidFile("zidFile") + , _zidFile("zidFile")// ZRTP_ZID_FILENAME { } @@ -191,7 +191,7 @@ void VoipPreference::unserialize(Conf::MappingNode *map) -AddressbookPreference::AddressbookPreference() : _photo(true) +AddressbookPreference::AddressbookPreference() : _photo(true) , _enabled(true) , _list("") , _maxResults(25) @@ -314,19 +314,19 @@ void HookPreference::unserialize(Conf::MappingNode *map) -AudioPreference::AudioPreference() : _cardin(0) - , _cardout(0) - , _cardring(0) - , _framesize(20) - , _plugin("default") - , _smplrate(44100) +AudioPreference::AudioPreference() : _cardin(0) // ALSA_DFT_CARD + , _cardout(0) // ALSA_DFT_CARD + , _cardring(0) // ALSA_DFT_CARD + , _framesize(20) // DFT_FRAME_SIZE + , _plugin("default") // PCM_DEFAULT + , _smplrate(44100) // DFT_SAMPLE_RATE , _devicePlayback("") , _deviceRecord("") , _deviceRingtone("") - , _recordpath("") - , _ringchoice("/usr/share/sflphone/ringtones/konga.ul") - , _volumemic(100) - , _volumespkr(100) + , _recordpath("") // DFT_RECORD_PATH + , _ringchoice("/usr/share/sflphone/ringtones/konga.ul") //DFT_RINGTONE + , _volumemic(100) // DFT_VOL_SPKR_STR + , _volumespkr(100) // DFT_VOL_MICRO_STR { } diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 3ed3adbf5b..463f92caf7 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -99,31 +99,31 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _tlsSetting (NULL) , _dtmfType(OVERRTP) , _tlsEnable("") - , _tlsPortStr("") + , _tlsPortStr(DEFAULT_SIP_TLS_PORT) , _tlsCaListFile("") , _tlsCertificateFile("") , _tlsPrivateKeyFile("") , _tlsPassword("") - , _tlsMethod("") + , _tlsMethod("TLSv1") , _tlsCiphers("") , _tlsServerName("") - , _tlsVerifyServer(false) - , _tlsVerifyClient(false) - , _tlsRequireClientCertificate(false) - , _tlsNegotiationTimeoutSec("") - , _tlsNegotiationTimeoutMsec("") - , _stunServer("stun.sflphone.org") + , _tlsVerifyServer(true) + , _tlsVerifyClient(true) + , _tlsRequireClientCertificate(true) + , _tlsNegotiationTimeoutSec("2") + , _tlsNegotiationTimeoutMsec("0") + , _stunServer(DFT_STUN_SERVER) , _tlsEnabled(false) , _stunEnabled(false) // , _routeSet("") // , _tlsListenerPort("5061") , _srtpEnabled(false) - , _srtpKeyExchange("") + , _srtpKeyExchange("sdes") , _srtpFallback(false) - , _zrtpDisplaySas(false) + , _zrtpDisplaySas(true) , _zrtpDisplaySasOnce(false) - , _zrtpHelloHash(false) - , _zrtpNotSuppWarning(false) + , _zrtpHelloHash(true) + , _zrtpNotSuppWarning(true) { _debug("Sip account constructor called"); -- GitLab From 6368a9ad8886e6947767771d2ec25a45d1424d47 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 15 Jul 2010 16:01:34 -0400 Subject: [PATCH 191/197] [#3170] Add route set for invite and registration requests --- sflphone-common/src/sip/sipaccount.cpp | 1 + sflphone-common/src/sip/sipaccount.h | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 463f92caf7..dd2cff5172 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -89,6 +89,7 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _publishedIpAddress ("") , _localPort (atoi (DEFAULT_SIP_PORT)) , _publishedPort (atoi (DEFAULT_SIP_PORT)) + , _serviceRoute("") , _tlsListenerPort (atoi (DEFAULT_SIP_TLS_PORT)) , _transportType (PJSIP_TRANSPORT_UNSPECIFIED) , _transport (NULL) diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index cf5a81c491..5d8d96c22e 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -432,6 +432,10 @@ class SIPAccount : public Account * @return void */ inline void setPublishedAddress(const std::string& publishedIpAddress) { _publishedIpAddress = publishedIpAddress; } + + inline std::string getServiceRoute(void) { return _serviceRoute; } + + inline void setServiceRoute(std::string route) { _serviceRoute = route; } /** * Get the chosen transport type. @@ -576,6 +580,8 @@ class SIPAccount : public Account pj_uint16_t _localPort; pj_uint16_t _publishedPort; + std::string _serviceRoute; + /** * The global TLS listener port which can be configured through the IP2IP_PROFILE */ -- GitLab From 7386f03bf8da9e8e024ce9c792a6b230c06a98b1 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 15 Jul 2010 16:01:53 -0400 Subject: [PATCH 192/197] [#3170] Add route set for invite and registration requests --- sflphone-common/src/sip/sipvoiplink.cpp | 51 ++++++++++++++++++------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index d04257a6b5..45f8a1437e 100755 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -590,7 +590,7 @@ int SIPVoIPLink::sendRegister (AccountID id) std::string contactUri = account->getContactHeader (address, portStr); - _debug ("sendRegister: fromUri: %s serverUri: %s contactUri: %s", + _debug ("UserAgent: sendRegister: fromUri: %s serverUri: %s contactUri: %s", fromUri.c_str(), srvUri.c_str(), contactUri.c_str()); @@ -607,31 +607,24 @@ int SIPVoIPLink::sendRegister (AccountID id) // Initializes registration // Set Route for registration passing throught one or several proxies + // status = pjsip_regc_init (regc, &pjSrv, &pjFrom, &pjFrom, 1, &pjContact, expire_value); + status = pjsip_regc_init (regc, &pjSrv, &pjFrom, &pjFrom, 1, &pjContact, expire_value); - /* - if(!(account->getDomainName().empty())) { + if(!(account->getServiceRoute().empty())) { - _error("Set route with %s", account->getHostname().c_str()); + _error("UserAgent: Set Service-Route with %s", account->getServiceRoute().c_str()); pjsip_route_hdr *route_set = pjsip_route_hdr_create(_pool); pjsip_route_hdr *routing = pjsip_route_hdr_create(_pool); pjsip_sip_uri *url = pjsip_sip_uri_create(_pool, 0); routing->name_addr.uri = (pjsip_uri*)url; - pj_strdup2(_pool, &url->host, account->getHostname().c_str()); + pj_strdup2(_pool, &url->host, account->getServiceRoute().c_str()); pj_list_push_back(&route_set, pjsip_hdr_clone(_pool, routing)); - status = pjsip_regc_init (regc, &pjSrv, &pjFrom, &pjFrom, 1, &pjContact, expire_value); - pjsip_regc_set_route_set(regc, route_set); } - else { - - status = pjsip_regc_init (regc, &pjSrv, &pjFrom, &pjFrom, 1, &pjContact, expire_value); - } - */ - if (status != PJ_SUCCESS) { _debug ("UserAgent: Unable to initialize account %d in sendRegister", status); @@ -1480,6 +1473,23 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) // Create the invite session for this call status = pjsip_inv_create_uac (dialog, call->getLocalSDP()->get_local_sdp_session(), 0, &inv); + + if(!(account->getServiceRoute().empty())) { + + _error("UserAgent: Set Service-Route with %s", account->getServiceRoute().c_str()); + + pjsip_route_hdr *route_set = pjsip_route_hdr_create(_pool); + pjsip_route_hdr *routing = pjsip_route_hdr_create(_pool); + pjsip_sip_uri *url = pjsip_sip_uri_create(_pool, 0); + routing->name_addr.uri = (pjsip_uri*)url; + pj_strdup2(_pool, &url->host, account->getServiceRoute().c_str()); + + pj_list_push_back(&route_set, pjsip_hdr_clone(_pool, routing)); + + pjsip_dlg_set_route_set(dialog, route_set); + } + + PJ_ASSERT_RETURN (status == PJ_SUCCESS, false); // Set auth information @@ -1745,6 +1755,21 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) // Create the invite session for this call status = pjsip_inv_create_uac (dialog, call->getLocalSDP()->get_local_sdp_session(), 0, &inv); PJ_ASSERT_RETURN (status == PJ_SUCCESS, false); + + if(!(account->getServiceRoute().empty())) { + + _error("UserAgent: Set Service-Route with %s", account->getServiceRoute().c_str()); + + pjsip_route_hdr *route_set = pjsip_route_hdr_create(_pool); + pjsip_route_hdr *routing = pjsip_route_hdr_create(_pool); + pjsip_sip_uri *url = pjsip_sip_uri_create(_pool, 0); + routing->name_addr.uri = (pjsip_uri*)url; + pj_strdup2(_pool, &url->host, account->getServiceRoute().c_str()); + + pj_list_push_back(&route_set, pjsip_hdr_clone(_pool, routing)); + + pjsip_dlg_set_route_set(dialog, route_set); + } // Set the appropriate transport pjsip_tpselector *tp; -- GitLab From 9642e9fca2a28b1464ef4eb9bd629f94392361d8 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 15 Jul 2010 16:46:59 -0400 Subject: [PATCH 193/197] [#3170] Update configuration with service routes --- sflphone-common/src/sip/sipaccount.cpp | 12 +++++++++--- sflphone-common/src/sip/sipaccount.h | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index dd2cff5172..8a3011e5ae 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -89,7 +89,7 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _publishedIpAddress ("") , _localPort (atoi (DEFAULT_SIP_PORT)) , _publishedPort (atoi (DEFAULT_SIP_PORT)) - , _serviceRoute("") + , _serviceRoute("192.168.50.90") , _tlsListenerPort (atoi (DEFAULT_SIP_TLS_PORT)) , _transportType (PJSIP_TRANSPORT_UNSPECIFIED) , _transport (NULL) @@ -176,6 +176,7 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { Conf::ScalarNode interface(_interface); std::stringstream portstr; portstr << _localPort; Conf::ScalarNode port(portstr.str()); + Conf::ScalarNode serviceRoute(_serviceRoute); Conf::ScalarNode mailbox("97"); Conf::ScalarNode publishAddr(_publishedIpAddress); @@ -226,10 +227,13 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { accountmap.setKeyValue(expireKey, &expire); accountmap.setKeyValue(interfaceKey, &interface); accountmap.setKeyValue(portKey, &port); + accountmap.setKeyValue(stunServerKey, &stunServer); + accountmap.setKeyValue(stunEnabledKey, &stunEnabled); accountmap.setKeyValue(publishAddrKey, &publishAddr); accountmap.setKeyValue(publishPortKey, &publishPort); accountmap.setKeyValue(sameasLocalKey, &sameasLocal); accountmap.setKeyValue(resolveOnceKey, &resolveOnce); + accountmap.setKeyValue(serviceRouteKey, &serviceRoute); accountmap.setKeyValue(dtmfTypeKey, &dtmfType); accountmap.setKeyValue(displayNameKey, &displayName); accountmap.setKeyValue(codecsKey, &codecs); @@ -319,6 +323,8 @@ void SIPAccount::unserialize(Conf::MappingNode *map) val = (Conf::ScalarNode *)(map->getValue(dtmfTypeKey)); if(val) { val = NULL; } // _dtmfType = atoi(val->getValue(); + val = (Conf::ScalarNode *)(map->getValue(serviceRouteKey)); + if(val) { _serviceRoute = val->getValue(); } // stun enabled val = (Conf::ScalarNode *)(map->getValue(stunEnabledKey)); @@ -489,7 +495,7 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det find_in_map(CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire) setDisplayName(displayName); - setRouteSet(routeset); + setServiceRoute(routeset); setLocalInterface(localInterface); setPublishedSameasLocal((publishedSameasLocal.compare("true") == 0) ? true : false); setPublishedAddress(publishedAddress); @@ -628,7 +634,7 @@ std::map<std::string, std::string> SIPAccount::getAccountDetails() // Add sip specific details if(getType() == "SIP") { - a.insert(std::pair<std::string, std::string>(ROUTESET, getRouteSet())); + a.insert(std::pair<std::string, std::string>(ROUTESET, getServiceRoute())); a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_RESOLVE_ONCE, isResolveOnce() ? "true" : "false")); a.insert(std::pair<std::string, std::string>(REALM, _realm)); a.insert(std::pair<std::string, std::string>(USERAGENT, getUseragent())); diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 5d8d96c22e..0285f695cb 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -60,6 +60,7 @@ const Conf::Key publishPortKey("publishPort"); const Conf::Key sameasLocalKey("sameasLocal"); const Conf::Key resolveOnceKey("resolveOnce"); const Conf::Key dtmfTypeKey("dtmfType"); +const Conf::Key serviceRouteKey("serviceRoute"); // TODO: write an object to store credential which implement serializable const Conf::Key srtpKey("srtp"); -- GitLab From ccac7e73076c7d0d1d67a16fda39f5c6dbcc2153 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 15 Jul 2010 16:54:01 -0400 Subject: [PATCH 194/197] [#3170] Set empty string as a default SIP service route --- sflphone-common/src/sip/sipaccount.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 8a3011e5ae..fad078f22f 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -89,7 +89,7 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _publishedIpAddress ("") , _localPort (atoi (DEFAULT_SIP_PORT)) , _publishedPort (atoi (DEFAULT_SIP_PORT)) - , _serviceRoute("192.168.50.90") + , _serviceRoute("") , _tlsListenerPort (atoi (DEFAULT_SIP_TLS_PORT)) , _transportType (PJSIP_TRANSPORT_UNSPECIFIED) , _transport (NULL) -- GitLab From 2970fbd30da7941103cefd2895129656d1e9aaac Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Thu, 15 Jul 2010 17:11:52 -0400 Subject: [PATCH 195/197] [#3174] Send error message oif libyaml or yaml.h not present in configuration --- sflphone-common/configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index 0157615570..e7abe149da 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -269,11 +269,11 @@ AC_SUBST(xml_CFLAGS) AC_SUBST(xml_LIBS) AC_CHECK_LIB([yaml], yaml_parser_initialize, - [AC_CHECK_HEADERS(expat.h, have_expat=true, have_expat=false)], + [AC_CHECK_HEADERS(yaml.h, have_yaml=true, have_yaml=false)], have_yaml = false) if ! $have_yaml; then -AC_MSG_ERROR([You need the eXpat xml parser] +AC_MSG_ERROR([You need the libyaml yaml parser] [http://expat.sourceforge.net/]) fi -- GitLab From 8c5e5dd5b68bc25ccd881e25f3a7280425fb5821 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 16 Jul 2010 17:19:32 -0400 Subject: [PATCH 196/197] [#3366] Handle early media received from RTP --- sflphone-common/src/audio/alsa/alsalayer.cpp | 8 +- .../src/audio/audiortp/AudioRtpSession.h | 13 ++- .../audio/audiortp/AudioSymmetricRtpSession.h | 2 +- .../src/audio/pulseaudio/pulselayer.cpp | 11 +- sflphone-common/src/managerimpl.cpp | 46 ++++---- sippxml/testEarlyMedia.xml | 107 ++++++++++++++++++ 6 files changed, 150 insertions(+), 37 deletions(-) create mode 100644 sippxml/testEarlyMedia.xml diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index 89e6f41513..5c19f3da8c 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -947,7 +947,9 @@ void AlsaLayer::audioCallback(void) } else { - if (tone) { + normalAvailBytes = getMainBuffer()->availForGet(); + + if (tone && (normalAvailBytes <= 0)) { out = (SFLDataFormat *) malloc (playbackAvailBytes); tone->getNext (out, playbackAvailSmpl, spkrVolume); @@ -957,7 +959,7 @@ void AlsaLayer::audioCallback(void) out = 0; } - else if (file_tone && !_RingtoneHandle) { + else if (file_tone && !_RingtoneHandle && (normalAvailBytes <= 0)) { out = (SFLDataFormat *) malloc (playbackAvailBytes); file_tone->getNext (out, playbackAvailSmpl, spkrVolume); @@ -985,8 +987,6 @@ void AlsaLayer::audioCallback(void) } - - normalAvailBytes = getMainBuffer()->availForGet(); toGet = (normalAvailBytes < (int) maxNbBytesToGet) ? normalAvailBytes : maxNbBytesToGet; out = (SFLDataFormat*) malloc (maxNbBytesToGet); diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index 5144d37679..cd4f7edc3c 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -574,8 +574,10 @@ namespace sfl { // set available byte to maxByteToGet int bytesAvail = (availBytesFromMic < maxBytesToGet) ? availBytesFromMic : maxBytesToGet; - if (bytesAvail == 0) - return 0; + if (bytesAvail == 0) { + memset(_micDataEncoded, 0, sizeof(SFLDataFormat)); + return _audiocodec->getFrameSize(); + } // Get bytes from micRingBuffer to data_from_mic int nbSample = _manager->getAudioDriver()->getMainBuffer()->getData(_micData , bytesAvail, 100, _ca->getCallId()) / sizeof (SFLDataFormat); @@ -693,6 +695,7 @@ namespace sfl { template <typename D> void AudioRtpSession<D>::receiveSpeakerData () { + if (!_audiolayer) { _debug ("No audiolayer available for speaker"); return; @@ -707,8 +710,9 @@ namespace sfl { int packetTimestamp = static_cast<D*>(this)->getFirstTimestamp(); adu = static_cast<D*>(this)->getData(packetTimestamp); - if(!adu) + if(!adu) { return; + } unsigned char* spkrDataIn = NULL; unsigned int size = 0; @@ -723,8 +727,6 @@ namespace sfl { spkrDataIn = (unsigned char*) adu->getData(); // data in char size = adu->getSize(); // size in char - - result = jb_put(_jbuffer, spkrDataIn, JB_TYPE_VOICE, _packetLength, _ts+=20, _currentTime); } @@ -758,6 +760,7 @@ namespace sfl { template <typename D> void AudioRtpSession<D>::run () { + // Timestamp must be initialized randomly _timestamp = static_cast<D*>(this)->getCurrentTimestamp(); diff --git a/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h b/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h index 0713f3db0c..c1260a6fc3 100644 --- a/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h @@ -40,7 +40,7 @@ namespace sfl { { public: AudioSymmetricRtpSession(ManagerImpl * manager, SIPCall * sipcall) : - ost::SymmetricRTPSession(ost::InetHostAddress(sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()), + ost::SymmetricRTPSession(ost::InetHostAddress(sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()), AudioRtpSession<AudioSymmetricRtpSession>(manager, sipcall) { _debug("AudioSymmetricRtpSession initialized\n"); diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 403ec11ad0..667f0cf272 100755 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -798,7 +798,6 @@ void PulseLayer::writeToSpeaker (void) SFLDataFormat* out;// = (SFLDataFormat*)pa_xmalloc(framesPerBuffer); urgentAvailBytes = _urgentRingBuffer.AvailForGet(); - // available bytes to be written in pulseaudio internal buffer int writeableSize = pa_stream_writable_size (playback->pulseStream()); @@ -821,12 +820,16 @@ void PulseLayer::writeToSpeaker (void) } else { + // Get ringtone AudioLoop* tone = _manager->getTelephoneTone(); + // We must test if data have been received from network in case of early media + normalAvailBytes = getMainBuffer()->availForGet(); + // flush remaining samples in _urgentRingBuffer flushUrgent(); - if (tone != 0) { + if ((tone != 0) && (normalAvailBytes <= 0)) { if (playback->getStreamState() == PA_STREAM_READY) { @@ -845,9 +848,7 @@ void PulseLayer::writeToSpeaker (void) int maxNbBytesToGet = 0; - // test if audio resampling is needed - if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) { // upsamplefactor is used to compute the number of bytes to get in the ring buffer @@ -862,8 +863,6 @@ void PulseLayer::writeToSpeaker (void) } - normalAvailBytes = getMainBuffer()->availForGet(); - byteToGet = (normalAvailBytes < (int) (maxNbBytesToGet)) ? normalAvailBytes : maxNbBytesToGet; if (byteToGet) { diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 8eafb6212d..662c7f1646 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1355,38 +1355,42 @@ void ManagerImpl::addStream (const CallID& call_id) { if (participToConference(call_id)) { - // bind to conference participant - ConferenceMap::iterator iter = _conferencemap.find(call->getConfId()); + _debug("Manager: Add stream to conference"); - if (iter != _conferencemap.end()) { - Conference* conf = iter->second; + // bind to conference participant + ConferenceMap::iterator iter = _conferencemap.find(call->getConfId()); - conf->bindParticipant(call_id); + if (iter != _conferencemap.end()) { + Conference* conf = iter->second; - ParticipantSet participants = conf->getParticipantList(); - // reset ring buffer for all conference participant - ParticipantSet::iterator iter_p = participants.begin(); + conf->bindParticipant(call_id); - while (iter_p != participants.end()) { + ParticipantSet participants = conf->getParticipantList(); + // reset ring buffer for all conference participant + ParticipantSet::iterator iter_p = participants.begin(); - // to avoid puting onhold the call - // switchCall(""); - _audiodriver->getMainBuffer()->flush(*iter_p); + while (iter_p != participants.end()) { - iter_p++; - } + // to avoid puting onhold the call + // switchCall(""); + _audiodriver->getMainBuffer()->flush(*iter_p); + + iter_p++; + } - _audiodriver->getMainBuffer()->flush(default_id); - } + _audiodriver->getMainBuffer()->flush(default_id); + } } else { - // bind to main - getAudioDriver()->getMainBuffer()->bindCallID(call_id); + _debug("Manager: Add stream to call"); - // _audiodriver->getMainBuffer()->flush(default_id); - _audiodriver->flushUrgent(); - _audiodriver->flushMain(); + // bind to main + getAudioDriver()->getMainBuffer()->bindCallID(call_id); + + // _audiodriver->getMainBuffer()->flush(default_id); + _audiodriver->flushUrgent(); + _audiodriver->flushMain(); } diff --git a/sippxml/testEarlyMedia.xml b/sippxml/testEarlyMedia.xml new file mode 100644 index 0000000000..28f34ff4f0 --- /dev/null +++ b/sippxml/testEarlyMedia.xml @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd"> + +<!-- sudo sipp -sf testEarlyMedia.xml 127.0.0.1 -i 127.0.0.1 -p 5062 -l 1 -m 1 -mp 6000 --> + +<scenario name="Basic UAS responder"> + + <recv request="INVITE" crlf="true"> + </recv> + + + <send> + <![CDATA[ + + SIP/2.0 100 Ringing + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[local_ip]:[local_port];transport=[transport]> + Content-Length: 0 + + ]]> + </send> + + <send> + <![CDATA[ + + SIP/2.0 183 Trying + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[local_ip]:[local_port];transport=[transport]> + Content-Type: application/sdp + Content-Length: [len] + + v=0 + o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip] + s=- + c=IN IP[media_ip_type] [media_ip] + t=0 0 + m=audio [media_port] RTP/AVP 0 + a=rtpmap:0 PCMU/8000 + + ]]> + </send> + + <!-- Play a pre-recorded PCAP file (RTP stream) --> + <nop> + <action> + <exec play_pcap_audio="g711a.pcap"/> + </action> + </nop> + + <!-- Pause 8 seconds, which is approximately the duration of the --> + <!-- PCAP file --> + <pause milliseconds="8000"/> + + <send retrans="500"> + <![CDATA[ + + SIP/2.0 200 OK + [last_Via:] + [last_From:] + [last_To:];tag=[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[local_ip]:[local_port];transport=[transport]> + Content-Length: [len] + + ]]> + </send> + + <recv request="ACK" + optional="true" + rtd="true" + crlf="true"> + </recv> + + <recv request="BYE"> + </recv> + + <send> + <![CDATA[ + + SIP/2.0 200 OK + [last_Via:] + [last_From:] + [last_To:] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[local_ip]:[local_port];transport=[transport]> + Content-Length: 0 + + ]]> + </send> + + <pause milliseconds="4000"/> + + + <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/> + + <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/> + +</scenario> -- GitLab From c9d7e1f3f9acf433baf0366a767a8a62927499ab Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 16 Jul 2010 17:32:45 -0400 Subject: [PATCH 197/197] [#3170] Siproute test --- sippxml/simpleServiceRoute.xml | 85 ++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 sippxml/simpleServiceRoute.xml diff --git a/sippxml/simpleServiceRoute.xml b/sippxml/simpleServiceRoute.xml new file mode 100644 index 0000000000..f09cd05012 --- /dev/null +++ b/sippxml/simpleServiceRoute.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd"> + +<scenario name="Basic Sipstone UAC"> + + <send retrans="500"> + <![CDATA[ + + INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number] + To: sut <sip:[service]@[remote_ip]:[remote_port]> + Call-ID: [call_id] + CSeq: 1 INVITE + Contact: sip:sipp@[local_ip]:[local_port] + Max-Forwards: 70 + Subject: Performance Test + Content-Type: application/sdp + Content-Length: [len] + Route: <sip:sipp@[local_ip]:[local_port]> + + v=0 + o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip] + s=- + c=IN IP[media_ip_type] [media_ip] + t=0 0 + m=audio [media_port] RTP/AVP 0 + a=rtpmap:0 PCMU/8000 + + ]]> + </send> + + <recv response="100" + optional="true"> + </recv> + + <recv response="183" optional="true"> + </recv> + + <recv response="200" rtd="true"> + </recv> + + <send> + <![CDATA[ + + ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number] + To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param] + Call-ID: [call_id] + CSeq: 1 ACK + Contact: sip:sipp@[local_ip]:[local_port] + Max-Forwards: 70 + Subject: Performance Test + Content-Length: 0 + + ]]> + </send> + + <pause/> + + <send retrans="500"> + <![CDATA[ + + BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number] + To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param] + Call-ID: [call_id] + CSeq: 2 BYE + Contact: sip:sipp@[local_ip]:[local_port] + Max-Forwards: 70 + Subject: Performance Test + Content-Length: 0 + + ]]> + </send> + + <recv response="200" crlf="true"> + </recv> + + <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/> + + <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/> + +</scenario> -- GitLab