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 &map; }
+
+  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 &map; }
 
-  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 &map; }
 
+  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, &notSuppWarning);
+
+  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, &notSuppWarning);
+
+  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, &notifyMails);
+  preferencemap.setKeyValue(zoneToneChoiceKey, &zoneToneChoice);
+  preferencemap.setKeyValue(registrationExpireKey, &registrationExpire);
+  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, &notSuppWarning);
 
   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, &notSuppWarning);
 
   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